Merge "Use the UNKNOWN_ADJ as the cached adj in cycle recomputation" into udc-dev

This commit is contained in:
Jing Ji
2023-06-16 17:30:13 +00:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 2 deletions

View File

@@ -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;

View File

@@ -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();