summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jing Ji <jji@google.com> 2023-06-16 18:01:10 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2023-06-16 18:01:10 +0000
commit2bd807407b4ab93037567f33fec7cef85992f637 (patch)
tree91e72eb08d936071d43aaadea1e11c30cf3631f1
parentc1751cdac836c4dcc7ed15d60a210eb2ba308a6d (diff)
parentd5b8a608169c84589d4330a97937a82fc80590e9 (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.java5
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java29
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();