From b1e153bcd246f838c336855e1f4c8142625eefed Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Thu, 18 Feb 2016 11:07:01 -0800 Subject: [PATCH] Reduce locking duration when checking idle states Synchronize only the methods that need to be, so that the lock is not held for a few hundred milliseconds, blocking other usagestats operations. Bug: 27208519 Change-Id: I43bda0791dd8b2576a8af506bcdc67a09a5830f2 --- .../server/usage/UsageStatsService.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index acc752ad8136a..8e891bfcbabcc 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -431,17 +431,17 @@ public class UsageStatsService extends SystemService implements List packages = mPackageManager.getInstalledPackagesAsUser( PackageManager.MATCH_DISABLED_COMPONENTS, userId); - synchronized (mLock) { - final int packageCount = packages.size(); - for (int p = 0; p < packageCount; p++) { - final PackageInfo pi = packages.get(p); - final String packageName = pi.packageName; - final boolean isIdle = isAppIdleFiltered(packageName, - UserHandle.getAppId(pi.applicationInfo.uid), - userId, elapsedRealtime); - mHandler.sendMessage(mHandler.obtainMessage(MSG_INFORM_LISTENERS, - userId, isIdle ? 1 : 0, packageName)); - if (isIdle) { + final int packageCount = packages.size(); + for (int p = 0; p < packageCount; p++) { + final PackageInfo pi = packages.get(p); + final String packageName = pi.packageName; + final boolean isIdle = isAppIdleFiltered(packageName, + UserHandle.getAppId(pi.applicationInfo.uid), + userId, elapsedRealtime); + mHandler.sendMessage(mHandler.obtainMessage(MSG_INFORM_LISTENERS, + userId, isIdle ? 1 : 0, packageName)); + if (isIdle) { + synchronized (mLock) { mAppIdleHistory.setIdle(packageName, userId, elapsedRealtime); } }