Revert "Revert "Revert "Only promote remote animator to top sched group during animation""" This reverts commit d33c6f81812be897f7cad6d874e9994ce2fe9310. Reason for revert: App launch time regression Change-Id: I6be3503d008f9f0994a57fe6881b594f5000b7e6 Fixes: 158845153 Bug: 157407136 Exempt-From-Owner-Approval: Simple revert
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6ac34a6..caaa837 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1710,12 +1710,6 @@ */ @Nullable ContentCaptureManagerInternal mContentCaptureService; - /** - * Set of {@link ProcessRecord} that have either {@link ProcessRecord#hasTopUi()} or - * {@link ProcessRecord#runningRemoteAnimation} set to {@code true}. - */ - final ArraySet<ProcessRecord> mTopUiOrRunningRemoteAnimApps = new ArraySet<>(); - final class UiHandler extends Handler { public UiHandler() { super(com.android.server.UiThread.get().getLooper(), null, true); @@ -14744,7 +14738,6 @@ mProcessesToGc.remove(app); mPendingPssProcesses.remove(app); - mTopUiOrRunningRemoteAnimApps.remove(app); ProcessList.abortNextPssTime(app.procStateMemTracker); // Dismiss any open dialogs. @@ -18533,22 +18526,6 @@ return proc; } - /** - * @return {@code true} if {@link #mTopUiOrRunningRemoteAnimApps} set contains {@code app} or when there are no apps - * in this list, an false otherwise. - */ - boolean containsTopUiOrRunningRemoteAnimOrEmptyLocked(ProcessRecord app) { - return mTopUiOrRunningRemoteAnimApps.isEmpty() || mTopUiOrRunningRemoteAnimApps.contains(app); - } - - void addTopUiOrRunningRemoteAnim(ProcessRecord app) { - mTopUiOrRunningRemoteAnimApps.add(app); - } - - void removeTopUiOrRunningRemoteAnim(ProcessRecord app) { - mTopUiOrRunningRemoteAnimApps.remove(app); - } - @Override public boolean dumpHeap(String process, int userId, boolean managed, boolean mallocInfo, boolean runGc, String path, ParcelFileDescriptor fd, RemoteCallback finishCallback) {
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index d92144f..14c5b2cb 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java
@@ -1151,17 +1151,8 @@ // is currently showing UI. app.systemNoUi = true; if (app == topApp) { - // If specific system app has set ProcessRecord.mHasTopUi or is running a remote - // animation (ProcessRecord.runningRemoteAnimation), this will prevent topApp - // to use SCHED_GROUP_TOP_APP to ensure process with mHasTopUi will have exclusive - // access to configured cores. - if (mService.containsTopUiOrRunningRemoteAnimOrEmptyLocked(app)) { - app.setCurrentSchedulingGroup(ProcessList.SCHED_GROUP_TOP_APP); - } else { - app.setCurrentSchedulingGroup(ProcessList.SCHED_GROUP_DEFAULT); - } app.systemNoUi = false; - + app.setCurrentSchedulingGroup(ProcessList.SCHED_GROUP_TOP_APP); app.adjType = "pers-top-activity"; } else if (app.hasTopUi()) { // sched group/proc state adjustment is below @@ -1202,20 +1193,10 @@ boolean foregroundActivities = false; if (PROCESS_STATE_CUR_TOP == PROCESS_STATE_TOP && app == topApp) { - - // If specific system app has set ProcessRecord.mHasTopUi or is running a remote - // animation (ProcessRecord.runningRemoteAnimation), this will prevent topApp - // to use SCHED_GROUP_TOP_APP to ensure process with mHasTopUi will have exclusive - // access to configured cores. - if (mService.containsTopUiOrRunningRemoteAnimOrEmptyLocked(app)) { - adj = ProcessList.FOREGROUND_APP_ADJ; - schedGroup = ProcessList.SCHED_GROUP_TOP_APP; - app.adjType = "top-activity"; - } else { - adj = ProcessList.FOREGROUND_APP_ADJ; - schedGroup = ProcessList.SCHED_GROUP_DEFAULT; - app.adjType = "top-activity-behind-topui"; - } + // The last app on the list is the foreground app. + adj = ProcessList.FOREGROUND_APP_ADJ; + schedGroup = ProcessList.SCHED_GROUP_TOP_APP; + app.adjType = "top-activity"; foregroundActivities = true; procState = PROCESS_STATE_CUR_TOP; if (DEBUG_OOM_ADJ_REASON || logUid == appUid) {
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java index 4c75ab2..c5152c0 100644 --- a/services/core/java/com/android/server/am/ProcessRecord.java +++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -1268,7 +1268,6 @@ void setHasTopUi(boolean hasTopUi) { mHasTopUi = hasTopUi; mWindowProcessController.setHasTopUi(hasTopUi); - updateTopUiOrRunningRemoteAnim(); } boolean hasTopUi() { @@ -1519,19 +1518,10 @@ Slog.i(TAG, "Setting runningRemoteAnimation=" + runningRemoteAnimation + " for pid=" + pid); } - updateTopUiOrRunningRemoteAnim(); mService.updateOomAdjLocked(this, true, OomAdjuster.OOM_ADJ_REASON_UI_VISIBILITY); } } - void updateTopUiOrRunningRemoteAnim() { - if (runningRemoteAnimation || hasTopUi()) { - mService.addTopUiOrRunningRemoteAnim(this); - } else { - mService.removeTopUiOrRunningRemoteAnim(this); - } - } - public long getInputDispatchingTimeout() { return mWindowProcessController.getInputDispatchingTimeout(); }
diff --git a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java index cdafd32..fde40aa 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java
@@ -63,7 +63,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.AdditionalAnswers.answer; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.any; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.anyLong; @@ -171,7 +170,6 @@ mock(OomAdjProfiler.class)); doReturn(new ActivityManagerService.ProcessChangeItem()).when(sService) .enqueueProcessChangeItemLocked(anyInt(), anyInt()); - doReturn(true).when(sService).containsTopUiOrRunningRemoteAnimOrEmptyLocked(any()); sService.mOomAdjuster = new OomAdjuster(sService, sService.mProcessList, mock(ActiveUids.class)); sService.mOomAdjuster.mAdjSeq = 10000; @@ -268,21 +266,6 @@ @SuppressWarnings("GuardedBy") @Test - public void testUpdateOomAdj_DoOne_TopApp_PreemptedByTopUi() { - ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, - MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, true)); - doReturn(PROCESS_STATE_TOP).when(sService.mAtmInternal).getTopProcessState(); - doReturn(app).when(sService).getTopAppLocked(); - doReturn(false).when(sService).containsTopUiOrRunningRemoteAnimOrEmptyLocked(eq(app)); - sService.mWakefulness = PowerManagerInternal.WAKEFULNESS_AWAKE; - sService.mOomAdjuster.updateOomAdjLocked(app, false, OomAdjuster.OOM_ADJ_REASON_NONE); - doReturn(null).when(sService).getTopAppLocked(); - - assertProcStates(app, PROCESS_STATE_TOP, FOREGROUND_APP_ADJ, SCHED_GROUP_DEFAULT); - } - - @SuppressWarnings("GuardedBy") - @Test public void testUpdateOomAdj_DoOne_RunningInstrumentation() { ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, true));