From 69bdecb371cb4ab7d59603b9175aacccdbc96b1a Mon Sep 17 00:00:00 2001 From: Jing Ji Date: Thu, 31 Mar 2022 23:26:28 -0700 Subject: [PATCH] Coalesce the shared GID battery usage into its real UID Also skip isolated UIDs as they've been attributed to their parent processes' battery usage. Bug: 203105544 Test: atest FrameworksMockingServicesTests:BackgroundRestrictionTest Test: manual - adb shell dumpsys activity -a Change-Id: I16a5537efe7fa8728c5fc7dca79bcc6fc717a161 --- .../android/server/am/AppBatteryTracker.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java index 0cbc7ad404f57..9c2a38c97a928 100644 --- a/services/core/java/com/android/server/am/AppBatteryTracker.java +++ b/services/core/java/com/android/server/am/AppBatteryTracker.java @@ -546,7 +546,19 @@ final class AppBatteryTracker extends BaseAppStateTracker for (UidBatteryConsumer uidConsumer : uidConsumers) { // TODO: b/200326767 - as we are not supporting per proc state attribution yet, // we couldn't distinguish between a real FGS vs. a bound FGS proc state. - final int uid = uidConsumer.getUid(); + final int rawUid = uidConsumer.getUid(); + if (UserHandle.isIsolated(rawUid)) { + // Isolated processes should have been attributed to their parent processes. + continue; + } + int uid = rawUid; + // Keep the logic in sync with BatteryAppListPreferenceController.java + // Check if this UID is a shared GID. If so, we combine it with the OWNER's + // actual app UID. + final int sharedAppId = UserHandle.getAppIdFromSharedAppGid(uid); + if (sharedAppId > 0) { + uid = UserHandle.getUid(UserHandle.USER_SYSTEM, sharedAppId); + } final BatteryUsage bgUsage = new BatteryUsage(uidConsumer, bgPolicy) .scale(scale); int index = buf.indexOfKey(uid); @@ -557,8 +569,11 @@ final class AppBatteryTracker extends BaseAppStateTracker before.add(bgUsage); } if (DEBUG_BACKGROUND_BATTERY_TRACKER) { - Slog.i(TAG, "updateBatteryUsageStatsOnceInternal uid=" + uid + Slog.i(TAG, "updateBatteryUsageStatsOnceInternal uid=" + rawUid + ", bgUsage=" + bgUsage + + (rawUid == uid ? "" + : ", realUid=" + uid + + ", realUsage=" + buf.get(uid)) + ", start=" + start + ", end=" + end); }