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

Commit 44faab4a authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clean up code path for cached app tiers" into main

parents c7216d9b 7c557ed4
Loading
Loading
Loading
Loading
+126 −164
Original line number Diff line number Diff line
@@ -953,43 +953,7 @@ public abstract class OomAdjuster {
        final int numLru = lruList.size();
        int nextVisibleAppAdj = VISIBLE_APP_ADJ;
        int nextPreviousAppAdj = PREVIOUS_APP_ADJ;
        if (mConstants.USE_TIERED_CACHED_ADJ) {
            final long now = mInjector.getUptimeMillis();
            int uiTargetAdj = 10;
            // mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE is 10 by default, but is configurable.
            final int uiTierMaxAdj = 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE;
            for (int i = numLru - 1; i >= 0; i--) {
                ProcessRecord app = lruList.get(i);
                final ProcessRecordInternal state = app;
                final int curAdj = state.getCurAdj();
                if (VISIBLE_APP_ADJ <= curAdj && curAdj <= VISIBLE_APP_MAX_ADJ) {
                    state.setCurAdj(nextVisibleAppAdj);
                    nextVisibleAppAdj = Math.min(nextVisibleAppAdj + 1, VISIBLE_APP_MAX_ADJ);
                } else if (PREVIOUS_APP_ADJ <= curAdj && curAdj <= PREVIOUS_APP_MAX_ADJ) {
                    state.setCurAdj(nextPreviousAppAdj);
                    nextPreviousAppAdj = Math.min(nextPreviousAppAdj + 1, PREVIOUS_APP_MAX_ADJ);
                } else if (!app.isKilledByAm() && app.isProcessRunning() && (curAdj >= UNKNOWN_ADJ
                            || (state.getHasShownUi() && curAdj >= CACHED_APP_MIN_ADJ))) {
                    final ProcessServiceRecord psr = app.mServices;
                    int targetAdj = CACHED_APP_MIN_ADJ;

                    if (state.getHasShownUi() && uiTargetAdj < uiTierMaxAdj) {
                        // The most recent UI-showing apps get [910, 910 + ui tier size).
                        targetAdj += uiTargetAdj++;
                    } else if ((state.getSetAdj() >= CACHED_APP_MIN_ADJ)
                            && (state.getLastStateTime()
                                    + mConstants.TIERED_CACHED_ADJ_DECAY_TIME) < now) {
                        // Older cached apps get 940 + ui tier size (950 by default).
                        targetAdj += 40 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE;
                    } else {
                        // Newer cached apps get 910 + ui tier size (920 by default).
                        targetAdj += 10 + mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE;
                    }
                    state.setCurRawAdj(targetAdj);
                    state.setCurAdj(applyBindAboveClientToAdj(psr.isHasAboveClient(), targetAdj));
                }
            }
        } else {

        // First update the OOM adjustment for each of the
        // application processes based on their current state.
        int curCachedAdj = CACHED_APP_MIN_ADJ;
@@ -1029,7 +993,6 @@ public abstract class OomAdjuster {
        int lastCachedGroupImportance = 0;
        int lastCachedGroupUid = 0;


        for (int i = numLru - 1; i >= 0; i--) {
            ProcessRecord app = lruList.get(i);
            final ProcessRecordInternal state = app;
@@ -1129,7 +1092,6 @@ public abstract class OomAdjuster {
            }
        }
    }
    }
    private long mNextNoKillDebugMessageTime;

    private double mLastFreeSwapPercent = 1.00;
+21 −54
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ public class MockingOomAdjusterTests {

    private static int sFirstCachedAdj = ProcessList.CACHED_APP_MIN_ADJ
            + ProcessList.CACHED_APP_IMPORTANCE_LEVELS;
    private static int sFirstUiCachedAdj = ProcessList.CACHED_APP_MIN_ADJ + 10;

    private Context mContext;
    private ProcessStateController mProcessStateController;
@@ -212,9 +211,6 @@ public class MockingOomAdjusterTests {
    private HandlerThread mActivityStateHandlerThread;
    private Handler mActivityStateHandler;

    private int mUiTierSize;
    private int mFirstNonUiCachedAdj;

    @Rule
    public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();

@@ -316,9 +312,6 @@ public class MockingOomAdjusterTests {
        mService.mActivityTaskManager.initialize(null, null, mProcessStateController,
                mActivityStateHandlerThread.getLooper());
        mService.mAtmInternal = spy(mService.mActivityTaskManager.getAtmInternal());

        mUiTierSize = mService.mConstants.TIERED_CACHED_ADJ_UI_TIER_SIZE;
        mFirstNonUiCachedAdj = sFirstUiCachedAdj + mUiTierSize;
    }

    @SuppressWarnings("GuardedBy")
@@ -653,8 +646,7 @@ public class MockingOomAdjusterTests {
        setWakefulness(PowerManagerInternal.WAKEFULNESS_AWAKE);
        updateOomAdj(app);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? sFirstUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj,
                SCHED_GROUP_BACKGROUND);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
@@ -1273,8 +1265,7 @@ public class MockingOomAdjusterTests {
            mInjector.jumpUptimeAheadTo(followUpTimeCaptor.getValue());
            mProcessStateController.runFollowUpUpdate();

            final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                    ? sFirstUiCachedAdj : sFirstCachedAdj;
            final int expectedAdj = sFirstCachedAdj;
            assertEquals(expectedAdj, app.getSetAdj());
            assertThatProcess(app).notHasImplicitCpuTimeCapability();
            // Follow up should not have been called again.
@@ -1423,8 +1414,7 @@ public class MockingOomAdjusterTests {
        mInjector.jumpUptimeAheadTo(followUpTimeCaptor.getValue());
        mProcessStateController.runFollowUpUpdate();

        int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? sFirstUiCachedAdj : CACHED_APP_MIN_ADJ;
        int expectedAdj = CACHED_APP_MIN_ADJ;
        assertProcStates(app, PROCESS_STATE_LAST_ACTIVITY, expectedAdj,
                SCHED_GROUP_BACKGROUND, "previous-expired");
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
@@ -1504,16 +1494,10 @@ public class MockingOomAdjusterTests {

        for (int i = 0; i < numberOfApps - 1; i++) {
            final int mruIndex = numberOfApps - i - 1;
            int expectedAdj;
            if (mService.mConstants.USE_TIERED_CACHED_ADJ) {
                expectedAdj = (i < numberOfApps - mUiTierSize)
                        ? mFirstNonUiCachedAdj : sFirstUiCachedAdj + mruIndex;
            } else {
                expectedAdj = CACHED_APP_MIN_ADJ + (mruIndex * 2 * CACHED_APP_IMPORTANCE_LEVELS);
            int expectedAdj = CACHED_APP_MIN_ADJ + (mruIndex * 2 * CACHED_APP_IMPORTANCE_LEVELS);
            if (expectedAdj > CACHED_APP_MAX_ADJ) {
                expectedAdj = CACHED_APP_MAX_ADJ;
            }
            }
            assertProcStates(apps[i], PROCESS_STATE_LAST_ACTIVITY, expectedAdj,
                    SCHED_GROUP_BACKGROUND, "service");
            assertThatProcess(apps[i]).notHasImplicitCpuTimeCapability();
@@ -1597,8 +1581,7 @@ public class MockingOomAdjusterTests {
        } else {
            updateOomAdj(app);
        }
        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? sFirstUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj,
                SCHED_GROUP_BACKGROUND);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
@@ -1711,8 +1694,7 @@ public class MockingOomAdjusterTests {
        updateOomAdj(client, app);
        setTopProcess(null);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? sFirstUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_SERVICE, expectedAdj, SCHED_GROUP_BACKGROUND);
        // This WPRIO service oom score is in the FREEZER_CUTOFF_ADJ range, but the client is not
        // frozen, so neither should the service.
@@ -1767,8 +1749,7 @@ public class MockingOomAdjusterTests {
        setWakefulness(PowerManagerInternal.WAKEFULNESS_AWAKE);
        updateOomAdj(app);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
    }
@@ -2232,8 +2213,7 @@ public class MockingOomAdjusterTests {
        bindProvider(app, cpr);
        updateOomAdj(app);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
    }
@@ -2251,8 +2231,7 @@ public class MockingOomAdjusterTests {
        setWakefulness(PowerManagerInternal.WAKEFULNESS_AWAKE);
        updateOomAdj(app, client);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
    }
@@ -2396,8 +2375,7 @@ public class MockingOomAdjusterTests {
        setProcessesToLru(client, app);
        mProcessStateController.runFollowUpUpdate();

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND,
                "cch-empty");
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
@@ -3602,8 +3580,6 @@ public class MockingOomAdjusterTests {
        final int userOwner = 0;
        final int userOther = 1;

        // cachedAdj1 and cachedAdj2 will be read if USE_TIERED_CACHED_ADJ is disabled. Otherwise,
        // sFirstUiCachedAdj and mFirstNonUiCachedAdj are used instead.
        final int cachedAdj1 = CACHED_APP_MIN_ADJ + CACHED_APP_IMPORTANCE_LEVELS;
        final int cachedAdj2 = cachedAdj1 + CACHED_APP_IMPORTANCE_LEVELS * 2;
        doReturn(userOwner).when(mService.mUserController).getCurrentUserId();
@@ -3647,12 +3623,10 @@ public class MockingOomAdjusterTests {
        setWakefulness(PowerManagerInternal.WAKEFULNESS_AWAKE);
        updateOomAdj();

        assertProcStates(app, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? sFirstUiCachedAdj : cachedAdj1,
        assertProcStates(app, PROCESS_STATE_SERVICE, cachedAdj1,
                SCHED_GROUP_BACKGROUND, "cch-started-ui-services", true);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
        assertProcStates(app2, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj2,
        assertProcStates(app2, PROCESS_STATE_SERVICE, cachedAdj2,
                SCHED_GROUP_BACKGROUND, "cch-started-services", true);
        assertThatProcess(app2).notHasImplicitCpuTimeCapability();

@@ -3673,8 +3647,7 @@ public class MockingOomAdjusterTests {
                now - mService.mConstants.MAX_SERVICE_INACTIVITY - 1);
        updateOomAdj();

        assertProcStates(app, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1,
        assertProcStates(app, PROCESS_STATE_SERVICE, cachedAdj1,
                SCHED_GROUP_BACKGROUND, "cch-started-services", true);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();

@@ -3697,8 +3670,7 @@ public class MockingOomAdjusterTests {
        assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND,
                "started-services", false);
        assertThatProcess(app).hasImplicitCpuTimeCapability();
        assertProcStates(app2, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1,
        assertProcStates(app2, PROCESS_STATE_SERVICE, cachedAdj1,
                SCHED_GROUP_BACKGROUND, "cch-started-services", true);
        assertThatProcess(app2).notHasImplicitCpuTimeCapability();

@@ -3713,8 +3685,7 @@ public class MockingOomAdjusterTests {
        assertProcStates(app, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND,
                "started-services", false);
        assertThatProcess(app).hasImplicitCpuTimeCapability();
        assertProcStates(app2, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1,
        assertProcStates(app2, PROCESS_STATE_SERVICE, cachedAdj1,
                SCHED_GROUP_BACKGROUND, "cch-started-services", true);
        assertThatProcess(app2).notHasImplicitCpuTimeCapability();

@@ -3722,8 +3693,7 @@ public class MockingOomAdjusterTests {
        mService.mOomAdjuster.handleUserSwitchedLocked();

        updateOomAdj();
        assertProcStates(app, PROCESS_STATE_SERVICE,
                mService.mConstants.USE_TIERED_CACHED_ADJ ? mFirstNonUiCachedAdj : cachedAdj1,
        assertProcStates(app, PROCESS_STATE_SERVICE, cachedAdj1,
                SCHED_GROUP_BACKGROUND, "cch-started-services", true);
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
        assertProcStates(app2, PROCESS_STATE_SERVICE, SERVICE_ADJ, SCHED_GROUP_BACKGROUND,
@@ -4061,8 +4031,7 @@ public class MockingOomAdjusterTests {
        mInjector.jumpUptimeAheadTo(followUpTimeCaptor.getValue());
        mProcessStateController.runFollowUpUpdate();

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_SERVICE, expectedAdj, SCHED_GROUP_BACKGROUND,
                "cch-started-services");
        assertThatProcess(app).notHasImplicitCpuTimeCapability();
@@ -4210,8 +4179,7 @@ public class MockingOomAdjusterTests {
        mInjector.jumpUptimeAheadTo(followUpTimeCaptor.getValue());
        mProcessStateController.runFollowUpUpdate();

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? mFirstNonUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app1, PROCESS_STATE_CACHED_EMPTY, expectedAdj, SCHED_GROUP_BACKGROUND,
                "cch-empty");
        assertThatProcess(app1).notHasImplicitCpuTimeCapability();
@@ -4278,8 +4246,7 @@ public class MockingOomAdjusterTests {
        setWakefulness(PowerManagerInternal.WAKEFULNESS_AWAKE);
        updateOomAdj(app, client);

        final int expectedAdj = mService.mConstants.USE_TIERED_CACHED_ADJ
                ? sFirstUiCachedAdj : sFirstCachedAdj;
        final int expectedAdj = sFirstCachedAdj;
        assertProcStates(app, PROCESS_STATE_HOME, expectedAdj, SCHED_GROUP_BACKGROUND,
                "cch-bound-ui-services");
        // CPU_TIME is not granted to the client and so cannot be propagated to the service.