From c2d02b522cd7efea659a3ff784040f84b8cdbc18 Mon Sep 17 00:00:00 2001 From: Olivier Gaillard Date: Thu, 20 Sep 2018 13:53:18 +0100 Subject: [PATCH] Use the background thread instead ActivityManager to update CPU stats. Updating the CPU stats can be quite slow and blocks the ActivityManager handler thread. Bug: 115506775 Change-Id: I9f67acfe2724c11d117703b2c4ccdbcc1f61c5ab Test: manual - dumpsys batterystats | grep CPU --- core/java/com/android/internal/os/BatteryStatsImpl.java | 3 +++ .../java/com/android/server/am/ActivityManagerService.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 31f13c33c1678..33b9ff7cee4f1 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -337,6 +337,9 @@ public class BatteryStatsImpl extends BatteryStats { private final PlatformIdleStateCallback mPlatformIdleStateCallback; + /** + * This handler is running on {@link BackgroundThread}. + */ final class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper, null, true); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 6e90d5b5c21b4..692f9cfaa833b 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2381,7 +2381,8 @@ public class ActivityManagerService extends IActivityManager.Stub final File systemDir = SystemServiceManager.ensureSystemDir(); // TODO: Move creation of battery stats service outside of activity manager service. - mBatteryStatsService = new BatteryStatsService(systemContext, systemDir, mHandler); + mBatteryStatsService = new BatteryStatsService(systemContext, systemDir, + BackgroundThread.get().getHandler()); mBatteryStatsService.getActiveStatistics().readLocked(); mBatteryStatsService.scheduleWriteToDisk(); mOnBattery = DEBUG_POWER ? true