From c9a65383f9cc089e1b3eeb763ffcba9188d1a345 Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Wed, 30 Jun 2021 11:25:37 -0700 Subject: [PATCH] Relax the lock in getMemoryStateForProcesses Metrics need to be pulled in time while the lock could delay that. The oom adj score in the returned data set could be inconsitent from the actual one but other data fields are not and it's preferrable to pull them. Bug: 192440905 Test: atest CtsStatsdAtomHostTestCases:ProcessMemoryStatsTests Change-Id: I055b8baa87d53114de51b65e3f483635441e5ddc --- .../android/server/am/ActivityManagerService.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3b0a68ca29ca6..40e0be1798e45 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -15557,13 +15557,11 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public List getMemoryStateForProcesses() { List processMemoryStates = new ArrayList<>(); - synchronized (mProcLock) { - synchronized (mPidsSelfLocked) { - for (int i = 0, size = mPidsSelfLocked.size(); i < size; i++) { - final ProcessRecord r = mPidsSelfLocked.valueAt(i); - processMemoryStates.add(new ProcessMemoryState( - r.uid, r.getPid(), r.processName, r.mState.getCurAdj())); - } + synchronized (mPidsSelfLocked) { + for (int i = 0, size = mPidsSelfLocked.size(); i < size; i++) { + final ProcessRecord r = mPidsSelfLocked.valueAt(i); + processMemoryStates.add(new ProcessMemoryState( + r.uid, r.getPid(), r.processName, r.mState.getCurAdj())); } } return processMemoryStates;