diff options
author | Dianne Hackborn <hackbod@google.com> | 2014-06-02 12:42:12 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2014-06-02 12:42:12 -0700 |
commit | fc0641340ff927d9c35d5613723d25858f751118 (patch) | |
tree | 09ef9a4305fdc2d1eabec9264074425c402f5100 | |
parent | 725010a83f1798e5ba6edb93ca2656a96c29fcae (diff) | |
download | frameworks_base-fc0641340ff927d9c35d5613723d25858f751118.zip frameworks_base-fc0641340ff927d9c35d5613723d25858f751118.tar.gz frameworks_base-fc0641340ff927d9c35d5613723d25858f751118.tar.bz2 |
Some battery stats history fixes.
- Now the full wake history uses the history tag if it can.
Hopefully this will still result in a consistent history,
since that isn't really want the tag is for... but the
current implementation in places will probably make this work.
- Possibly fix a bug with inconsistent state between partial
history snapshots: after a snapshot is printed, don't allow
any more batching into the most recent history entry, so the
next snapshot will not miss anything that might get placed
into it soon after.
Also rework command line arguments for enable/disable to make these
commands instead of options.
Change-Id: Ia33445cad1538bf8df549cef284f1e736efbc079
-rw-r--r-- | core/java/android/os/BatteryStats.java | 9 | ||||
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 25 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/BatteryStatsService.java | 14 |
3 files changed, 37 insertions, 11 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index bc57b33..e627d49 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -931,6 +931,14 @@ public abstract class BatteryStats implements Parcelable { } } + /** + * Don't allow any more batching in to the current history event. This + * is called when printing partial histories, so to ensure that the next + * history event will go in to a new batch after what was printed in the + * last partial history. + */ + public abstract void commitCurrentHistoryBatchLocked(); + public abstract int getHistoryTotalSize(); public abstract int getHistoryUsedSize(); @@ -3366,6 +3374,7 @@ public abstract class BatteryStats implements Parcelable { } } if (histStart >= 0) { + commitCurrentHistoryBatchLocked(); pw.print(checkin ? "NEXT: " : " NEXT: "); pw.println(lastTime+1); } } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index ed9f9bc..240d520 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -2006,6 +2006,11 @@ public final class BatteryStatsImpl extends BatteryStats { } } + @Override + public void commitCurrentHistoryBatchLocked() { + mHistoryLastWritten.cmd = HistoryItem.CMD_NULL; + } + void addHistoryBufferLocked(long elapsedRealtimeMs, long uptimeMs, HistoryItem cur) { if (!mHaveBatteryLevel || !mRecordingHistory) { return; @@ -2342,13 +2347,16 @@ public final class BatteryStatsImpl extends BatteryStats { // Only care about partial wake locks, since full wake locks // will be canceled when the user puts the screen to sleep. aggregateLastWakeupUptimeLocked(uptime); + if (historyName == null) { + historyName = name; + } if (mRecordAllWakeLocks) { - if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_START, name, uid, 0)) { + if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_START, historyName, + uid, 0)) { addHistoryEventLocked(elapsedRealtime, uptime, - HistoryItem.EVENT_WAKE_LOCK_START, name, uid); + HistoryItem.EVENT_WAKE_LOCK_START, historyName, uid); } } - historyName = historyName == null ? name : historyName; if (mWakeLockNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WAKE_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Start wake lock to: " @@ -2358,7 +2366,8 @@ public final class BatteryStatsImpl extends BatteryStats { mHistoryCur.wakelockTag.uid = mInitialAcquireWakeUid = uid; mWakeLockImportant = !unimportantForLogging; addHistoryRecordLocked(elapsedRealtime, uptime); - } else if (!mWakeLockImportant && !unimportantForLogging) { + } else if (!mWakeLockImportant && !unimportantForLogging + && mHistoryLastWritten.cmd == HistoryItem.CMD_UPDATE) { if (mHistoryLastWritten.wakelockTag != null) { // We'll try to update the last tag. mHistoryLastWritten.wakelockTag = null; @@ -2386,9 +2395,13 @@ public final class BatteryStatsImpl extends BatteryStats { if (type == WAKE_TYPE_PARTIAL) { mWakeLockNesting--; if (mRecordAllWakeLocks) { - if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_FINISH, name, uid, 0)) { + if (historyName == null) { + historyName = name; + } + if (mActiveEvents.updateState(HistoryItem.EVENT_WAKE_LOCK_FINISH, historyName, + uid, 0)) { addHistoryEventLocked(elapsedRealtime, uptime, - HistoryItem.EVENT_WAKE_LOCK_FINISH, name, uid); + HistoryItem.EVENT_WAKE_LOCK_FINISH, historyName, uid); } } if (mWakeLockNesting == 0) { diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index 249422b..b492edd 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -623,10 +623,14 @@ 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, 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."); + pw.println(" -h: print this help text."); + pw.println("Battery stats (batterystats) commands:"); + pw.println(" enable|disable <option>"); + pw.println(" Enable or disable a running option. Option state is not saved across boots."); + pw.println(" Options are:"); + pw.println(" full-wake-history: include wake_lock_in battery history, full wake details."); + pw.println(" no-auto-reset: don't automatically reset stats when unplugged"); } private int doEnableOrDisable(PrintWriter pw, int i, String[] args, boolean enable) { @@ -702,14 +706,14 @@ public final class BatteryStatsService extends IBatteryStats.Stub pw.println("Battery stats written."); noOutput = true; } - } else if ("--enable".equals(arg)) { + } else if ("--enable".equals(arg) || "enable".equals(arg)) { i = doEnableOrDisable(pw, i, args, true); if (i < 0) { return; } pw.println("Enabled: " + args[i]); return; - } else if ("--disable".equals(arg)) { + } else if ("--disable".equals(arg) || "disable".equals(arg)) { i = doEnableOrDisable(pw, i, args, false); if (i < 0) { return; |