diff options
author | Dianne Hackborn <hackbod@google.com> | 2014-09-12 17:15:52 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2014-09-12 17:15:52 -0700 |
commit | a7d0d557718d0feaa2760666cd95c66e2d88c551 (patch) | |
tree | ef31e457f5ecbce75f2cc99f684e452a7384fcaf | |
parent | 098116854e5b2500d71a1d7b5cce499edf31d287 (diff) | |
download | frameworks_base-a7d0d557718d0feaa2760666cd95c66e2d88c551.zip frameworks_base-a7d0d557718d0feaa2760666cd95c66e2d88c551.tar.gz frameworks_base-a7d0d557718d0feaa2760666cd95c66e2d88c551.tar.bz2 |
Work on issue #17477510: Time change notifications sent too often
This gets rid of the spam from the battery history, by not creating
an event unless the wall clock time has changed by more than
+/- 500ms.
We'll do the remaining work in MR1.
Change-Id: I8d1cc41b5504261033d3b0ccdcf9e7cf70df9d04
-rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 45a9dde..81705be 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -237,6 +237,9 @@ public final class BatteryStatsImpl extends BatteryStats { String mStartPlatformVersion; String mEndPlatformVersion; + long mLastRecordedClockTime; + long mLastRecordedClockRealtime; + long mUptime; long mUptimeStart; long mRealtime; @@ -2271,6 +2274,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (dataSize == 0) { // The history is currently empty; we need it to start with a time stamp. cur.currentTime = System.currentTimeMillis(); + mLastRecordedClockTime = cur.currentTime; + mLastRecordedClockRealtime = elapsedRealtimeMs; addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_RESET, cur); } addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur); @@ -2439,6 +2444,8 @@ public final class BatteryStatsImpl extends BatteryStats { mNumHistoryTagChars = 0; mHistoryBufferLastPos = -1; mHistoryOverflow = false; + mLastRecordedClockTime = 0; + mLastRecordedClockRealtime = 0; } public void updateTimeBasesLocked(boolean unplugged, boolean screenOff, long uptime, @@ -2498,6 +2505,18 @@ public final class BatteryStatsImpl extends BatteryStats { final long currentTime = System.currentTimeMillis(); final long elapsedRealtime = SystemClock.elapsedRealtime(); final long uptime = SystemClock.uptimeMillis(); + if (isStartClockTimeValid()) { + // Has the time changed sufficiently that it is really worth recording? + if (mLastRecordedClockTime != 0) { + long expectedClockTime = mLastRecordedClockTime + + (elapsedRealtime - mLastRecordedClockRealtime); + if (currentTime >= (expectedClockTime-500) + && currentTime <= (expectedClockTime+500)) { + // Not sufficiently changed, skip! + return; + } + } + } recordCurrentTimeChangeLocked(currentTime, elapsedRealtime, uptime); if (isStartClockTimeValid()) { mStartClockTime = currentTime; @@ -6821,6 +6840,8 @@ public final class BatteryStatsImpl extends BatteryStats { boolean reset) { mRecordingHistory = true; mHistoryCur.currentTime = System.currentTimeMillis(); + mLastRecordedClockTime = mHistoryCur.currentTime; + mLastRecordedClockRealtime = elapsedRealtimeMs; addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, reset ? HistoryItem.CMD_RESET : HistoryItem.CMD_CURRENT_TIME, mHistoryCur); @@ -6834,6 +6855,8 @@ public final class BatteryStatsImpl extends BatteryStats { final long uptimeMs) { if (mRecordingHistory) { mHistoryCur.currentTime = currentTime; + mLastRecordedClockTime = currentTime; + mLastRecordedClockRealtime = elapsedRealtimeMs; addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_CURRENT_TIME, mHistoryCur); mHistoryCur.currentTime = 0; |