Merge "BatteryStats: Prevent BatteryService from blocking" into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fc28d6fc9d
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user