diff options
| author | 2023-06-16 18:01:10 +0000 | |
|---|---|---|
| committer | 2023-06-16 18:01:10 +0000 | |
| commit | 2bd807407b4ab93037567f33fec7cef85992f637 (patch) | |
| tree | 91e72eb08d936071d43aaadea1e11c30cf3631f1 | |
| parent | c1751cdac836c4dcc7ed15d60a210eb2ba308a6d (diff) | |
| parent | d5b8a608169c84589d4330a97937a82fc80590e9 (diff) | |
Merge "Use the UNKNOWN_ADJ as the cached adj in cycle recomputation" into udc-dev am: d5b8a60816
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23716012
Change-Id: Ia03883f721c0d72f2b6f093888c16ed1342bb3a9
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | services/core/java/com/android/server/am/OomAdjuster.java | 5 | ||||
| -rw-r--r-- | services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java | 29 |
2 files changed, 32 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 764bbe8bd191..f21ad2204d74 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -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: @@ -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; } @@ -1044,6 +1043,8 @@ public class OomAdjuster { } mProcessesInCycle.clear(); + assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP()); + mNumNonCachedProcs = 0; mNumCachedHiddenProcs = 0; diff --git a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java index 770f04a2db5e..60e2af5f283c 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java @@ -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(); |