diff options
author | 2022-03-10 18:17:38 +0000 | |
---|---|---|
committer | 2022-03-10 18:17:38 +0000 | |
commit | 27df8ca3654ea9d470bfcd4e9f476ca48b7edf12 (patch) | |
tree | 59f9a0470d13eb5d9d697d01d9dc9f4cafdfde7c | |
parent | d8c04441cea5d0d45a4cf26a7bac38c349c4e115 (diff) | |
parent | 70a3d9e8a4c4e75b71193fb255ae0dd72d72274e (diff) |
Merge "Fold SDK Sandbox UID battery stats into parent UID stats" into tm-dev
3 files changed, 18 insertions, 11 deletions
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 70b96392b0e5..52539566351b 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -546,9 +546,9 @@ public class BatteryStatsImpl extends BatteryStats { final LongArrayMultiStateCounter onBatteryScreenOffCounter = u.getProcStateScreenOffTimeCounter().getCounter(); - if (uid == parentUid) { - mKernelSingleUidTimeReader.addDelta(uid, onBatteryCounter, timestampMs); - mKernelSingleUidTimeReader.addDelta(uid, onBatteryScreenOffCounter, + if (uid == parentUid || Process.isSdkSandboxUid(uid)) { + mKernelSingleUidTimeReader.addDelta(parentUid, onBatteryCounter, timestampMs); + mKernelSingleUidTimeReader.addDelta(parentUid, onBatteryScreenOffCounter, timestampMs); } else { Uid.ChildUid childUid = u.getChildUid(uid); @@ -4560,7 +4560,10 @@ public class BatteryStatsImpl extends BatteryStats { mIsolatedUidRefCounts.put(uid, refCount + 1); } - public int mapUid(int uid) { + private int mapUid(int uid) { + if (Process.isSdkSandboxUid(uid)) { + return Process.getAppUidForSdkSandboxUid(uid); + } int isolated = mIsolatedUids.get(uid, -1); return isolated > 0 ? isolated : uid; } @@ -4656,16 +4659,18 @@ public class BatteryStatsImpl extends BatteryStats { long elapsedRealtimeMs, long uptimeMs) { int parentUid = mapUid(uid); if (uid != parentUid) { - // Isolated UIDs process state is already rolled up into parent, so no need to track - // Otherwise the parent's process state will get downgraded incorrectly - return; + if (Process.isIsolated(uid)) { + // Isolated UIDs process state is already rolled up into parent, so no need to track + // Otherwise the parent's process state will get downgraded incorrectly + return; + } } // TODO(b/155216561): It is possible for isolated uids to be in a higher // state than its parent uid. We should track the highest state within the union of host // and isolated uids rather than only the parent uid. FrameworkStatsLog.write(FrameworkStatsLog.UID_PROCESS_STATE_CHANGED, uid, ActivityManager.processStateAmToProto(state)); - getUidStatsLocked(uid, elapsedRealtimeMs, uptimeMs) + getUidStatsLocked(parentUid, elapsedRealtimeMs, uptimeMs) .updateUidProcessStateLocked(state, elapsedRealtimeMs, uptimeMs); } @@ -15970,6 +15975,9 @@ public class BatteryStatsImpl extends BatteryStats { public Uid getUidStatsLocked(int uid, long elapsedRealtimeMs, long uptimeMs) { Uid u = mUidStats.get(uid); if (u == null) { + if (Process.isSdkSandboxUid(uid)) { + Log.wtf(TAG, "Tracking an SDK Sandbox UID"); + } u = new Uid(this, uid, elapsedRealtimeMs, uptimeMs); mUidStats.put(uid, u); } diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java index 0e394c1ec7fd..bfb34499984b 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java @@ -30,6 +30,7 @@ import junit.framework.TestCase; public class BatteryStatsSensorTest extends TestCase { private static final int UID = 10500; + private static final int UID_2 = 10501; // second uid for testing pool usage private static final int SENSOR_ID = -10000; @SmallTest @@ -239,7 +240,6 @@ public class BatteryStatsSensorTest extends TestCase { @SmallTest public void testPooledBackgroundUsage() throws Exception { - final int UID_2 = 20000; // second uid for testing pool usage final MockClock clocks = new MockClock(); MockBatteryStatsImpl bi = new MockBatteryStatsImpl(clocks); bi.mForceOnBattery = true; diff --git a/services/core/java/com/android/server/am/AppProfiler.java b/services/core/java/com/android/server/am/AppProfiler.java index d6a4cf650cba..ac0e22032b65 100644 --- a/services/core/java/com/android/server/am/AppProfiler.java +++ b/services/core/java/com/android/server/am/AppProfiler.java @@ -1886,8 +1886,7 @@ public class AppProfiler { BatteryStatsImpl.Uid.Proc ps = st.batteryStats; if (ps == null || !ps.isActive()) { st.batteryStats = ps = bstats.getProcessStatsLocked( - bstats.mapUid(st.uid), st.name, - elapsedRealtime, uptime); + st.uid, st.name, elapsedRealtime, uptime); } ps.addCpuTimeLocked(st.rel_utime, st.rel_stime); } |