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

Commit f5e15fe1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "App freezer tests"

parents 0935fa18 f3139ced
Loading
Loading
Loading
Loading
+117 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.server.appop.AppOpsService;
import com.android.server.testables.TestableDeviceConfig;

import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -122,6 +123,8 @@ public final class CachedAppOptimizerTest {
                CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_4);
        assertThat(mCachedAppOptimizerUnderTest.mCompactStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE);
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE);
        assertThat(mCachedAppOptimizerUnderTest.mFullAnonRssThrottleKb).isEqualTo(
                CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB);
        assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleBFGS).isEqualTo(
@@ -132,6 +135,8 @@ public final class CachedAppOptimizerTest {
                CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB);
        assertThat(mCachedAppOptimizerUnderTest.mFullDeltaRssThrottleKb).isEqualTo(
                CachedAppOptimizer.DEFAULT_COMPACT_FULL_DELTA_RSS_THROTTLE_KB);
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo(
                CachedAppOptimizer.DEFAULT_USE_FREEZER);

        Set<Integer> expected = new HashSet<>();
        for (String s : TextUtils.split(
@@ -176,6 +181,9 @@ public final class CachedAppOptimizerTest {
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_COMPACT_STATSD_SAMPLE_RATE,
                Float.toString(CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_FREEZER_STATSD_SAMPLE_RATE,
                Float.toString(CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_COMPACT_FULL_RSS_THROTTLE_KB,
                Long.toString(CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB + 1), false);
@@ -185,6 +193,11 @@ public final class CachedAppOptimizerTest {
                        CachedAppOptimizer.DEFAULT_COMPACT_FULL_DELTA_RSS_THROTTLE_KB + 1), false);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_COMPACT_PROC_STATE_THROTTLE, "1,2,3", false);
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo(
                CachedAppOptimizer.DEFAULT_USE_FREEZER);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_USE_FREEZER, CachedAppOptimizer.DEFAULT_USE_FREEZER
                ?  "false" : "true" , false);

        // Then calling init will read and set that flag.
        mCachedAppOptimizerUnderTest.init();
@@ -211,6 +224,8 @@ public final class CachedAppOptimizerTest {
                CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_6 + 1);
        assertThat(mCachedAppOptimizerUnderTest.mCompactStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f);
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f);
        assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleBFGS).isEqualTo(
                CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_5 + 1);
        assertThat(mCachedAppOptimizerUnderTest.mCompactThrottlePersistent).isEqualTo(
@@ -218,6 +233,14 @@ public final class CachedAppOptimizerTest {
        assertThat(mCachedAppOptimizerUnderTest.mFullAnonRssThrottleKb).isEqualTo(
                CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB + 1);
        assertThat(mCachedAppOptimizerUnderTest.mProcStateThrottle).containsExactly(1, 2, 3);

        if (mCachedAppOptimizerUnderTest.isFreezerSupported()) {
            if (CachedAppOptimizer.DEFAULT_USE_FREEZER) {
                assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse();
            } else {
                assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isTrue();
            }
        }
    }

    @Test
@@ -243,6 +266,44 @@ public final class CachedAppOptimizerTest {
        assertThat(mCachedAppOptimizerUnderTest.useCompaction()).isFalse();
    }

    @Test
    public void useFreeze_doesNotListenToDeviceConfigChanges() throws InterruptedException {
        Assume.assumeTrue(mCachedAppOptimizerUnderTest.isFreezerSupported());

        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo(
                CachedAppOptimizer.DEFAULT_USE_FREEZER);

        // The freezer DeviceConfig property is read at boot only
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_USE_FREEZER, "true", false);
        mCachedAppOptimizerUnderTest.init();
        mCountDown = new CountDownLatch(1);

        // No notifications should get to the cached app optimizer.
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isFalse();

        // The flag value has to be set correctly.
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isTrue();
        // The cached app optimizer thread must be running.
        assertThat(mCachedAppOptimizerUnderTest.mCachedAppOptimizerThread.isAlive()).isTrue();

        // Set the flag the other way without rebooting. It shall not change.
        mCountDown = new CountDownLatch(1);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_USE_FREEZER, "false", false);
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isTrue();


        // Now, set the flag to false and restart the cached app optimizer
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_USE_FREEZER, "false", false);
        mCachedAppOptimizerUnderTest.init();

        // The flag value has to be set correctly.
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse();
    }

    @Test
    public void useCompaction_listensToDeviceConfigChangesBadValues() throws InterruptedException {
        assertThat(mCachedAppOptimizerUnderTest.useCompaction()).isEqualTo(
@@ -260,6 +321,22 @@ public final class CachedAppOptimizerTest {
                CachedAppOptimizer.DEFAULT_USE_COMPACTION);
    }

    @Test
    public void useFreeze_listensToDeviceConfigChangesBadValues() throws InterruptedException {
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo(
                CachedAppOptimizer.DEFAULT_USE_FREEZER);

        // When we push an invalid flag value...
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_USE_FREEZER, "foobar", false);

        mCachedAppOptimizerUnderTest.init();

        // Then we set the default.
        assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo(
                CachedAppOptimizer.DEFAULT_USE_FREEZER);
    }

    @Test
    public void compactAction_listensToDeviceConfigChanges() throws InterruptedException {
        mCachedAppOptimizerUnderTest.init();
@@ -482,6 +559,17 @@ public final class CachedAppOptimizerTest {
        // Then that override is reflected in the compactor.
        assertThat(mCachedAppOptimizerUnderTest.mCompactStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f);

        // When we override mFreezerStatsdSampleRate with a reasonable value ...
        mCountDown = new CountDownLatch(1);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_FREEZER_STATSD_SAMPLE_RATE,
                Float.toString(CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f), false);
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();

        // Then that override is reflected in the compactor.
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE + 0.1f);
    }

    @Test
@@ -498,6 +586,16 @@ public final class CachedAppOptimizerTest {
        // Then that override is reflected in the compactor.
        assertThat(mCachedAppOptimizerUnderTest.mCompactStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE);

        // When we override mFreezerStatsdSampleRate with an unreasonable value ...
        mCountDown = new CountDownLatch(1);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_FREEZER_STATSD_SAMPLE_RATE, "foo", false);
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();

        // Then that override is reflected in the freezer.
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(
                CachedAppOptimizer.DEFAULT_STATSD_SAMPLE_RATE);
    }

    @Test
@@ -523,6 +621,25 @@ public final class CachedAppOptimizerTest {

        // Then the values is capped in the range.
        assertThat(mCachedAppOptimizerUnderTest.mCompactStatsdSampleRate).isEqualTo(1.0f);

        // When we override mFreezerStatsdSampleRate with an value outside of [0..1]...
        mCountDown = new CountDownLatch(1);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_FREEZER_STATSD_SAMPLE_RATE,
                Float.toString(-1.0f), false);
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();

        // Then the values is capped in the range.
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(0.0f);

        mCountDown = new CountDownLatch(1);
        DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER,
                CachedAppOptimizer.KEY_FREEZER_STATSD_SAMPLE_RATE,
                Float.toString(1.01f), false);
        assertThat(mCountDown.await(5, TimeUnit.SECONDS)).isTrue();

        // Then the values is capped in the range.
        assertThat(mCachedAppOptimizerUnderTest.mFreezerStatsdSampleRate).isEqualTo(1.0f);
    }

    @Test