Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0c273d7c authored by Jing Ji's avatar Jing Ji Committed by Automerger Merge Worker
Browse files

Merge "Use the UNKNOWN_ADJ as the cached adj in cycle recomputation" into...

Merge "Use the UNKNOWN_ADJ as the cached adj in cycle recomputation" into udc-dev am: d5b8a608 am: 69922e2b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23716012



Change-Id: I1f36bdf6ed8f84b357c6b9b87e9b5a20f968a155
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 0b57fd12 69922e2b
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -1009,7 +1009,6 @@ public class OomAdjuster {
            mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(),
            mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(),
                    mProcessList.getLruProcessServiceStartLOSP());
                    mProcessList.getLruProcessServiceStartLOSP());
        }
        }
        assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());


        if (computeClients) { // There won't be cycles if we didn't compute clients above.
        if (computeClients) { // There won't be cycles if we didn't compute clients above.
            // Cycle strategy:
            // Cycle strategy:
@@ -1034,7 +1033,7 @@ public class OomAdjuster {
                    ProcessRecord app = activeProcesses.get(i);
                    ProcessRecord app = activeProcesses.get(i);
                    final ProcessStateRecord state = app.mState;
                    final ProcessStateRecord state = app.mState;
                    if (!app.isKilledByAm() && app.getThread() != null && state.containsCycle()) {
                    if (!app.isKilledByAm() && app.getThread() != null && state.containsCycle()) {
                        if (computeOomAdjLSP(app, state.getCurRawAdj(), topApp, true, now,
                        if (computeOomAdjLSP(app, UNKNOWN_ADJ, topApp, true, now,
                                true, true)) {
                                true, true)) {
                            retryCycles = true;
                            retryCycles = true;
                        }
                        }
@@ -1044,6 +1043,8 @@ public class OomAdjuster {
        }
        }
        mProcessesInCycle.clear();
        mProcessesInCycle.clear();


        assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());

        mNumNonCachedProcs = 0;
        mNumNonCachedProcs = 0;
        mNumCachedHiddenProcs = 0;
        mNumCachedHiddenProcs = 0;


+29 −0
Original line number Original line Diff line number Diff line
@@ -2512,6 +2512,35 @@ public class MockingOomAdjusterTests {
        assertEquals(FOREGROUND_APP_ADJ, app.mState.getSetAdj());
        assertEquals(FOREGROUND_APP_ADJ, app.mState.getSetAdj());
    }
    }


    @SuppressWarnings("GuardedBy")
    @Test
    public void testUpdateOomAdj_DoAll_Side_Cycle() {
        final ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID,
                MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
        final ProcessRecord app2 = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
        final ProcessRecord app3 = spy(makeDefaultProcessRecord(MOCKAPP3_PID, MOCKAPP3_UID,
                MOCKAPP3_PROCESSNAME, MOCKAPP3_PACKAGENAME, false));
        long now = SystemClock.uptimeMillis();
        ServiceRecord s = bindService(app, app2, null, 0, mock(IBinder.class));
        s.startRequested = true;
        s.lastActivity = now;
        s = bindService(app2, app3, null, 0, mock(IBinder.class));
        s.lastActivity = now;
        s = bindService(app3, app2, null, 0, mock(IBinder.class));
        s.lastActivity = now;

        sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
        sService.mOomAdjuster.mNumServiceProcs = 3;
        updateOomAdj(app, app2, app3);

        assertEquals(SERVICE_ADJ, app.mState.getSetAdj());
        assertTrue(sFirstCachedAdj <= app2.mState.getSetAdj());
        assertTrue(sFirstCachedAdj <= app3.mState.getSetAdj());
        assertTrue(CACHED_APP_MAX_ADJ >= app2.mState.getSetAdj());
        assertTrue(CACHED_APP_MAX_ADJ >= app3.mState.getSetAdj());
    }

    private ProcessRecord makeDefaultProcessRecord(int pid, int uid, String processName,
    private ProcessRecord makeDefaultProcessRecord(int pid, int uid, String processName,
            String packageName, boolean hasShownUi) {
            String packageName, boolean hasShownUi) {
        long now = SystemClock.uptimeMillis();
        long now = SystemClock.uptimeMillis();