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

Commit b08c9f38 authored by Daniel Nishi's avatar Daniel Nishi Committed by Android (Google) Code Review
Browse files

Merge "Only count user 0 for diskstats package logging."

parents 8773a8d0 e47eac74
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -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;

@@ -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;
@@ -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;
+5 −5
Original line number Diff line number Diff line
@@ -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;
@@ -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 {