From 716998e605527800d1a12743365e17a3251861a1 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Fri, 14 May 2021 01:13:31 -0700 Subject: [PATCH] Reset pending oomadj target list after oomadj update Bug: 188060432 Test: atest ActivityManagerFgsBgStartTest Test: atest FrameworksServicesTests:ActivityManagerTest Test: atest MockingOomAdjusterTests Test: atest CtsAppTestCases:ActivityManagerProcessStateTest Change-Id: I68b80e9ad767f8508b43589734ed0aa18138a555 --- .../core/java/com/android/server/am/OomAdjuster.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 1e041545c6be6..4ad99095a8c68 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -694,6 +694,8 @@ public class OomAdjuster { boolean containsCycle = collectReachableProcessesLocked(mPendingProcessSet, processes, uids); + // Clear the pending set as they should've been included in 'processes'. + mPendingProcessSet.clear(); // Reset the flag state.setReachable(false); // Remove this app from the return list because we've done the computation on it. @@ -767,10 +769,6 @@ public class OomAdjuster { } queue.offer(service); service.mState.setReachable(true); - // During scanning the reachable dependants, remove them from the pending oomadj - // targets list if it's possible, as they've been added into the immediate - // oomadj targets list 'processes' above. - mPendingProcessSet.remove(service); } final ProcessProviderRecord ppr = pr.mProviders; for (int i = ppr.numberOfProviderConnections() - 1; i >= 0; i--) { @@ -786,10 +784,6 @@ public class OomAdjuster { } queue.offer(provider); provider.mState.setReachable(true); - // During scanning the reachable dependants, remove them from the pending oomadj - // targets list if it's possible, as they've been added into the immediate - // oomadj targets list 'processes' above. - mPendingProcessSet.remove(provider); } } @@ -887,11 +881,11 @@ public class OomAdjuster { final ArrayList processes = mTmpProcessList; final ActiveUids uids = mTmpUidRecords; collectReachableProcessesLocked(mPendingProcessSet, processes, uids); + mPendingProcessSet.clear(); synchronized (mProcLock) { updateOomAdjInnerLSP(oomAdjReason, topApp, processes, uids, true, false); } processes.clear(); - mPendingProcessSet.clear(); mService.mOomAdjProfiler.oomAdjEnded(); Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);