From 8546b219c6baf71e66e36da1bf408f58a81ac2cd Mon Sep 17 00:00:00 2001 From: Yunfan Chen Date: Mon, 1 Apr 2019 15:34:44 +0900 Subject: [PATCH] Use mPidMap instead of mProcessNames to get process with pid info With newly introduced mPidMap, we do not need to iterate every process to find the one we need with pid information. Use mPidMap directly to accelerate the getting process method. By doing this, the time consumption of getConfiguration get reduced by 12.5%. The time consumption percentage of getConfiguration in getOrientationChanging is reduced from around 87% to 41%. Also, in prepareSurfacesLocked, the time consumption of getOrientationChanging reduced from 37% to 25%. Test: go/wm-smoke Test: ddms Bug: 129389526 Change-Id: I77511ce3385049e8c812e8e3706482a48457df0c --- .../server/wm/ActivityTaskManagerService.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java index 9a8824f1b7170..3363c4c6749d7 100644 --- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java +++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java @@ -5812,15 +5812,10 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub { } WindowProcessController getProcessController(int pid, int uid) { - final ArrayMap> pmap = mProcessNames.getMap(); - for (int i = pmap.size()-1; i >= 0; i--) { - final SparseArray procs = pmap.valueAt(i); - for (int j = procs.size() - 1; j >= 0; j--) { - final WindowProcessController proc = procs.valueAt(j); - if (UserHandle.isApp(uid) && proc.getPid() == pid && proc.mUid == uid) { - return proc; - } - } + final WindowProcessController proc = mPidMap.get(pid); + if (proc == null) return null; + if (UserHandle.isApp(uid) && proc.mUid == uid) { + return proc; } return null; }