From fb3809ca63c17ac09162e08ee3eef0bdae16dc73 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 29 Sep 2014 18:31:22 -0700 Subject: [PATCH] Fix issue #17705755: Battery stats resets at incorrect times Revert back to (mostly) KK behavior, fix a problem where we were collecting some data in an inconsistent state. Change-Id: Ida3ca3fb734a9d7d61a90fd5044152e927c59e02 --- .../java/com/android/internal/os/BatteryStatsImpl.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 42fc6132add4d..c00d2097f8262 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -6732,7 +6732,6 @@ public final class BatteryStatsImpl extends BatteryStats { Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE); m.arg1 = onBattery ? 1 : 0; mHandler.sendMessage(m); - mOnBattery = mOnBatteryInternal = onBattery; final long uptime = mSecUptime * 1000; final long realtime = mSecRealtime * 1000; @@ -6745,10 +6744,11 @@ public final class BatteryStatsImpl extends BatteryStats { boolean reset = false; if (!mNoAutoReset && (oldStatus == BatteryManager.BATTERY_STATUS_FULL || level >= 90 - || getLowDischargeAmountSinceCharge() >= 60) - || (getHighDischargeAmountSinceCharge() >= 60 - && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER)) { + || (mDischargeCurrentLevel < 20 && level >= 80) + || (getHighDischargeAmountSinceCharge() >= 200 + && mHistoryBuffer.dataSize() >= MAX_HISTORY_BUFFER))) { Slog.i(TAG, "Resetting battery stats: level=" + level + " status=" + oldStatus + + " dischargeLevel=" + mDischargeCurrentLevel + " lowAmount=" + getLowDischargeAmountSinceCharge() + " highAmount=" + getHighDischargeAmountSinceCharge()); // Before we write, collect a snapshot of the final aggregated @@ -6785,6 +6785,7 @@ public final class BatteryStatsImpl extends BatteryStats { reset = true; mNumDischargeStepDurations = 0; } + mOnBattery = mOnBatteryInternal = onBattery; mLastDischargeStepLevel = level; mMinDischargeStepLevel = level; mLastDischargeStepTime = -1; @@ -6812,6 +6813,7 @@ public final class BatteryStatsImpl extends BatteryStats { mDischargeAmountScreenOff = 0; updateTimeBasesLocked(true, !screenOn, uptime, realtime); } else { + mOnBattery = mOnBatteryInternal = onBattery; pullPendingStateUpdatesLocked(); mHistoryCur.batteryLevel = (byte)level; mHistoryCur.states |= HistoryItem.STATE_BATTERY_PLUGGED_FLAG;