Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b2540b6b authored by Daniel Nishi's avatar Daniel Nishi Committed by gitbuildkicker
Browse files

Revert "Use the StorageStatsManager in FileCollector."

This reverts commit bd441caa due to
causing NPE crashes.

Bug: 37314851
Change-Id: I933eaa3888f84945873de8f7fca0d235306f6aaa
(cherry picked from commit 3cf3b199)
parent 78fe372e
Loading
Loading
Loading
Loading
+12 −22
Original line number Original line Diff line number Diff line
@@ -73,6 +73,7 @@ public class DiskStatsLoggingService extends JobService {
        final int userId = UserHandle.myUserId();
        final int userId = UserHandle.myUserId();
        UserEnvironment environment = new UserEnvironment(userId);
        UserEnvironment environment = new UserEnvironment(userId);
        LogRunnable task = new LogRunnable();
        LogRunnable task = new LogRunnable();
        task.setRootDirectory(environment.getExternalStorageDirectory());
        task.setDownloadsDirectory(
        task.setDownloadsDirectory(
                environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
                environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
        task.setSystemSize(FileCollector.getSystemSize(this));
        task.setSystemSize(FileCollector.getSystemSize(this));
@@ -126,10 +127,14 @@ public class DiskStatsLoggingService extends JobService {
        private JobParameters mParams;
        private JobParameters mParams;
        private AppCollector mCollector;
        private AppCollector mCollector;
        private File mOutputFile;
        private File mOutputFile;
        private File mRootDirectory;
        private File mDownloadsDirectory;
        private File mDownloadsDirectory;
        private Context mContext;
        private long mSystemSize;
        private long mSystemSize;


        public void setRootDirectory(File file) {
            mRootDirectory = file;
        }

        public void setDownloadsDirectory(File file) {
        public void setDownloadsDirectory(File file) {
            mDownloadsDirectory = file;
            mDownloadsDirectory = file;
        }
        }
@@ -146,25 +151,14 @@ public class DiskStatsLoggingService extends JobService {
            mSystemSize = size;
            mSystemSize = size;
        }
        }


        public void setContext(Context context) {
            mContext = context;
        }

        public void setJobService(JobService jobService, JobParameters params) {
        public void setJobService(JobService jobService, JobParameters params) {
            mJobService = jobService;
            mJobService = jobService;
            mParams = params;
            mParams = params;
        }
        }


        public void run() {
        public void run() {
            FileCollector.MeasurementResult mainCategories;
            FileCollector.MeasurementResult mainCategories =
            try {
                    FileCollector.getMeasurementResult(mRootDirectory);
                mainCategories = FileCollector.getMeasurementResult(mContext);
            } catch (IllegalStateException e) {
                // This can occur if installd has an issue.
                Log.e(TAG, "Error while measuring storage", e);
                finishJob(true);
                return;
            }
            FileCollector.MeasurementResult downloads =
            FileCollector.MeasurementResult downloads =
                    FileCollector.getMeasurementResult(mDownloadsDirectory);
                    FileCollector.getMeasurementResult(mDownloadsDirectory);


@@ -174,10 +168,12 @@ public class DiskStatsLoggingService extends JobService {
                needsReschedule = false;
                needsReschedule = false;
                logToFile(mainCategories, downloads, stats, mSystemSize);
                logToFile(mainCategories, downloads, stats, mSystemSize);
            } else {
            } else {
                Log.w(TAG, "Timed out while fetching package stats.");
                Log.w("TAG", "Timed out while fetching package stats.");
            }
            }


            finishJob(needsReschedule);
            if (mJobService != null) {
                mJobService.jobFinished(mParams, needsReschedule);
            }
        }
        }


        private void logToFile(MeasurementResult mainCategories, MeasurementResult downloads,
        private void logToFile(MeasurementResult mainCategories, MeasurementResult downloads,
@@ -191,11 +187,5 @@ public class DiskStatsLoggingService extends JobService {
                Log.e(TAG, "Exception while writing opportunistic disk file cache.", e);
                Log.e(TAG, "Exception while writing opportunistic disk file cache.", e);
            }
            }
        }
        }

        private void finishJob(boolean needsReschedule) {
            if (mJobService != null) {
                mJobService.jobFinished(mParams, needsReschedule);
            }
        }
    }
    }
}
}
 No newline at end of file
+0 −24
Original line number Original line Diff line number Diff line
@@ -17,11 +17,8 @@
package com.android.server.storage;
package com.android.server.storage;


import android.annotation.IntDef;
import android.annotation.IntDef;
import android.app.usage.ExternalStorageStats;
import android.app.usage.StorageStatsManager;
import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.os.storage.StorageManager;
import android.os.storage.VolumeInfo;
import android.os.storage.VolumeInfo;
import android.util.ArrayMap;
import android.util.ArrayMap;
@@ -156,30 +153,9 @@ public class FileCollector {
                new MeasurementResult());
                new MeasurementResult());
    }
    }


    /**
     * Returns the file categorization result for the primary internal storage UUID.
     *
     * @param context
     */
    public static MeasurementResult getMeasurementResult(Context context) {
        MeasurementResult result = new MeasurementResult();
        StorageStatsManager ssm =
                (StorageStatsManager) context.getSystemService(Context.STORAGE_STATS_SERVICE);
        ExternalStorageStats stats =
                ssm.queryExternalStatsForUser(
                        StorageManager.UUID_PRIVATE_INTERNAL, UserHandle.of(context.getUserId()));
        result.imagesSize = stats.getImageBytes();
        result.videosSize = stats.getVideoBytes();
        result.audioSize = stats.getAudioBytes();
        result.miscSize =
                stats.getTotalBytes() - result.imagesSize - result.videosSize - result.audioSize;
        return result;
    }

    /**
    /**
     * Returns the size of a system for a given context. This is done by finding the difference
     * Returns the size of a system for a given context. This is done by finding the difference
     * between the shared data and the total primary storage size.
     * between the shared data and the total primary storage size.
     *
     * @param context Context to use to get storage information.
     * @param context Context to use to get storage information.
     */
     */
    public static long getSystemSize(Context context) {
    public static long getSystemSize(Context context) {
+15 −23
Original line number Original line Diff line number Diff line
@@ -20,18 +20,15 @@ import static com.google.common.truth.Truth.assertThat;


import static org.mockito.Matchers.any;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Mockito.eq;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.app.job.JobService;
import android.app.job.JobService;
import android.app.usage.ExternalStorageStats;
import android.app.job.JobParameters;
import android.app.usage.StorageStatsManager;
import android.content.pm.PackageStats;
import android.content.pm.PackageStats;
import android.os.UserHandle;
import android.test.AndroidTestCase;
import android.test.AndroidTestCase;
import android.util.Log;


import com.android.server.storage.DiskStatsLoggingService.LogRunnable;
import com.android.server.storage.DiskStatsLoggingService.LogRunnable;


@@ -55,10 +52,8 @@ import java.util.ArrayList;
public class DiskStatsLoggingServiceTest extends AndroidTestCase {
public class DiskStatsLoggingServiceTest extends AndroidTestCase {
    @Rule public TemporaryFolder mTemporaryFolder;
    @Rule public TemporaryFolder mTemporaryFolder;
    @Rule public TemporaryFolder mDownloads;
    @Rule public TemporaryFolder mDownloads;
    @Rule public TemporaryFolder mRootDirectory;
    @Mock private AppCollector mCollector;
    @Mock private AppCollector mCollector;
    @Mock private JobService mJobService;
    @Mock private StorageStatsManager mSsm;
    private ExternalStorageStats mStorageStats;
    private File mInputFile;
    private File mInputFile;




@@ -71,10 +66,8 @@ public class DiskStatsLoggingServiceTest extends AndroidTestCase {
        mInputFile = mTemporaryFolder.newFile();
        mInputFile = mTemporaryFolder.newFile();
        mDownloads = new TemporaryFolder();
        mDownloads = new TemporaryFolder();
        mDownloads.create();
        mDownloads.create();
        mStorageStats = new ExternalStorageStats();
        mRootDirectory = new TemporaryFolder();
        when(mSsm.queryExternalStatsForUser(isNull(String.class), any(UserHandle.class)))
        mRootDirectory.create();
                .thenReturn(mStorageStats);
        when(mJobService.getSystemService(anyString())).thenReturn(mSsm);
    }
    }


    @Test
    @Test
@@ -82,9 +75,9 @@ public class DiskStatsLoggingServiceTest extends AndroidTestCase {
        LogRunnable task = new LogRunnable();
        LogRunnable task = new LogRunnable();
        task.setAppCollector(mCollector);
        task.setAppCollector(mCollector);
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setRootDirectory(mRootDirectory.getRoot());
        task.setLogOutputFile(mInputFile);
        task.setLogOutputFile(mInputFile);
        task.setSystemSize(0L);
        task.setSystemSize(0L);
        task.setContext(mJobService);
        task.run();
        task.run();


        JSONObject json = getJsonOutput();
        JSONObject json = getJsonOutput();
@@ -106,10 +99,10 @@ public class DiskStatsLoggingServiceTest extends AndroidTestCase {
    public void testPopulatedLogTask() throws Exception {
    public void testPopulatedLogTask() throws Exception {
        // Write data to directories.
        // Write data to directories.
        writeDataToFile(mDownloads.newFile(), "lol");
        writeDataToFile(mDownloads.newFile(), "lol");
        mStorageStats.audioBytes = 6L;
        writeDataToFile(mRootDirectory.newFile("test.jpg"), "1234");
        mStorageStats.imageBytes = 4L;
        writeDataToFile(mRootDirectory.newFile("test.mp4"), "12345");
        mStorageStats.videoBytes = 5L;
        writeDataToFile(mRootDirectory.newFile("test.mp3"), "123456");
        mStorageStats.totalBytes = 22L;
        writeDataToFile(mRootDirectory.newFile("test.whatever"), "1234567");


        // Write apps.
        // Write apps.
        ArrayList<PackageStats> apps = new ArrayList<>();
        ArrayList<PackageStats> apps = new ArrayList<>();
@@ -117,16 +110,15 @@ public class DiskStatsLoggingServiceTest extends AndroidTestCase {
        testApp.dataSize = 5L;
        testApp.dataSize = 5L;
        testApp.cacheSize = 55L;
        testApp.cacheSize = 55L;
        testApp.codeSize = 10L;
        testApp.codeSize = 10L;
        testApp.userHandle = UserHandle.USER_SYSTEM;
        apps.add(testApp);
        apps.add(testApp);
        when(mCollector.getPackageStats(anyLong())).thenReturn(apps);
        when(mCollector.getPackageStats(anyInt())).thenReturn(apps);


        LogRunnable task = new LogRunnable();
        LogRunnable task = new LogRunnable();
        task.setAppCollector(mCollector);
        task.setAppCollector(mCollector);
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setRootDirectory(mRootDirectory.getRoot());
        task.setLogOutputFile(mInputFile);
        task.setLogOutputFile(mInputFile);
        task.setSystemSize(10L);
        task.setSystemSize(10L);
        task.setContext(mJobService);
        task.run();
        task.run();


        JSONObject json = getJsonOutput();
        JSONObject json = getJsonOutput();
@@ -151,9 +143,9 @@ public class DiskStatsLoggingServiceTest extends AndroidTestCase {
        LogRunnable task = new LogRunnable();
        LogRunnable task = new LogRunnable();
        task.setAppCollector(mCollector);
        task.setAppCollector(mCollector);
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setDownloadsDirectory(mDownloads.getRoot());
        task.setRootDirectory(mRootDirectory.getRoot());
        task.setLogOutputFile(mInputFile);
        task.setLogOutputFile(mInputFile);
        task.setSystemSize(10L);
        task.setSystemSize(10L);
        task.setContext(mJobService);
        task.run();
        task.run();


        // No exception should be thrown.
        // No exception should be thrown.