From ea036c84168641c08a9da13f836a402729d8ca67 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Thu, 28 May 2020 21:45:21 -0700 Subject: [PATCH] Don't reset OOM adjType to cch-empty during recomputing on cycles The first pass should have an equivalent or better value for it. During oom recomputing on cycles, if the result of recomputation is no better than the given 'cachedAdj', its adjType won't be updated, therefore we'd need to keep its current value as is. Bug: 156123244 Test: atest MockingOomAdjusterTests Test: atest FrameworksServicesTests:ActivityManagerServiceTest Test: atest CtsAppTestCases:ActivityManagerProcessStateTest Test: Manual - adb shell dumpsys activity oom Change-Id: Ic4adf76656575926d16c0a037d955795061116e3 --- .../core/java/com/android/server/am/OomAdjuster.java | 8 +++++--- .../com/android/server/am/MockingOomAdjusterTests.java | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index a81590c8c0228..14c5b2cb12b22 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -1260,9 +1260,11 @@ public final class OomAdjuster { // value that the caller wants us to. adj = cachedAdj; procState = PROCESS_STATE_CACHED_EMPTY; - app.setCached(true); - app.empty = true; - app.adjType = "cch-empty"; + if (!app.containsCycle) { + app.setCached(true); + app.empty = true; + app.adjType = "cch-empty"; + } if (DEBUG_OOM_ADJ_REASON || logUid == appUid) { reportOomAdjMessageLocked(TAG_OOM_ADJ, "Making empty: " + app); } 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 2983d585c45a5..fde40aa77a0e1 100644 --- a/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java +++ b/services/tests/mockingservicestests/src/com/android/server/am/MockingOomAdjusterTests.java @@ -1387,6 +1387,15 @@ public class MockingOomAdjusterTests { SCHED_GROUP_DEFAULT); assertProcStates(app3, PROCESS_STATE_FOREGROUND_SERVICE, PERCEPTIBLE_APP_ADJ, SCHED_GROUP_DEFAULT); + assertEquals("service", app.adjType); + assertEquals("service", app2.adjType); + assertEquals("fg-service", app3.adjType); + assertEquals(false, app.isCached()); + assertEquals(false, app2.isCached()); + assertEquals(false, app3.isCached()); + assertEquals(false, app.empty); + assertEquals(false, app2.empty); + assertEquals(false, app3.empty); } @SuppressWarnings("GuardedBy")