Disable trimMemory(BACKGROUND) on lock with a Flag
Issuing this trim level causes a massive leak on DMA heap where surfaces get allocated on each unlock. We need to fix underlying issue there before we can reenable the flag. Bug:282816553 Bug:275486055 Test: atest ResourceTrimmerTest Change-Id: I6eaa5f0aa1f56e2ff5c6345bef7d78b5a648a571
This commit is contained in:
@@ -665,6 +665,11 @@ object Flags {
|
||||
val WARN_ON_BLOCKING_BINDER_TRANSACTIONS =
|
||||
unreleasedFlag(2400, "warn_on_blocking_binder_transactions")
|
||||
|
||||
// TODO(b/283071711): Tracking bug
|
||||
@JvmField
|
||||
val TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK =
|
||||
unreleasedFlag(2401, "trim_resources_with_background_trim_on_lock")
|
||||
|
||||
// 2700 - unfold transitions
|
||||
// TODO(b/265764985): Tracking Bug
|
||||
@Keep
|
||||
|
||||
@@ -24,6 +24,8 @@ import com.android.systemui.CoreStartable
|
||||
import com.android.systemui.dagger.SysUISingleton
|
||||
import com.android.systemui.dagger.qualifiers.Application
|
||||
import com.android.systemui.dagger.qualifiers.Background
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.domain.interactor.KeyguardInteractor
|
||||
import com.android.systemui.keyguard.shared.model.WakefulnessState
|
||||
import com.android.systemui.utils.GlobalWindowManager
|
||||
@@ -51,10 +53,15 @@ constructor(
|
||||
private val globalWindowManager: GlobalWindowManager,
|
||||
@Application private val applicationScope: CoroutineScope,
|
||||
@Background private val bgDispatcher: CoroutineDispatcher,
|
||||
private val featureFlags: FeatureFlags,
|
||||
) : CoreStartable, WakefulnessLifecycle.Observer {
|
||||
|
||||
override fun start() {
|
||||
Log.d(LOG_TAG, "Resource trimmer registered.")
|
||||
if (!featureFlags.isEnabled(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)) {
|
||||
return
|
||||
}
|
||||
|
||||
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
|
||||
@@ -79,6 +86,10 @@ constructor(
|
||||
isDreaming: Boolean,
|
||||
isDozingFully: Boolean
|
||||
) {
|
||||
if (!featureFlags.isEnabled(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (DEBUG) {
|
||||
Log.d(
|
||||
LOG_TAG,
|
||||
|
||||
@@ -4,7 +4,8 @@ import android.content.ComponentCallbacks2
|
||||
import android.testing.AndroidTestingRunner
|
||||
import androidx.test.filters.SmallTest
|
||||
import com.android.systemui.SysuiTestCase
|
||||
import com.android.systemui.flags.FeatureFlags
|
||||
import com.android.systemui.flags.FakeFeatureFlags
|
||||
import com.android.systemui.flags.Flags
|
||||
import com.android.systemui.keyguard.data.repository.FakeCommandQueue
|
||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardBouncerRepository
|
||||
import com.android.systemui.keyguard.data.repository.FakeKeyguardRepository
|
||||
@@ -35,14 +36,16 @@ class ResourceTrimmerTest : SysuiTestCase() {
|
||||
private val testDispatcher = UnconfinedTestDispatcher()
|
||||
private val testScope = TestScope(testDispatcher)
|
||||
private val keyguardRepository = FakeKeyguardRepository()
|
||||
private val featureFlags = FakeFeatureFlags()
|
||||
|
||||
@Mock private lateinit var globalWindowManager: GlobalWindowManager
|
||||
@Mock private lateinit var featureFlags: FeatureFlags
|
||||
private lateinit var resourceTrimmer: ResourceTrimmer
|
||||
|
||||
@Before
|
||||
fun setUp() {
|
||||
MockitoAnnotations.initMocks(this)
|
||||
featureFlags.set(Flags.TRIM_RESOURCES_WITH_BACKGROUND_TRIM_AT_LOCK, true)
|
||||
featureFlags.set(Flags.FACE_AUTH_REFACTOR, false)
|
||||
keyguardRepository.setWakefulnessModel(
|
||||
WakefulnessModel(WakefulnessState.AWAKE, WakeSleepReason.OTHER, WakeSleepReason.OTHER)
|
||||
)
|
||||
@@ -60,7 +63,8 @@ class ResourceTrimmerTest : SysuiTestCase() {
|
||||
interactor,
|
||||
globalWindowManager,
|
||||
testScope.backgroundScope,
|
||||
testDispatcher
|
||||
testDispatcher,
|
||||
featureFlags
|
||||
)
|
||||
resourceTrimmer.start()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user