diff options
4 files changed, 12 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index dbe80c8aee35..68e5a5df9562 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1641,11 +1641,10 @@ public class OomAdjuster { boolean foregroundActivities = false; boolean hasVisibleActivities = false; - if (app == topApp && (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP - || PROCESS_STATE_CUR_TOP == PROCESS_STATE_IMPORTANT_FOREGROUND)) { + if (app == topApp && PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP) { // The last app on the list is the foreground app. adj = ProcessList.FOREGROUND_APP_ADJ; - if (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP) { + if (mService.mAtmInternal.useTopSchedGroupForTopProcess()) { schedGroup = ProcessList.SCHED_GROUP_TOP_APP; state.setAdjType("top-activity"); } else { diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java index e7b62b0d66d3..4d970f057122 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java @@ -313,6 +313,7 @@ public abstract class ActivityTaskManagerInternal { public abstract void onProcessRemoved(String name, int uid); public abstract void onCleanUpApplicationRecord(WindowProcessController proc); public abstract int getTopProcessState(); + public abstract boolean useTopSchedGroupForTopProcess(); public abstract void clearHeavyWeightProcessIfEquals(WindowProcessController proc); public abstract void finishHeavyWeightApp(); diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 83953022dd72..ca5b221e1e2b 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -5757,17 +5757,19 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { @HotPath(caller = HotPath.OOM_ADJUSTMENT) @Override public int getTopProcessState() { - final int topState = mTopProcessState; - if (mDemoteTopAppReasons != 0 && topState == ActivityManager.PROCESS_STATE_TOP) { - // There may be a more important UI/animation than the top app. - return ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND; - } if (mRetainPowerModeAndTopProcessState) { // There is a launching app while device may be sleeping, force the top state so // the launching process can have top-app scheduling group. return ActivityManager.PROCESS_STATE_TOP; } - return topState; + return mTopProcessState; + } + + @HotPath(caller = HotPath.OOM_ADJUSTMENT) + @Override + public boolean useTopSchedGroupForTopProcess() { + // If it is non-zero, there may be a more important UI/animation than the top app. + return mDemoteTopAppReasons == 0; } @HotPath(caller = HotPath.PROCESS_CHANGE) diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java index a1d6a5006fef..a2b4cb867d6b 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java @@ -114,6 +114,7 @@ public class RecentsAnimationTest extends WindowTestsBase { assertTrue(recentActivity.mVisibleRequested); assertEquals(ActivityTaskManagerService.DEMOTE_TOP_REASON_ANIMATING_RECENTS, mAtm.mDemoteTopAppReasons); + assertFalse(mAtm.mInternal.useTopSchedGroupForTopProcess()); // Simulate the animation is cancelled without changing the stack order. recentsAnimation.onAnimationFinished(REORDER_KEEP_IN_PLACE, false /* sendUserLeaveHint */); |