Merge "BatteryStats: Prevent BatteryService from blocking" into mnc-dev

This commit is contained in:
Adam Lesinski
2015-07-27 20:01:34 +00:00
committed by Android (Google) Code Review

View File

@@ -859,26 +859,35 @@ public final class BatteryStatsService extends IBatteryStats.Stub
public boolean isOnBattery() { public boolean isOnBattery() {
return mStats.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 @Override
// immediately here, we may not collect the relevant data later. public void setBatteryState(final int status, final int health, final int plugType,
updateExternalStats("battery-state", UPDATE_ALL); final int level, final int temp, final int volt) {
synchronized (mStats) { enforceCallingPermission();
mStats.setBatteryStateLocked(status, health, plugType, level, temp, volt);
} // 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() { public long getAwakeTimeBattery() {