From fd9a8414d30acc9ff62256e18bcbc0df3df0bce7 Mon Sep 17 00:00:00 2001 From: Zim Date: Mon, 10 Jul 2023 11:20:45 +0100 Subject: [PATCH] Fix start application proc state when screen off When an app is being started to become a top-app, we granted it an elevated proc state and sched group so that the UI is snappy. This behavior should however only apply during screen on. Fixed the special case. Test: android.net.wifi.cts.WifiLocationInfoTest Bug: 253908737 Fixes: 290391152 Change-Id: Iee63d747ec77f58e80c78cebe8298a5efed29aa7 --- .../java/com/android/server/am/OomAdjuster.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index e51fc0a2cef79..a682c85f03b20 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1713,6 +1713,11 @@ public class OomAdjuster { } } + private boolean isScreenOnOrAnimatingLocked(ProcessStateRecord state) { + return mService.mWakefulness.get() == PowerManagerInternal.WAKEFULNESS_AWAKE + || state.isRunningRemoteAnimation(); + } + @GuardedBy({"mService", "mProcLock"}) private boolean computeOomAdjLSP(ProcessRecord app, int cachedAdj, ProcessRecord topApp, boolean doingAll, long now, boolean cycleReEval, @@ -1794,8 +1799,7 @@ public class OomAdjuster { state.setSystemNoUi(false); } if (!state.isSystemNoUi()) { - if (mService.mWakefulness.get() == PowerManagerInternal.WAKEFULNESS_AWAKE - || state.isRunningRemoteAnimation()) { + if (isScreenOnOrAnimatingLocked(state)) { // screen on or animating, promote UI state.setCurProcState(ActivityManager.PROCESS_STATE_PERSISTENT_UI); state.setCurrentSchedulingGroup(SCHED_GROUP_TOP_APP); @@ -3281,8 +3285,10 @@ public class OomAdjuster { } else { setThreadPriority(app.getPid(), THREAD_PRIORITY_TOP_APP_BOOST); } - initialSchedGroup = SCHED_GROUP_TOP_APP; - initialProcState = PROCESS_STATE_TOP; + if (isScreenOnOrAnimatingLocked(state)) { + initialSchedGroup = SCHED_GROUP_TOP_APP; + initialProcState = PROCESS_STATE_TOP; + } initialCapability = PROCESS_CAPABILITY_ALL; initialCached = false; } catch (Exception e) {