summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java17
1 files changed, 15 insertions, 2 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 1b0d3323b3d0..46942bf429c5 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -10175,7 +10175,16 @@ public class BatteryStatsImpl extends BatteryStats {
new KernelUidCpuTimeReader.Callback() {
@Override
public void onUidCpuTime(int uid, long userTimeUs, long systemTimeUs) {
- final Uid u = getUidStatsLocked(mapUid(uid));
+ uid = mapUid(uid);
+ if (Process.isIsolated(uid)) {
+ // This could happen if the isolated uid mapping was removed before
+ // that process was actually killed.
+ mKernelUidCpuTimeReader.removeUid(uid);
+ Slog.d(TAG, "Got readings for an isolated uid with"
+ + " no mapping to owning uid: " + uid);
+ return;
+ }
+ final Uid u = getUidStatsLocked(uid);
// Accumulate the total system and user time.
mTempTotalCpuUserTimeUs += userTimeUs;
@@ -10340,7 +10349,11 @@ public class BatteryStatsImpl extends BatteryStats {
@Override
public void onUidCpuFreqTime(int uid, long[] cpuFreqTimeMs) {
- final Uid u = getUidStatsLocked(mapUid(uid));
+ uid = mapUid(uid);
+ if (Process.isIsolated(uid)) {
+ return;
+ }
+ final Uid u = getUidStatsLocked(uid);
if (u.mCpuFreqTimeMs == null) {
u.mCpuFreqTimeMs = new LongSamplingCounterArray(mOnBatteryTimeBase);
}