Fix recording of wake_lock_in.

There was a bug that would allow the nesting count
to get off.  Also better documentation of times in
HistoryItem, and new option to disable resetting of
the stats when unplugging.

Change-Id: If1b39a02475c5b620c67b700a323a6d0462d5c61
This commit is contained in:
Dianne Hackborn
2014-05-15 17:05:22 -07:00
committed by The Android Automerger
parent b694cfa81a
commit 203c1de010
3 changed files with 21 additions and 10 deletions

View File

@@ -531,7 +531,8 @@ public abstract class BatteryStats implements Parcelable {
public final static class HistoryItem implements Parcelable {
public HistoryItem next;
// The time of this event in milliseconds, as per SystemClock.elapsedRealtime().
public long time;
public static final byte CMD_UPDATE = 0; // These can be written as deltas
@@ -645,7 +646,7 @@ public abstract class BatteryStats implements Parcelable {
public int eventCode;
public HistoryTag eventTag;
// Only set for CMD_CURRENT_TIME.
// Only set for CMD_CURRENT_TIME or CMD_RESET, as per System.currentTimeMillis().
public long currentTime;
// Meta-data when reading.

View File

@@ -235,7 +235,8 @@ public final class BatteryStatsImpl extends BatteryStats {
int mWakeLockNesting;
boolean mWakeLockImportant;
public boolean mRecordAllWakeLocks;
boolean mRecordAllWakeLocks;
boolean mNoAutoReset;
int mScreenState = Display.STATE_UNKNOWN;
StopwatchTimer mScreenOnTimer;
@@ -2314,9 +2315,6 @@ public final class BatteryStatsImpl extends BatteryStats {
}
}
private String mInitialAcquireWakeName;
private int mInitialAcquireWakeUid = -1;
public void setRecordAllWakeLocksLocked(boolean enabled) {
mRecordAllWakeLocks = enabled;
if (!enabled) {
@@ -2325,6 +2323,13 @@ public final class BatteryStatsImpl extends BatteryStats {
}
}
public void setNoAutoReset(boolean enabled) {
mNoAutoReset = enabled;
}
private String mInitialAcquireWakeName;
private int mInitialAcquireWakeUid = -1;
public void noteStartWakeLocked(int uid, int pid, String name, String historyName, int type,
boolean unimportantForLogging, long elapsedRealtime, long uptime) {
uid = mapUid(uid);
@@ -2355,6 +2360,7 @@ public final class BatteryStatsImpl extends BatteryStats {
} else if (mRecordAllWakeLocks) {
if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_START, historyName,
uid, 0)) {
mWakeLockNesting++;
return;
}
addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_WAKE_LOCK_START,
@@ -5942,9 +5948,9 @@ public final class BatteryStatsImpl extends BatteryStats {
// we have gone through a significant charge (from a very low
// level to a now very high level).
boolean reset = false;
if (oldStatus == BatteryManager.BATTERY_STATUS_FULL
if (!mNoAutoReset && (oldStatus == BatteryManager.BATTERY_STATUS_FULL
|| level >= 90
|| (mDischargeCurrentLevel < 20 && level >= 80)) {
|| (mDischargeCurrentLevel < 20 && level >= 80))) {
doWrite = true;
resetAllStatsLocked();
mDischargeStartLevel = level;

View File

@@ -623,8 +623,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub
pw.println(" --charged: only output data since last charged.");
pw.println(" --reset: reset the stats, clearing all current data.");
pw.println(" --write: force write current collected stats to disk.");
pw.println(" --enable: enable an option: full-wake-history.");
pw.println(" --disable: disable an option: full-wake-history.");
pw.println(" --enable: enable an option: full-wake-history, no-auto-reset.");
pw.println(" --disable: disable an option: full-wake-history, no-auto-reset.");
pw.println(" -h: print this help text.");
pw.println(" <package.name>: optional name of package to filter output by.");
}
@@ -640,6 +640,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
synchronized (mStats) {
mStats.setRecordAllWakeLocksLocked(enable);
}
} else if ("no-auto-reset".equals(args[i])) {
synchronized (mStats) {
mStats.setNoAutoReset(enable);
}
} else {
pw.println("Unknown enable/disable option: " + args[i]);
dumpHelp(pw);