Loading services/core/java/com/android/server/am/OomAdjuster.java +3 −2 Original line number Diff line number Diff line Loading @@ -1009,7 +1009,6 @@ public class OomAdjuster { mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(), mProcessList.getLruProcessServiceStartLOSP()); } assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP()); if (computeClients) { // There won't be cycles if we didn't compute clients above. // Cycle strategy: Loading @@ -1034,7 +1033,7 @@ public class OomAdjuster { ProcessRecord app = activeProcesses.get(i); final ProcessStateRecord state = app.mState; 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)) { retryCycles = true; } Loading @@ -1044,6 +1043,8 @@ public class OomAdjuster { } mProcessesInCycle.clear(); assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP()); mNumNonCachedProcs = 0; mNumCachedHiddenProcs = 0; Loading services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +29 −0 Original line number Diff line number Diff line Loading @@ -2512,6 +2512,35 @@ public class MockingOomAdjusterTests { 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, String packageName, boolean hasShownUi) { long now = SystemClock.uptimeMillis(); Loading Loading
services/core/java/com/android/server/am/OomAdjuster.java +3 −2 Original line number Diff line number Diff line Loading @@ -1009,7 +1009,6 @@ public class OomAdjuster { mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(), mProcessList.getLruProcessServiceStartLOSP()); } assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP()); if (computeClients) { // There won't be cycles if we didn't compute clients above. // Cycle strategy: Loading @@ -1034,7 +1033,7 @@ public class OomAdjuster { ProcessRecord app = activeProcesses.get(i); final ProcessStateRecord state = app.mState; 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)) { retryCycles = true; } Loading @@ -1044,6 +1043,8 @@ public class OomAdjuster { } mProcessesInCycle.clear(); assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP()); mNumNonCachedProcs = 0; mNumCachedHiddenProcs = 0; Loading
services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +29 −0 Original line number Diff line number Diff line Loading @@ -2512,6 +2512,35 @@ public class MockingOomAdjusterTests { 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, String packageName, boolean hasShownUi) { long now = SystemClock.uptimeMillis(); Loading