Loading services/core/java/com/android/server/am/OomAdjuster.java +0 −19 Original line number Original line Diff line number Diff line Loading @@ -2530,25 +2530,6 @@ public class OomAdjuster { } } } } state.setCurRawAdj(adj); adj = psr.modifyRawOomAdj(adj); if (adj > state.getMaxAdj()) { adj = state.getMaxAdj(); if (adj <= PERCEPTIBLE_LOW_APP_ADJ) { schedGroup = SCHED_GROUP_DEFAULT; } } // Put bound foreground services in a special sched group for additional // restrictions on screen off if (procState >= PROCESS_STATE_BOUND_FOREGROUND_SERVICE && mService.mWakefulness.get() != PowerManagerInternal.WAKEFULNESS_AWAKE && !state.shouldScheduleLikeTopApp()) { if (schedGroup > SCHED_GROUP_RESTRICTED) { schedGroup = SCHED_GROUP_RESTRICTED; } } // apply capability from FGS. // apply capability from FGS. if (psr.hasForegroundServices()) { if (psr.hasForegroundServices()) { capability |= capabilityFromFGS; capability |= capabilityFromFGS; Loading services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +43 −0 Original line number Original line Diff line number Diff line Loading @@ -1202,6 +1202,25 @@ public class MockingOomAdjusterTests { assertBfsl(app); assertBfsl(app); } } @SuppressWarnings("GuardedBy") @Test public void testUpdateOomAdj_DoOne_BoundFgService_Sleeping() { 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, null, Context.BIND_FOREGROUND_SERVICE, mock(IBinder.class)); client.mState.setMaxAdj(PERSISTENT_PROC_ADJ); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_ASLEEP); updateOomAdj(client, app); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE); assertProcStates(app, PROCESS_STATE_BOUND_FOREGROUND_SERVICE, VISIBLE_APP_ADJ, SCHED_GROUP_RESTRICTED); assertProcStates(client, PROCESS_STATE_PERSISTENT, PERSISTENT_PROC_ADJ, SCHED_GROUP_DEFAULT); } @SuppressWarnings("GuardedBy") @SuppressWarnings("GuardedBy") @Test @Test public void testUpdateOomAdj_DoOne_Service_BoundNotForeground() { public void testUpdateOomAdj_DoOne_Service_BoundNotForeground() { Loading Loading @@ -2786,6 +2805,30 @@ public class MockingOomAdjusterTests { "started-services", false); "started-services", false); } } @SuppressWarnings("GuardedBy") @Test public void testUpdateOomAdj_DoOne_AboveClient() { ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, true)); ProcessRecord service = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID, MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, true)); doReturn(PROCESS_STATE_TOP).when(mService.mAtmInternal).getTopProcessState(); doReturn(app).when(mService).getTopApp(); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE); updateOomAdj(app); 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(service, app, null, null, Context.BIND_ABOVE_CLIENT, mock(IBinder.class)); app.mServices.updateHasAboveClientLocked(); assertTrue(app.mServices.hasAboveClient()); updateOomAdj(app); assertEquals(VISIBLE_APP_ADJ, app.mState.getSetAdj()); } @SuppressWarnings("GuardedBy") @SuppressWarnings("GuardedBy") @Test @Test public void testUpdateOomAdj_DoOne_AboveClient_SameProcess() { public void testUpdateOomAdj_DoOne_AboveClient_SameProcess() { Loading Loading
services/core/java/com/android/server/am/OomAdjuster.java +0 −19 Original line number Original line Diff line number Diff line Loading @@ -2530,25 +2530,6 @@ public class OomAdjuster { } } } } state.setCurRawAdj(adj); adj = psr.modifyRawOomAdj(adj); if (adj > state.getMaxAdj()) { adj = state.getMaxAdj(); if (adj <= PERCEPTIBLE_LOW_APP_ADJ) { schedGroup = SCHED_GROUP_DEFAULT; } } // Put bound foreground services in a special sched group for additional // restrictions on screen off if (procState >= PROCESS_STATE_BOUND_FOREGROUND_SERVICE && mService.mWakefulness.get() != PowerManagerInternal.WAKEFULNESS_AWAKE && !state.shouldScheduleLikeTopApp()) { if (schedGroup > SCHED_GROUP_RESTRICTED) { schedGroup = SCHED_GROUP_RESTRICTED; } } // apply capability from FGS. // apply capability from FGS. if (psr.hasForegroundServices()) { if (psr.hasForegroundServices()) { capability |= capabilityFromFGS; capability |= capabilityFromFGS; Loading
services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +43 −0 Original line number Original line Diff line number Diff line Loading @@ -1202,6 +1202,25 @@ public class MockingOomAdjusterTests { assertBfsl(app); assertBfsl(app); } } @SuppressWarnings("GuardedBy") @Test public void testUpdateOomAdj_DoOne_BoundFgService_Sleeping() { 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, null, Context.BIND_FOREGROUND_SERVICE, mock(IBinder.class)); client.mState.setMaxAdj(PERSISTENT_PROC_ADJ); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_ASLEEP); updateOomAdj(client, app); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE); assertProcStates(app, PROCESS_STATE_BOUND_FOREGROUND_SERVICE, VISIBLE_APP_ADJ, SCHED_GROUP_RESTRICTED); assertProcStates(client, PROCESS_STATE_PERSISTENT, PERSISTENT_PROC_ADJ, SCHED_GROUP_DEFAULT); } @SuppressWarnings("GuardedBy") @SuppressWarnings("GuardedBy") @Test @Test public void testUpdateOomAdj_DoOne_Service_BoundNotForeground() { public void testUpdateOomAdj_DoOne_Service_BoundNotForeground() { Loading Loading @@ -2786,6 +2805,30 @@ public class MockingOomAdjusterTests { "started-services", false); "started-services", false); } } @SuppressWarnings("GuardedBy") @Test public void testUpdateOomAdj_DoOne_AboveClient() { ProcessRecord app = spy(makeDefaultProcessRecord(MOCKAPP_PID, MOCKAPP_UID, MOCKAPP_PROCESSNAME, MOCKAPP_PACKAGENAME, true)); ProcessRecord service = spy(makeDefaultProcessRecord(MOCKAPP2_PID, MOCKAPP2_UID, MOCKAPP2_PROCESSNAME, MOCKAPP2_PACKAGENAME, true)); doReturn(PROCESS_STATE_TOP).when(mService.mAtmInternal).getTopProcessState(); doReturn(app).when(mService).getTopApp(); mService.mWakefulness.set(PowerManagerInternal.WAKEFULNESS_AWAKE); updateOomAdj(app); 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(service, app, null, null, Context.BIND_ABOVE_CLIENT, mock(IBinder.class)); app.mServices.updateHasAboveClientLocked(); assertTrue(app.mServices.hasAboveClient()); updateOomAdj(app); assertEquals(VISIBLE_APP_ADJ, app.mState.getSetAdj()); } @SuppressWarnings("GuardedBy") @SuppressWarnings("GuardedBy") @Test @Test public void testUpdateOomAdj_DoOne_AboveClient_SameProcess() { public void testUpdateOomAdj_DoOne_AboveClient_SameProcess() { Loading