Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66c7e9c2 authored by Adam Lesinski's avatar Adam Lesinski Committed by android-build-merger
Browse files

Reset BatteryStats when too large for clients to handle

am: 45489787

Change-Id: Ie90ad79b71198d0fe0ead12048aec9bf6658a35a
parents 72c7cce1 45489787
Loading
Loading
Loading
Loading
+19 −2
Original line number Diff line number Diff line
@@ -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);