Loading services/core/java/com/android/server/storage/DiskStatsFileLogger.java +9 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.storage; import android.content.pm.PackageStats; import android.os.Environment; import android.os.UserHandle; import android.util.ArrayMap; import android.util.Log; Loading Loading @@ -118,7 +119,7 @@ public class DiskStatsFileLogger { long appSizeSum = 0L; long cacheSizeSum = 0L; boolean isExternal = Environment.isExternalStorageEmulated(); for (Map.Entry<String, PackageStats> entry : mergePackagesAcrossUsers().entrySet()) { for (Map.Entry<String, PackageStats> entry : filterOnlyPrimaryUser().entrySet()) { PackageStats stat = entry.getValue(); long appSize = stat.codeSize + stat.dataSize; long cacheSize = stat.cacheSize; Loading @@ -141,14 +142,17 @@ public class DiskStatsFileLogger { } /** * A given package may exist for multiple users with distinct sizes. This function merges * the duplicated packages together and sums up their sizes to get the actual totals for the * package. * A given package may exist for multiple users with distinct sizes. This function filters * the packages that do not belong to user 0 out to ensure that we get good stats for a subset. * @return A mapping of package name to merged package stats. */ private ArrayMap<String, PackageStats> mergePackagesAcrossUsers() { private ArrayMap<String, PackageStats> filterOnlyPrimaryUser() { ArrayMap<String, PackageStats> packageMap = new ArrayMap<>(); for (PackageStats stat : mPackageStats) { if (stat.userHandle != UserHandle.USER_SYSTEM) { continue; } PackageStats existingStats = packageMap.get(stat.packageName); if (existingStats != null) { existingStats.cacheSize += stat.cacheSize; Loading services/tests/servicestests/src/com/android/server/storage/DiskStatsFileLoggerTest.java +5 −5 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ public class DiskStatsFileLoggerTest extends AndroidTestCase { } @Test public void testDuplicatePackageNameIsMergedAcrossMultipleUsers() throws Exception { public void testDuplicatePackageNameIsNotMergedAcrossMultipleUsers() throws Exception { PackageStats app = new PackageStats("com.test.app"); app.dataSize = 1000; app.externalDataSize = 1000; Loading @@ -175,19 +175,19 @@ public class DiskStatsFileLoggerTest extends AndroidTestCase { logger.dumpToFile(mOutputFile); JSONObject output = getOutputFileAsJson(); assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(2200); assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(22); assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(2000); assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(20); JSONArray packageNames = output.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY); assertThat(packageNames.length()).isEqualTo(1); assertThat(packageNames.getString(0)).isEqualTo("com.test.app"); JSONArray appSizes = output.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY); assertThat(appSizes.length()).isEqualTo(1); assertThat(appSizes.getLong(0)).isEqualTo(2200); assertThat(appSizes.getLong(0)).isEqualTo(2000); JSONArray cacheSizes = output.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY); assertThat(cacheSizes.length()).isEqualTo(1); assertThat(cacheSizes.getLong(0)).isEqualTo(22); assertThat(cacheSizes.getLong(0)).isEqualTo(20); } private JSONObject getOutputFileAsJson() throws Exception { Loading Loading
services/core/java/com/android/server/storage/DiskStatsFileLogger.java +9 −5 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.storage; import android.content.pm.PackageStats; import android.os.Environment; import android.os.UserHandle; import android.util.ArrayMap; import android.util.Log; Loading Loading @@ -118,7 +119,7 @@ public class DiskStatsFileLogger { long appSizeSum = 0L; long cacheSizeSum = 0L; boolean isExternal = Environment.isExternalStorageEmulated(); for (Map.Entry<String, PackageStats> entry : mergePackagesAcrossUsers().entrySet()) { for (Map.Entry<String, PackageStats> entry : filterOnlyPrimaryUser().entrySet()) { PackageStats stat = entry.getValue(); long appSize = stat.codeSize + stat.dataSize; long cacheSize = stat.cacheSize; Loading @@ -141,14 +142,17 @@ public class DiskStatsFileLogger { } /** * A given package may exist for multiple users with distinct sizes. This function merges * the duplicated packages together and sums up their sizes to get the actual totals for the * package. * A given package may exist for multiple users with distinct sizes. This function filters * the packages that do not belong to user 0 out to ensure that we get good stats for a subset. * @return A mapping of package name to merged package stats. */ private ArrayMap<String, PackageStats> mergePackagesAcrossUsers() { private ArrayMap<String, PackageStats> filterOnlyPrimaryUser() { ArrayMap<String, PackageStats> packageMap = new ArrayMap<>(); for (PackageStats stat : mPackageStats) { if (stat.userHandle != UserHandle.USER_SYSTEM) { continue; } PackageStats existingStats = packageMap.get(stat.packageName); if (existingStats != null) { existingStats.cacheSize += stat.cacheSize; Loading
services/tests/servicestests/src/com/android/server/storage/DiskStatsFileLoggerTest.java +5 −5 Original line number Diff line number Diff line Loading @@ -155,7 +155,7 @@ public class DiskStatsFileLoggerTest extends AndroidTestCase { } @Test public void testDuplicatePackageNameIsMergedAcrossMultipleUsers() throws Exception { public void testDuplicatePackageNameIsNotMergedAcrossMultipleUsers() throws Exception { PackageStats app = new PackageStats("com.test.app"); app.dataSize = 1000; app.externalDataSize = 1000; Loading @@ -175,19 +175,19 @@ public class DiskStatsFileLoggerTest extends AndroidTestCase { logger.dumpToFile(mOutputFile); JSONObject output = getOutputFileAsJson(); assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(2200); assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(22); assertThat(output.getLong(DiskStatsFileLogger.APP_SIZE_AGG_KEY)).isEqualTo(2000); assertThat(output.getLong(DiskStatsFileLogger.APP_CACHE_AGG_KEY)).isEqualTo(20); JSONArray packageNames = output.getJSONArray(DiskStatsFileLogger.PACKAGE_NAMES_KEY); assertThat(packageNames.length()).isEqualTo(1); assertThat(packageNames.getString(0)).isEqualTo("com.test.app"); JSONArray appSizes = output.getJSONArray(DiskStatsFileLogger.APP_SIZES_KEY); assertThat(appSizes.length()).isEqualTo(1); assertThat(appSizes.getLong(0)).isEqualTo(2200); assertThat(appSizes.getLong(0)).isEqualTo(2000); JSONArray cacheSizes = output.getJSONArray(DiskStatsFileLogger.APP_CACHES_KEY); assertThat(cacheSizes.length()).isEqualTo(1); assertThat(cacheSizes.getLong(0)).isEqualTo(22); assertThat(cacheSizes.getLong(0)).isEqualTo(20); } private JSONObject getOutputFileAsJson() throws Exception { Loading