summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adam Lesinski <adamlesinski@google.com> 2016-12-17 02:10:57 +0000
committer android-build-merger <android-build-merger@google.com> 2016-12-17 02:10:57 +0000
commit66c7e9c20eba46582c2d98e04a252daf529a1b8d (patch)
tree681ea0e5a730450aaf7f7a39489a209b14800d31
parent72c7cce18f00240dc802c7c13e0f38af433165a0 (diff)
parent45489787d7f84a5530c1e88bebc1eb6aa614bd74 (diff)
Reset BatteryStats when too large for clients to handle
am: 45489787d7 Change-Id: Ie90ad79b71198d0fe0ead12048aec9bf6658a35a
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java21
1 files changed, 19 insertions, 2 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 38e0d5bd0f9c..da13a04078ae 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -2878,8 +2878,22 @@ public class BatteryStatsImpl extends BatteryStats {
mHistoryLastWritten.setTo(mHistoryLastLastWritten);
}
+ boolean recordResetDueToOverflow = false;
final int dataSize = mHistoryBuffer.dataSize();
- if (dataSize >= MAX_HISTORY_BUFFER) {
+ if (dataSize >= MAX_MAX_HISTORY_BUFFER*3) {
+ // Clients can't deal with history buffers this large. This only
+ // really happens when the device is on charger and interacted with
+ // for long periods of time, like in retail mode. Since the device is
+ // most likely charged, when unplugged, stats would have reset anyways.
+ // Reset the stats and mark that we overflowed.
+ // b/32540341
+ resetAllStatsLocked();
+
+ // Mark that we want to set *OVERFLOW* event and the RESET:START
+ // events.
+ recordResetDueToOverflow = true;
+
+ } else if (dataSize >= MAX_HISTORY_BUFFER) {
if (!mHistoryOverflow) {
mHistoryOverflow = true;
addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur);
@@ -2925,9 +2939,12 @@ public class BatteryStatsImpl extends BatteryStats {
return;
}
- if (dataSize == 0) {
+ if (dataSize == 0 || recordResetDueToOverflow) {
// The history is currently empty; we need it to start with a time stamp.
cur.currentTime = System.currentTimeMillis();
+ if (recordResetDueToOverflow) {
+ addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_OVERFLOW, cur);
+ }
addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_RESET, cur);
}
addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur);