From 078f090dedc2244f2c3bef73df6b75fceb3cef7c Mon Sep 17 00:00:00 2001 From: Li Li Date: Wed, 4 Aug 2021 17:21:13 -0700 Subject: Enable Freezer by default The freezer init code will check if the Linux kernel is new enough to support cgroupfs v2. If it does, freezer will be enabled by default. Otherwise, freezer will be disabled. Some tests were not correctly designed. The logic was wrong. This CL also fixes those broken tests. Meanwhile, CachedAppOptimizerTest should ignore freezer related tests if freezer is not supported. Furthermore, the mockingservicestests isn't running within system_server. So the current test always reports freezer is not supported. This should be fixed separately. Bug: 195589090 Bug: 195690032 Test: adb shell dumpsys activity settings | grep use_freezer=true Test: atest CachedAppOptimizerTest Change-Id: If994e452c9771b94130aa8b91240dcf924435710 --- .../com/android/server/am/CachedAppOptimizer.java | 6 ++-- .../android/server/am/CachedAppOptimizerTest.java | 38 +++++++++++----------- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/services/core/java/com/android/server/am/CachedAppOptimizer.java b/services/core/java/com/android/server/am/CachedAppOptimizer.java index 7c336d768006..f32aa2295cb8 100644 --- a/services/core/java/com/android/server/am/CachedAppOptimizer.java +++ b/services/core/java/com/android/server/am/CachedAppOptimizer.java @@ -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; @@ -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(); @@ -678,6 +678,8 @@ public final class CachedAppOptimizer { KEY_USE_FREEZER, DEFAULT_USE_FREEZER)) { mUseFreezer = isFreezerSupported(); updateFreezerDebounceTimeout(); + } else { + mUseFreezer = false; } final boolean useFreezer = mUseFreezer; diff --git a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java index 20a58426f1eb..a883293b13b9 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/CachedAppOptimizerTest.java @@ -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( @@ -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 @@ -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); @@ -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 { @@ -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. @@ -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(); @@ -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 -- cgit v1.2.3-59-g8ed1b