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

Commit d38fcd3c authored by Kweku Adams's avatar Kweku Adams Committed by Android (Google) Code Review
Browse files

Merge "Tweak oom adjust score for UI jobs."

parents 8e227f5b 8ca49670
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -1898,7 +1898,7 @@ public class OomAdjuster {
                    // For short FGS.
                    adjType = "fg-service-short";
                    // We use MEDIUM_APP_ADJ + 1 so we can tell apart EJ
                    // (which uses MEDIUM_APP_ADJ + 1)
                    // (which uses MEDIUM_APP_ADJ + 2)
                    // from short-FGS.
                    // (We use +1 and +2, not +0 and +1, to be consistent with the following
                    // RECENT_FOREGROUND_APP_ADJ tweak)
@@ -2319,6 +2319,14 @@ public class OomAdjuster {
                                        && adj >= (lbAdj = PERCEPTIBLE_LOW_APP_ADJ)) {
                                    newAdj = PERCEPTIBLE_LOW_APP_ADJ;
                                } else if ((cr.flags & Context.BIND_ALMOST_PERCEPTIBLE) != 0
                                        && (cr.flags & Context.BIND_NOT_FOREGROUND) == 0
                                        && clientAdj < PERCEPTIBLE_APP_ADJ
                                        && adj >= (lbAdj = PERCEPTIBLE_APP_ADJ)) {
                                    // This is for user-initiated jobs.
                                    // We use APP_ADJ + 1 here, so we can tell them apart from FGS.
                                    newAdj = PERCEPTIBLE_APP_ADJ + 1;
                                } else if ((cr.flags & Context.BIND_ALMOST_PERCEPTIBLE) != 0
                                        && (cr.flags & Context.BIND_NOT_FOREGROUND) != 0
                                        && clientAdj < PERCEPTIBLE_APP_ADJ
                                        && adj >= (lbAdj = (PERCEPTIBLE_MEDIUM_APP_ADJ + 2))) {
                                    // This is for expedited jobs.
+60 −3
Original line number Diff line number Diff line
@@ -630,6 +630,26 @@ public class MockingOomAdjusterTests {
            assertNotEquals(PERCEPTIBLE_RECENT_FOREGROUND_APP_ADJ + 2, app.mState.getSetAdj());
        }
    }

    @SuppressWarnings("GuardedBy")
    @Test
    public void testUpdateOomAdj_DoOne_ImpFg_AlmostPerceptibleService() {
        ProcessRecord system = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID,
                MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, true));
        ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, true));
        system.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
        system.mState.setHasTopUi(true);
        // Simulate the system starting and binding to a service in the app.
        ServiceRecord s = bindService(app, system,
                null, Context.BIND_ALMOST_PERCEPTIBLE, mock(IBinder.class));
        sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
        sService.mOomAdjuster.updateOomAdjLocked(app, OomAdjuster.OOM_ADJ_REASON_NONE);

        assertProcStates(app, PROCESS_STATE_IMPORTANT_FOREGROUND,
                PERCEPTIBLE_APP_ADJ + 1, SCHED_GROUP_DEFAULT);
    }

    @SuppressWarnings("GuardedBy")
    @Test
    public void testUpdateOomAdj_DoOne_Toast() {
@@ -1056,13 +1076,15 @@ public class MockingOomAdjusterTests {

    @SuppressWarnings("GuardedBy")
    @Test
    public void testUpdateOomAdj_DoOne_Service_MediumPerceptible() {
    public void testUpdateOomAdj_DoOne_Service_AlmostPerceptible() {
        {
            ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID,
                    MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
            ProcessRecord client = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                    MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
            bindService(app, client, null, Context.BIND_ALMOST_PERCEPTIBLE, mock(IBinder.class));
            bindService(app, client, null,
                    Context.BIND_ALMOST_PERCEPTIBLE | Context.BIND_NOT_FOREGROUND,
                    mock(IBinder.class));
            client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
            sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
            updateOomAdj(client, app);
@@ -1077,7 +1099,9 @@ public class MockingOomAdjusterTests {
                    MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
            WindowProcessController wpc = client.getWindowProcessController();
            doReturn(true).when(wpc).isHeavyWeightProcess();
            bindService(app, client, null, Context.BIND_ALMOST_PERCEPTIBLE, mock(IBinder.class));
            bindService(app, client, null,
                    Context.BIND_ALMOST_PERCEPTIBLE | Context.BIND_NOT_FOREGROUND,
                    mock(IBinder.class));
            client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
            sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
            updateOomAdj(client, app);
@@ -1085,6 +1109,39 @@ public class MockingOomAdjusterTests {

            assertEquals(PERCEPTIBLE_MEDIUM_APP_ADJ + 2, app.mState.getSetAdj());
        }

        {
            ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID,
                    MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
            ProcessRecord client = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                    MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
            bindService(app, client, null,
                    Context.BIND_ALMOST_PERCEPTIBLE,
                    mock(IBinder.class));
            client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
            sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
            sService.mOomAdjuster.updateOomAdjLocked(app, OomAdjuster.OOM_ADJ_REASON_NONE);

            assertEquals(PERCEPTIBLE_APP_ADJ + 1, app.mState.getSetAdj());
        }

        {
            ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID,
                    MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, false));
            ProcessRecord client = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID,
                    MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, false));
            WindowProcessController wpc = client.getWindowProcessController();
            doReturn(true).when(wpc).isHeavyWeightProcess();
            bindService(app, client, null,
                    Context.BIND_ALMOST_PERCEPTIBLE,
                    mock(IBinder.class));
            client.mState.setMaxAdj(PERSISTENT_PROC_ADJ);
            sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
            sService.mOomAdjuster.updateOomAdjLocked(app, OomAdjuster.OOM_ADJ_REASON_NONE);
            doReturn(false).when(wpc).isHeavyWeightProcess();

            assertEquals(PERCEPTIBLE_APP_ADJ + 1, app.mState.getSetAdj());
        }
    }

    @SuppressWarnings("GuardedBy")