Various improvements to battery stats collection

We now clear the battery stats when unplugging after the
battery is full.  This allows us to use the "total" stats as
a new "since last charged" stat.  Total is gone.  I never used
it, it was worthless.  Since last charged is a lot more
interesting.

The battery history now collects a lot more stats, and keeps
control over how much it can collect.  Printing is now more
descriptive.

The kinds of stats have been renamed to SINCE_UNPLUGGED and
SINCE_DISCHARGED.  The other two stats are still there, but
no longer printed; a future change will eliminate them
completely along with all of their state.

Change-Id: I4e9fcfcf8c30510092c76a8594f6021e9502fbc1
This commit is contained in:
Dianne Hackborn
2010-06-14 17:17:44 -07:00
parent c95812e6ca
commit 6b7b484521
5 changed files with 1131 additions and 344 deletions

View File

@ -210,9 +210,6 @@ class BatteryService extends Binder {
boolean logOutlier = false;
long dischargeDuration = 0;
shutdownIfNoPower();
shutdownIfOverTemp();
mBatteryLevelCritical = mBatteryLevel <= CRITICAL_BATTERY_LEVEL;
if (mAcOnline) {
mPlugType = BatteryManager.BATTERY_PLUGGED_AC;
@ -221,6 +218,19 @@ class BatteryService extends Binder {
} else {
mPlugType = BATTERY_PLUGGED_NONE;
}
// Let the battery stats keep track of the current level.
try {
mBatteryStats.setBatteryState(mBatteryStatus, mBatteryHealth,
mPlugType, mBatteryLevel, mBatteryTemperature,
mBatteryVoltage);
} catch (RemoteException e) {
// Should never happen.
}
shutdownIfNoPower();
shutdownIfOverTemp();
if (mBatteryStatus != mLastBatteryStatus ||
mBatteryHealth != mLastBatteryHealth ||
mBatteryPresent != mLastBatteryPresent ||
@ -263,16 +273,6 @@ class BatteryService extends Binder {
EventLog.writeEvent(EventLogTags.BATTERY_LEVEL,
mBatteryLevel, mBatteryVoltage, mBatteryTemperature);
}
if (mBatteryLevel != mLastBatteryLevel && mPlugType == BATTERY_PLUGGED_NONE) {
// If the battery level has changed and we are on battery, update the current level.
// This is used for discharge cycle tracking so this shouldn't be updated while the
// battery is charging.
try {
mBatteryStats.recordCurrentLevel(mBatteryLevel);
} catch (RemoteException e) {
// Should never happen.
}
}
if (mBatteryLevelCritical && !mLastBatteryLevelCritical &&
mPlugType == BATTERY_PLUGGED_NONE) {
// We want to make sure we log discharge cycle outliers
@ -342,11 +342,6 @@ class BatteryService extends Binder {
Intent intent = new Intent(Intent.ACTION_BATTERY_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
| Intent.FLAG_RECEIVER_REPLACE_PENDING);
try {
mBatteryStats.setOnBattery(mPlugType == BATTERY_PLUGGED_NONE, mBatteryLevel);
} catch (RemoteException e) {
// Should never happen.
}
int icon = getIcon(mBatteryLevel);