diff options
4 files changed, 52 insertions, 18 deletions
diff --git a/packages/SystemUI/aconfig/systemui.aconfig b/packages/SystemUI/aconfig/systemui.aconfig index 994a020974a1..a0dd9228ec04 100644 --- a/packages/SystemUI/aconfig/systemui.aconfig +++ b/packages/SystemUI/aconfig/systemui.aconfig @@ -509,3 +509,13 @@ flag { purpose: PURPOSE_BUGFIX } } + +flag { + name: "trim_resources_with_background_trim_at_lock" + namespace: "systemui" + description: "Trim fonts and other caches when the device locks to lower memory consumption." + bug: "322143614" + metadata { + purpose: PURPOSE_BUGFIX + } +} diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index e914c503b4e8..aae73bc47616 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -474,11 +474,6 @@ object Flags { val WARN_ON_BLOCKING_BINDER_TRANSACTIONS = unreleasedFlag("warn_on_blocking_binder_transactions") - // TODO(b/283071711): Tracking bug - @JvmField - val TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK = - unreleasedFlag("trim_resources_with_background_trim_on_lock") - // TODO:(b/283203305): Tracking bug @JvmField val TRIM_FONT_CACHES_AT_UNLOCK = unreleasedFlag("trim_font_caches_on_unlock") diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt b/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt index c52ca68ee37f..e101b0ab64aa 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/ResourceTrimmer.kt @@ -32,13 +32,13 @@ import com.android.systemui.keyguard.domain.interactor.KeyguardTransitionInterac import com.android.systemui.keyguard.shared.model.TransitionState import com.android.systemui.power.domain.interactor.PowerInteractor import com.android.systemui.utils.GlobalWindowManager +import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch -import javax.inject.Inject /** * Releases cached resources on allocated by keyguard. @@ -62,7 +62,7 @@ constructor( override fun start() { Log.d(LOG_TAG, "Resource trimmer registered.") - if (featureFlags.isEnabled(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)) { + if (com.android.systemui.Flags.trimResourcesWithBackgroundTrimAtLock()) { applicationScope.launch(bgDispatcher) { // We need to wait for the AoD transition (and animation) to complete. // This means we're waiting for isDreaming (== implies isDoze) and dozeAmount == 1f @@ -107,19 +107,16 @@ constructor( @WorkerThread private fun onWakefulnessUpdated( - isAsleep: Boolean, - isDreaming: Boolean, - isDozingFully: Boolean + isAsleep: Boolean, + isDreaming: Boolean, + isDozingFully: Boolean ) { - if (!featureFlags.isEnabled(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)) { + if (!com.android.systemui.Flags.trimResourcesWithBackgroundTrimAtLock()) { return } if (DEBUG) { - Log.d( - LOG_TAG, - "isAsleep: $isAsleep Dreaming: $isDreaming DozeAmount: $isDozingFully" - ) + Log.d(LOG_TAG, "isAsleep: $isAsleep Dreaming: $isDreaming DozeAmount: $isDozingFully") } // There are three scenarios: // * No dozing and no AoD at all - where we go directly to ASLEEP with isDreaming = false @@ -129,8 +126,7 @@ constructor( // * AoD - where we go to ASLEEP with iDreaming = true and dozeAmount slowly increases // to 1f val dozeDisabledAndScreenOff = isAsleep && !isDreaming - val dozeEnabledAndDozeAnimationCompleted = - isAsleep && isDreaming && isDozingFully + val dozeEnabledAndDozeAnimationCompleted = isAsleep && isDreaming && isDozingFully if (dozeDisabledAndScreenOff || dozeEnabledAndDozeAnimationCompleted) { Trace.beginSection("ResourceTrimmer#trimMemory") Log.d(LOG_TAG, "SysUI asleep, trimming memory.") diff --git a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt index cf8fe79f70f0..2b51863117e9 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/keyguard/ResourceTrimmerTest.kt @@ -2,6 +2,9 @@ package com.android.systemui.keyguard import android.content.ComponentCallbacks2 import android.graphics.HardwareRenderer +import android.platform.test.annotations.DisableFlags +import android.platform.test.annotations.EnableFlags +import android.platform.test.flag.junit.SetFlagsRule import android.testing.AndroidTestingRunner import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase @@ -23,6 +26,7 @@ import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runCurrent import kotlinx.coroutines.test.runTest import org.junit.Before +import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock @@ -48,10 +52,11 @@ class ResourceTrimmerTest : SysuiTestCase() { @Mock private lateinit var globalWindowManager: GlobalWindowManager private lateinit var resourceTrimmer: ResourceTrimmer + @Rule @JvmField public val setFlagsRule = SetFlagsRule() + @Before fun setUp() { MockitoAnnotations.initMocks(this) - featureFlags.set(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK, true) featureFlags.set(Flags.TRIM_FONT_CACHES_AT_UNLOCK, true) keyguardRepository.setDozeAmount(0f) keyguardRepository.setKeyguardGoingAway(false) @@ -76,6 +81,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun noChange_noOutputChanges() = testScope.runTest { testScope.runCurrent() @@ -83,6 +89,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun dozeAodDisabled_sleep_trimsMemory() = testScope.runTest { powerInteractor.setAsleepForTest() @@ -93,6 +100,27 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @DisableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) + fun dozeAodDisabled_flagDisabled_sleep_doesntTrimMemory() = + testScope.runTest { + powerInteractor.setAsleepForTest() + testScope.runCurrent() + verifyZeroInteractions(globalWindowManager) + } + + @Test + @DisableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) + fun dozeEnabled_flagDisabled_sleepWithFullDozeAmount_doesntTrimMemory() = + testScope.runTest { + keyguardRepository.setDreaming(true) + keyguardRepository.setDozeAmount(1f) + powerInteractor.setAsleepForTest() + testScope.runCurrent() + verifyZeroInteractions(globalWindowManager) + } + + @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun dozeEnabled_sleepWithFullDozeAmount_trimsMemory() = testScope.runTest { keyguardRepository.setDreaming(true) @@ -105,6 +133,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun dozeEnabled_sleepWithoutFullDozeAmount_doesntTrimMemory() = testScope.runTest { keyguardRepository.setDreaming(true) @@ -115,6 +144,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun aodEnabled_sleepWithFullDozeAmount_trimsMemoryOnce() { testScope.runTest { keyguardRepository.setDreaming(true) @@ -141,6 +171,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun aodEnabled_deviceWakesHalfWayThrough_doesNotTrimMemory() { testScope.runTest { keyguardRepository.setDreaming(true) @@ -172,6 +203,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun keyguardTransitionsToGone_trimsFontCache() = testScope.runTest { keyguardTransitionRepository.sendTransitionSteps( @@ -186,6 +218,7 @@ class ResourceTrimmerTest : SysuiTestCase() { } @Test + @EnableFlags(com.android.systemui.Flags.FLAG_TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK) fun keyguardTransitionsToGone_flagDisabled_doesNotTrimFontCache() = testScope.runTest { featureFlags.set(Flags.TRIM_FONT_CACHES_AT_UNLOCK, false) |