Loading services/core/java/com/android/server/am/CachedAppOptimizer.java +4 −2 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ public final class CachedAppOptimizer { // Defaults for phenotype flags. @VisibleForTesting static final Boolean DEFAULT_USE_COMPACTION = false; @VisibleForTesting static final Boolean DEFAULT_USE_FREEZER = false; @VisibleForTesting static final Boolean DEFAULT_USE_FREEZER = true; @VisibleForTesting static final int DEFAULT_COMPACT_ACTION_1 = COMPACT_ACTION_FILE; @VisibleForTesting static final int DEFAULT_COMPACT_ACTION_2 = COMPACT_ACTION_FULL; @VisibleForTesting static final long DEFAULT_COMPACT_THROTTLE_1 = 5_000; Loading Loading @@ -276,7 +276,7 @@ public final class CachedAppOptimizer { DEFAULT_COMPACT_THROTTLE_MAX_OOM_ADJ; @GuardedBy("mPhenotypeFlagLock") private volatile boolean mUseCompaction = DEFAULT_USE_COMPACTION; private volatile boolean mUseFreezer = DEFAULT_USE_FREEZER; private volatile boolean mUseFreezer = false; // set to DEFAULT in init() @GuardedBy("this") private int mFreezerDisableCount = 1; // Freezer is initially disabled, until enabled private final Random mRandom = new Random(); Loading Loading @@ -678,6 +678,8 @@ public final class CachedAppOptimizer { KEY_USE_FREEZER, DEFAULT_USE_FREEZER)) { mUseFreezer = isFreezerSupported(); updateFreezerDebounceTimeout(); } else { mUseFreezer = false; } final boolean useFreezer = mUseFreezer; Loading services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java +19 −19 Original line number Diff line number Diff line Loading @@ -173,8 +173,6 @@ 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); assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleMinOomAdj).isEqualTo( CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_MIN_OOM_ADJ); assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleMaxOomAdj).isEqualTo( Loading @@ -188,6 +186,10 @@ public final class CachedAppOptimizerTest { } assertThat(mCachedAppOptimizerUnderTest.mProcStateThrottle) .containsExactlyElementsIn(expected); Assume.assumeTrue(mCachedAppOptimizerUnderTest.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); } @Test Loading Loading @@ -244,9 +246,8 @@ public final class CachedAppOptimizerTest { CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_MAX_OOM_ADJ - 10), 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, assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, CachedAppOptimizer.DEFAULT_USE_FREEZER ? "false" : "true", false); Loading Loading @@ -291,7 +292,8 @@ public final class CachedAppOptimizerTest { CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB + 1); assertThat(mCachedAppOptimizerUnderTest.mProcStateThrottle).containsExactly(1, 2, 3); if (mCachedAppOptimizerUnderTest.isFreezerSupported()) { Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); if (CachedAppOptimizer.isFreezerSupported()) { if (CachedAppOptimizer.DEFAULT_USE_FREEZER) { assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); } else { Loading Loading @@ -325,15 +327,15 @@ public final class CachedAppOptimizerTest { @Test public void useFreeze_doesNotListenToDeviceConfigChanges() throws InterruptedException { Assume.assumeTrue(mCachedAppOptimizerUnderTest.isFreezerSupported()); Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); // The freezer DeviceConfig property is read at boot only DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "true", false); mCachedAppOptimizerUnderTest.init(); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isTrue(); mCountDown = new CountDownLatch(1); // No notifications should get to the cached app optimizer. Loading @@ -346,14 +348,13 @@ public final class CachedAppOptimizerTest { // Set the flag the other way without rebooting. It shall not change. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, 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, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "false", false); mCachedAppOptimizerUnderTest.init(); Loading @@ -380,18 +381,17 @@ public final class CachedAppOptimizerTest { @Test public void useFreeze_listensToDeviceConfigChangesBadValues() throws InterruptedException { assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); // When we push an invalid flag value... DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "foobar", false); mCachedAppOptimizerUnderTest.init(); // Then we set the default. assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); // DeviceConfig treats invalid value as false assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); } @Test Loading Loading
services/core/java/com/android/server/am/CachedAppOptimizer.java +4 −2 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ public final class CachedAppOptimizer { // Defaults for phenotype flags. @VisibleForTesting static final Boolean DEFAULT_USE_COMPACTION = false; @VisibleForTesting static final Boolean DEFAULT_USE_FREEZER = false; @VisibleForTesting static final Boolean DEFAULT_USE_FREEZER = true; @VisibleForTesting static final int DEFAULT_COMPACT_ACTION_1 = COMPACT_ACTION_FILE; @VisibleForTesting static final int DEFAULT_COMPACT_ACTION_2 = COMPACT_ACTION_FULL; @VisibleForTesting static final long DEFAULT_COMPACT_THROTTLE_1 = 5_000; Loading Loading @@ -276,7 +276,7 @@ public final class CachedAppOptimizer { DEFAULT_COMPACT_THROTTLE_MAX_OOM_ADJ; @GuardedBy("mPhenotypeFlagLock") private volatile boolean mUseCompaction = DEFAULT_USE_COMPACTION; private volatile boolean mUseFreezer = DEFAULT_USE_FREEZER; private volatile boolean mUseFreezer = false; // set to DEFAULT in init() @GuardedBy("this") private int mFreezerDisableCount = 1; // Freezer is initially disabled, until enabled private final Random mRandom = new Random(); Loading Loading @@ -678,6 +678,8 @@ public final class CachedAppOptimizer { KEY_USE_FREEZER, DEFAULT_USE_FREEZER)) { mUseFreezer = isFreezerSupported(); updateFreezerDebounceTimeout(); } else { mUseFreezer = false; } final boolean useFreezer = mUseFreezer; Loading
services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java +19 −19 Original line number Diff line number Diff line Loading @@ -173,8 +173,6 @@ 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); assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleMinOomAdj).isEqualTo( CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_MIN_OOM_ADJ); assertThat(mCachedAppOptimizerUnderTest.mCompactThrottleMaxOomAdj).isEqualTo( Loading @@ -188,6 +186,10 @@ public final class CachedAppOptimizerTest { } assertThat(mCachedAppOptimizerUnderTest.mProcStateThrottle) .containsExactlyElementsIn(expected); Assume.assumeTrue(mCachedAppOptimizerUnderTest.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); } @Test Loading Loading @@ -244,9 +246,8 @@ public final class CachedAppOptimizerTest { CachedAppOptimizer.DEFAULT_COMPACT_THROTTLE_MAX_OOM_ADJ - 10), 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, assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, CachedAppOptimizer.DEFAULT_USE_FREEZER ? "false" : "true", false); Loading Loading @@ -291,7 +292,8 @@ public final class CachedAppOptimizerTest { CachedAppOptimizer.DEFAULT_COMPACT_FULL_RSS_THROTTLE_KB + 1); assertThat(mCachedAppOptimizerUnderTest.mProcStateThrottle).containsExactly(1, 2, 3); if (mCachedAppOptimizerUnderTest.isFreezerSupported()) { Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); if (CachedAppOptimizer.isFreezerSupported()) { if (CachedAppOptimizer.DEFAULT_USE_FREEZER) { assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); } else { Loading Loading @@ -325,15 +327,15 @@ public final class CachedAppOptimizerTest { @Test public void useFreeze_doesNotListenToDeviceConfigChanges() throws InterruptedException { Assume.assumeTrue(mCachedAppOptimizerUnderTest.isFreezerSupported()); Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); // The freezer DeviceConfig property is read at boot only DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "true", false); mCachedAppOptimizerUnderTest.init(); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isTrue(); mCountDown = new CountDownLatch(1); // No notifications should get to the cached app optimizer. Loading @@ -346,14 +348,13 @@ public final class CachedAppOptimizerTest { // Set the flag the other way without rebooting. It shall not change. mCountDown = new CountDownLatch(1); DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, 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, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "false", false); mCachedAppOptimizerUnderTest.init(); Loading @@ -380,18 +381,17 @@ public final class CachedAppOptimizerTest { @Test public void useFreeze_listensToDeviceConfigChangesBadValues() throws InterruptedException { assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); Assume.assumeTrue(CachedAppOptimizer.isFreezerSupported()); assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); // When we push an invalid flag value... DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER, DeviceConfig.setProperty(DeviceConfig.NAMESPACE_ACTIVITY_MANAGER_NATIVE_BOOT, CachedAppOptimizer.KEY_USE_FREEZER, "foobar", false); mCachedAppOptimizerUnderTest.init(); // Then we set the default. assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isEqualTo( CachedAppOptimizer.DEFAULT_USE_FREEZER); // DeviceConfig treats invalid value as false assertThat(mCachedAppOptimizerUnderTest.useFreezer()).isFalse(); } @Test Loading