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));