diff options
| -rw-r--r-- | services/core/java/com/android/server/power/hint/HintManagerService.java | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/power/hint/HintManagerService.java b/services/core/java/com/android/server/power/hint/HintManagerService.java index 35717af962ef..fd985591dfde 100644 --- a/services/core/java/com/android/server/power/hint/HintManagerService.java +++ b/services/core/java/com/android/server/power/hint/HintManagerService.java @@ -70,7 +70,7 @@ public final class HintManagerService extends SystemService { @GuardedBy("mLock") private final ArrayMap<Integer, ArrayMap<IBinder, ArraySet<AppHintSession>>> mActiveSessions; - /** Lock to protect HAL handles and listen list. */ + /** Lock to protect HAL handles, listen list, and the UidObserver. */ private final Object mLock = new Object(); @VisibleForTesting final MyUidObserver mUidObserver; @@ -266,11 +266,10 @@ public final class HintManagerService extends SystemService { @VisibleForTesting final class MyUidObserver extends UidObserver { - private final Object mCacheLock = new Object(); - @GuardedBy("mCacheLock") + @GuardedBy("mLock") private final SparseIntArray mProcStatesCache = new SparseIntArray(); public boolean isUidForeground(int uid) { - synchronized (mCacheLock) { + synchronized (mLock) { return mProcStatesCache.get(uid, ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND; } @@ -279,10 +278,8 @@ public final class HintManagerService extends SystemService { @Override public void onUidGone(int uid, boolean disabled) { FgThread.getHandler().post(() -> { - synchronized (mCacheLock) { - mProcStatesCache.delete(uid); - } synchronized (mLock) { + mProcStatesCache.delete(uid); ArrayMap<IBinder, ArraySet<AppHintSession>> tokenMap = mActiveSessions.get(uid); if (tokenMap == null) { return; @@ -305,11 +302,9 @@ public final class HintManagerService extends SystemService { @Override public void onUidStateChanged(int uid, int procState, long procStateSeq, int capability) { FgThread.getHandler().post(() -> { - synchronized (mCacheLock) { - mProcStatesCache.put(uid, procState); - } - boolean shouldAllowUpdate = isUidForeground(uid); synchronized (mLock) { + mProcStatesCache.put(uid, procState); + boolean shouldAllowUpdate = isUidForeground(uid); ArrayMap<IBinder, ArraySet<AppHintSession>> tokenMap = mActiveSessions.get(uid); if (tokenMap == null) { return; @@ -400,10 +395,10 @@ public final class HintManagerService extends SystemService { return null; } - AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token, - halSessionPtr, durationNanos); logPerformanceHintSessionAtom(callingUid, halSessionPtr, durationNanos, tids); synchronized (mLock) { + AppHintSession hs = new AppHintSession(callingUid, callingTgid, tids, token, + halSessionPtr, durationNanos); ArrayMap<IBinder, ArraySet<AppHintSession>> tokenMap = mActiveSessions.get(callingUid); if (tokenMap == null) { |