summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/am/OomAdjuster.java5
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerInternal.java1
-rw-r--r--services/core/java/com/android/server/wm/ActivityTaskManagerService.java14
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/RecentsAnimationTest.java1
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 */);