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: Ic9807f384e2f1e1ca495fb82006e0675e83bf4b4
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jing Ji
2023-06-16 17:42:08 +00:00
committed by Automerger Merge Worker
2 changed files with 32 additions and 2 deletions

View File

@@ -1009,7 +1009,6 @@ public class OomAdjuster {
mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(), mCacheOomRanker.reRankLruCachedAppsLSP(mProcessList.getLruProcessesLSP(),
mProcessList.getLruProcessServiceStartLOSP()); mProcessList.getLruProcessServiceStartLOSP());
} }
assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());
if (computeClients) { // There won't be cycles if we didn't compute clients above. if (computeClients) { // There won't be cycles if we didn't compute clients above.
// Cycle strategy: // Cycle strategy:
@@ -1034,7 +1033,7 @@ public class OomAdjuster {
ProcessRecord app = activeProcesses.get(i); ProcessRecord app = activeProcesses.get(i);
final ProcessStateRecord state = app.mState; final ProcessStateRecord state = app.mState;
if (!app.isKilledByAm() && app.getThread() != null && state.containsCycle()) { 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)) { true, true)) {
retryCycles = true; retryCycles = true;
} }
@@ -1044,6 +1043,8 @@ public class OomAdjuster {
} }
mProcessesInCycle.clear(); mProcessesInCycle.clear();
assignCachedAdjIfNecessary(mProcessList.getLruProcessesLOSP());
mNumNonCachedProcs = 0; mNumNonCachedProcs = 0;
mNumCachedHiddenProcs = 0; mNumCachedHiddenProcs = 0;

View File

@@ -2512,6 +2512,35 @@ public class MockingOomAdjusterTests {
assertEquals(FOREGROUND_APP_ADJ, app.mState.getSetAdj()); 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, 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();