diff options
| -rw-r--r-- | core/java/android/os/BatteryStats.java | 36 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 10 |
2 files changed, 28 insertions, 18 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 6d44330934bc..cea5715d89e7 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -3667,25 +3667,29 @@ public abstract class BatteryStats implements Parcelable { 0 /* old cpu power, keep for compatibility */); } - final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which); - // If total cpuFreqTimes is null, then we don't need to check for screenOffCpuFreqTimes. - if (cpuFreqTimeMs != null) { - sb.setLength(0); - for (int i = 0; i < cpuFreqTimeMs.length; ++i) { - sb.append((i == 0 ? "" : ",") + cpuFreqTimeMs[i]); - } - final long[] screenOffCpuFreqTimeMs = u.getScreenOffCpuFreqTimes(which); - if (screenOffCpuFreqTimeMs != null) { - for (int i = 0; i < screenOffCpuFreqTimeMs.length; ++i) { - sb.append("," + screenOffCpuFreqTimeMs[i]); - } - } else { + // If the cpuFreqs is null, then don't bother checking for cpu freq times. + if (cpuFreqs != null) { + final long[] cpuFreqTimeMs = u.getCpuFreqTimes(which); + // If total cpuFreqTimes is null, then we don't need to check for + // screenOffCpuFreqTimes. + if (cpuFreqTimeMs != null && cpuFreqTimeMs.length == cpuFreqs.length) { + sb.setLength(0); for (int i = 0; i < cpuFreqTimeMs.length; ++i) { - sb.append(",0"); + sb.append((i == 0 ? "" : ",") + cpuFreqTimeMs[i]); + } + final long[] screenOffCpuFreqTimeMs = u.getScreenOffCpuFreqTimes(which); + if (screenOffCpuFreqTimeMs != null) { + for (int i = 0; i < screenOffCpuFreqTimeMs.length; ++i) { + sb.append("," + screenOffCpuFreqTimeMs[i]); + } + } else { + for (int i = 0; i < cpuFreqTimeMs.length; ++i) { + sb.append(",0"); + } } + dumpLine(pw, uid, category, CPU_TIMES_AT_FREQ_DATA, UID_TIMES_TYPE_ALL, + cpuFreqTimeMs.length, sb.toString()); } - dumpLine(pw, uid, category, CPU_TIMES_AT_FREQ_DATA, UID_TIMES_TYPE_ALL, - cpuFreqTimeMs.length, sb.toString()); } final ArrayMap<String, ? extends BatteryStats.Uid.Proc> processStats diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 611c4b8ffdae..41fc0650d739 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -1063,6 +1063,10 @@ public class BatteryStatsImpl extends BatteryStats { } } + public int getSize() { + return mCounts == null ? 0 : mCounts.length; + } + /** * Clear state of this counter. */ @@ -10526,11 +10530,13 @@ public class BatteryStatsImpl extends BatteryStats { return; } final Uid u = getUidStatsLocked(uid); - if (u.mCpuFreqTimeMs == null) { + if (u.mCpuFreqTimeMs == null + || u.mCpuFreqTimeMs.getSize() != cpuFreqTimeMs.length) { u.mCpuFreqTimeMs = new LongSamplingCounterArray(mOnBatteryTimeBase); } u.mCpuFreqTimeMs.addCountLocked(cpuFreqTimeMs); - if (u.mScreenOffCpuFreqTimeMs == null) { + if (u.mScreenOffCpuFreqTimeMs == null + || u.mScreenOffCpuFreqTimeMs.getSize() != cpuFreqTimeMs.length) { u.mScreenOffCpuFreqTimeMs = new LongSamplingCounterArray( mOnBatteryScreenOffTimeBase); } |