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

Commit b22b85b5 authored by Daniel Nishi's avatar Daniel Nishi
Browse files

Count cache in storage categories.

This makes the System size more consistent because cache is not
attributed to the system (when the cache is under quota).

Change-Id: I680e70daf5e98b9a205023a218dfd1dcc8ee8334
Fixes: 62623731
Test: Settings Unit Test
parent 11383973
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -105,7 +105,17 @@ public class StorageAsyncLoader
                continue;
            }

            long blamedSize = stats.getDataBytes() - stats.getCacheBytes();
            final long dataSize = stats.getDataBytes();
            final long cacheQuota = mStatsManager.getCacheQuotaBytes(mUuid, app.uid);
            final long cacheBytes = stats.getCacheBytes();
            long blamedSize = dataSize;
            // Technically, we could overages as freeable on the storage settings screen.
            // If the app is using more cache than its quota, we would accidentally subtract the
            // overage from the system size (because it shows up as unused) during our attribution.
            // Thus, we cap the attribution at the quota size.
            if (cacheQuota < cacheBytes) {
                blamedSize = blamedSize - cacheBytes + cacheQuota;
            }

            // This isn't quite right because it slams the first user by user id with the whole code
            // size, but this ensures that we count all apps seen once.
+18 −4
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
import android.net.TrafficStats;
import android.os.UserHandle;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -55,6 +56,7 @@ public class StorageAsyncLoaderTest {
    private static final int SECONDARY_USER_ID = 10;
    private static final String PACKAGE_NAME_1 = "com.blah.test";
    private static final String PACKAGE_NAME_2 = "com.blah.test2";
    private static final long DEFAULT_QUOTA = 64 * TrafficStats.MB_IN_BYTES;

    @Mock
    private StorageStatsSource mSource;
@@ -81,6 +83,7 @@ public class StorageAsyncLoaderTest {
        mUsers = new ArrayList<>();
        mUsers.add(info);
        when(mUserManager.getUsers()).thenReturn(mUsers);
        when(mSource.getCacheQuotaBytes(anyString(), anyInt())).thenReturn(DEFAULT_QUOTA);
    }

    @Test
@@ -120,13 +123,13 @@ public class StorageAsyncLoaderTest {
    }

    @Test
    public void testCacheIsIgnored() throws Exception {
    public void testCacheIsNotIgnored() throws Exception {
        addPackage(PACKAGE_NAME_1, 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);

        SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();

        assertThat(result.size()).isEqualTo(1);
        assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(11L);
        assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(111L);
    }

    @Test
@@ -155,7 +158,7 @@ public class StorageAsyncLoaderTest {
        SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();

        assertThat(result.size()).isEqualTo(1);
        assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(11L);
        assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(111L);
    }

    @Test
@@ -207,12 +210,23 @@ public class StorageAsyncLoaderTest {
        assertThat(result.get(SECONDARY_USER_ID).videoAppsSize).isEqualTo(10L);
    }

    @Test
    public void testCacheOveragesAreCountedAsFree() throws Exception {
        addPackage(PACKAGE_NAME_1, DEFAULT_QUOTA + 100, 1, 10, ApplicationInfo.CATEGORY_UNDEFINED);

        SparseArray<StorageAsyncLoader.AppsStorageResult> result = mLoader.loadInBackground();

        assertThat(result.size()).isEqualTo(1);
        assertThat(result.get(PRIMARY_USER_ID).otherAppsSize).isEqualTo(DEFAULT_QUOTA + 11);
    }

    private ApplicationInfo addPackage(String packageName, long cacheSize, long codeSize,
            long dataSize, int category) throws Exception {
        StorageStatsSource.AppStorageStats storageStats =
                mock(StorageStatsSource.AppStorageStats.class);
        when(storageStats.getCodeBytes()).thenReturn(codeSize);
        when(storageStats.getDataBytes()).thenReturn(dataSize);
        when(storageStats.getDataBytes()).thenReturn(dataSize + cacheSize);
        when(storageStats.getCacheBytes()).thenReturn(cacheSize);
        when(mSource.getStatsForPackage(anyString(), eq(packageName), any(UserHandle.class)))
                .thenReturn(storageStats);