summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Lesinski <adamlesinski@google.com> 2015-07-27 21:03:35 +0000
committer Android Git Automerger <android-git-automerger@android.com> 2015-07-27 21:03:35 +0000
commitd07d8446dfb9f648a6027a7a35f34781eba51dcc (patch)
tree05dbe5a664ef793bd1105bb86883cdff56f38eaa
parent98cbe497f58aaf8ab8bc106d79a3aed567d9b58b (diff)
parent62fbfcd9ee86f8e2ee5d7083a6e9f5857bbbe6d9 (diff)
am 62fbfcd9: am d7f4a078: am 48a90091: am fc28d6fc: Merge "BatteryStats: Prevent BatteryService from blocking" into mnc-dev
* commit '62fbfcd9ee86f8e2ee5d7083a6e9f5857bbbe6d9': BatteryStats: Prevent BatteryService from blocking
-rw-r--r--services/core/java/com/android/server/am/BatteryStatsService.java47
1 files changed, 28 insertions, 19 deletions
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 4102f37ff386..447fe871754f 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -859,26 +859,35 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public boolean isOnBattery() {
return mStats.isOnBattery();
}
-
- public void setBatteryState(int status, int health, int plugType, int level,
- int temp, int volt) {
- enforceCallingPermission();
- synchronized (mStats) {
- final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
- if (mStats.isOnBattery() == onBattery) {
- // The battery state has not changed, so we don't need to sync external
- // stats immediately.
- mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt);
- return;
- }
- }
- // Sync external stats first as the battery has changed states. If we don't sync
- // immediately here, we may not collect the relevant data later.
- updateExternalStats("battery-state", UPDATE_ALL);
- synchronized (mStats) {
- mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt);
- }
+ @Override
+ public void setBatteryState(final int status, final int health, final int plugType,
+ final int level, final int temp, final int volt) {
+ enforceCallingPermission();
+
+ // BatteryService calls us here and we may update external state. It would be wrong
+ // to block such a low level service like BatteryService on external stats like WiFi.
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ synchronized (mStats) {
+ final boolean onBattery = plugType == BatteryStatsImpl.BATTERY_PLUGGED_NONE;
+ if (mStats.isOnBattery() == onBattery) {
+ // The battery state has not changed, so we don't need to sync external
+ // stats immediately.
+ mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt);
+ return;
+ }
+ }
+
+ // Sync external stats first as the battery has changed states. If we don't sync
+ // immediately here, we may not collect the relevant data later.
+ updateExternalStats("battery-state", UPDATE_ALL);
+ synchronized (mStats) {
+ mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt);
+ }
+ }
+ });
}
public long getAwakeTimeBattery() {