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

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

Merge changes Iee5024b8,Ic8afc2eb into udc-dev am: 41c62534

parents ddd5efbe 41c62534
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -3797,7 +3797,9 @@ public final class ActiveServices {
            }
            }
            clientPsr.addConnection(c);
            clientPsr.addConnection(c);
            c.startAssociationIfNeeded();
            c.startAssociationIfNeeded();
            if (c.hasFlag(Context.BIND_ABOVE_CLIENT)) {
            // Don't set hasAboveClient if binding to self to prevent modifyRawOomAdj() from
            // dropping the process' adjustment level.
            if (b.client != s.app && c.hasFlag(Context.BIND_ABOVE_CLIENT)) {
                clientPsr.setHasAboveClient(true);
                clientPsr.setHasAboveClient(true);
            }
            }
            if (c.hasFlag(BIND_ALLOW_WHITELIST_MANAGEMENT)) {
            if (c.hasFlag(BIND_ALLOW_WHITELIST_MANAGEMENT)) {
+2 −1
Original line number Original line Diff line number Diff line
@@ -341,7 +341,8 @@ final class ProcessServiceRecord {
        mHasAboveClient = false;
        mHasAboveClient = false;
        for (int i = mConnections.size() - 1; i >= 0; i--) {
        for (int i = mConnections.size() - 1; i >= 0; i--) {
            ConnectionRecord cr = mConnections.valueAt(i);
            ConnectionRecord cr = mConnections.valueAt(i);
            if (cr.hasFlag(Context.BIND_ABOVE_CLIENT)) {
            if (cr.binding.service.app.mServices != this
                    && cr.hasFlag(Context.BIND_ABOVE_CLIENT)) {
                mHasAboveClient = true;
                mHasAboveClient = true;
                break;
                break;
            }
            }
+23 −0
Original line number Original line Diff line number Diff line
@@ -68,6 +68,7 @@ import static com.android.server.am.ProcessList.UNKNOWN_ADJ;
import static com.android.server.am.ProcessList.VISIBLE_APP_ADJ;
import static com.android.server.am.ProcessList.VISIBLE_APP_ADJ;


import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.mockito.AdditionalAnswers.answer;
import static org.mockito.AdditionalAnswers.answer;
@@ -2489,6 +2490,28 @@ public class MockingOomAdjusterTests {
        assertProcStates(app2, false, PROCESS_STATE_SERVICE, SERVICE_ADJ, "started-services");
        assertProcStates(app2, false, PROCESS_STATE_SERVICE, SERVICE_ADJ, "started-services");
    }
    }


    @SuppressWarnings("GuardedBy")
    @Test
    public void testUpdateOomAdj_DoOne_AboveClient_SameProcess() {
        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).getTopApp();
        sService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE);
        sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);

        assertEquals(FOREGROUND_APP_ADJ, app.mState.getSetAdj());

        // Simulate binding to a service in the same process using BIND_ABOVE_CLIENT and
        // verify that its OOM adjustment level is unaffected.
        bindService(app, app, null, Context.BIND_ABOVE_CLIENT, mock(IBinder.class));
        app.mServices.updateHasAboveClientLocked();
        assertFalse(app.mServices.hasAboveClient());

        sService.mOomAdjuster.updateOomAdjLocked(app, OOM_ADJ_REASON_NONE);
        assertEquals(FOREGROUND_APP_ADJ, app.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();