summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dmitri Plotnikov <dplotnikov@google.com> 2022-03-10 18:17:38 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-03-10 18:17:38 +0000
commit27df8ca3654ea9d470bfcd4e9f476ca48b7edf12 (patch)
tree59f9a0470d13eb5d9d697d01d9dc9f4cafdfde7c
parentd8c04441cea5d0d45a4cf26a7bac38c349c4e115 (diff)
parent70a3d9e8a4c4e75b71193fb255ae0dd72d72274e (diff)
Merge "Fold SDK Sandbox UID battery stats into parent UID stats" into tm-dev
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java24
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryStatsSensorTest.java2
-rw-r--r--services/core/java/com/android/server/am/AppProfiler.java3
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);
}