diff options
| author | 2022-03-14 19:42:07 +0000 | |
|---|---|---|
| committer | 2022-03-14 19:42:07 +0000 | |
| commit | b79d6441df53d6c7eaa6e53f00bd9e10bb79da3c (patch) | |
| tree | 4b4834e4661898674e2199896e62f75663b4d1dd | |
| parent | cfe0ef548d25bda388c41ed8b8324f52d2efe0f2 (diff) | |
| parent | c311349874cdd1ebd534a1c203c0a1057e7dbd5c (diff) | |
Merge "Track CACHED procstate in BatteryStats" into tm-dev
12 files changed, 143 insertions, 72 deletions
diff --git a/core/java/android/os/BatteryConsumer.java b/core/java/android/os/BatteryConsumer.java index de76c8fab69b..f4ca1b50fe86 100644 --- a/core/java/android/os/BatteryConsumer.java +++ b/core/java/android/os/BatteryConsumer.java @@ -165,6 +165,7 @@ public abstract class BatteryConsumer { PROCESS_STATE_FOREGROUND, PROCESS_STATE_BACKGROUND, PROCESS_STATE_FOREGROUND_SERVICE, + PROCESS_STATE_CACHED, }) @Retention(RetentionPolicy.SOURCE) public @interface ProcessState { @@ -175,8 +176,9 @@ public abstract class BatteryConsumer { public static final int PROCESS_STATE_FOREGROUND = 1; public static final int PROCESS_STATE_BACKGROUND = 2; public static final int PROCESS_STATE_FOREGROUND_SERVICE = 3; + public static final int PROCESS_STATE_CACHED = 4; - public static final int PROCESS_STATE_COUNT = 4; + public static final int PROCESS_STATE_COUNT = 5; private static final String[] sProcessStateNames = new String[PROCESS_STATE_COUNT]; @@ -186,6 +188,7 @@ public abstract class BatteryConsumer { sProcessStateNames[PROCESS_STATE_FOREGROUND] = "fg"; sProcessStateNames[PROCESS_STATE_BACKGROUND] = "bg"; sProcessStateNames[PROCESS_STATE_FOREGROUND_SERVICE] = "fgs"; + sProcessStateNames[PROCESS_STATE_CACHED] = "cached"; } private static final int[] SUPPORTED_POWER_COMPONENTS_PER_PROCESS_STATE = { diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 5f9fdbfe7503..82631491eab3 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -680,6 +680,8 @@ public abstract class BatteryStats implements Parcelable { return BatteryConsumer.PROCESS_STATE_BACKGROUND; case BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE: return BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE; + case BatteryStats.Uid.PROCESS_STATE_CACHED: + return BatteryConsumer.PROCESS_STATE_CACHED; default: return BatteryConsumer.PROCESS_STATE_UNSPECIFIED; } diff --git a/core/java/android/os/PowerComponents.java b/core/java/android/os/PowerComponents.java index 605171208fc1..522807b83d04 100644 --- a/core/java/android/os/PowerComponents.java +++ b/core/java/android/os/PowerComponents.java @@ -292,6 +292,10 @@ class PowerComponents { procState = BatteryUsageStatsAtomsProto.BatteryConsumerData.PowerComponentUsageSlice .FOREGROUND_SERVICE; break; + case BatteryConsumer.PROCESS_STATE_CACHED: + procState = BatteryUsageStatsAtomsProto.BatteryConsumerData.PowerComponentUsageSlice + .CACHED; + break; default: throw new IllegalArgumentException("Unknown process state: " + processState); } diff --git a/core/java/android/os/UidBatteryConsumer.java b/core/java/android/os/UidBatteryConsumer.java index 77d1498e1597..91d231eb1c39 100644 --- a/core/java/android/os/UidBatteryConsumer.java +++ b/core/java/android/os/UidBatteryConsumer.java @@ -119,6 +119,8 @@ public final class UidBatteryConsumer extends BatteryConsumer { skipEmptyComponents); appendProcessStateData(sb, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE, skipEmptyComponents); + appendProcessStateData(sb, BatteryConsumer.PROCESS_STATE_CACHED, + skipEmptyComponents); pw.print(sb); } diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 52539566351b..a5937a647bac 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -1929,20 +1929,28 @@ public class BatteryStatsImpl extends BatteryStats { private final TimeBase mTimeBase; private final LongMultiStateCounter mCounter; - private TimeMultiStateCounter(TimeBase timeBase, Parcel in, long timestampMs) { - mTimeBase = timeBase; - mCounter = LongMultiStateCounter.CREATOR.createFromParcel(in); - mCounter.setEnabled(mTimeBase.isRunning(), timestampMs); - timeBase.add(this); + private TimeMultiStateCounter(TimeBase timeBase, int stateCount, long timestampMs) { + this(timeBase, new LongMultiStateCounter(stateCount), timestampMs); } - private TimeMultiStateCounter(TimeBase timeBase, int stateCount, long timestampMs) { + private TimeMultiStateCounter(TimeBase timeBase, LongMultiStateCounter counter, + long timestampMs) { mTimeBase = timeBase; - mCounter = new LongMultiStateCounter(stateCount); + mCounter = counter; mCounter.setEnabled(mTimeBase.isRunning(), timestampMs); timeBase.add(this); } + @Nullable + private static TimeMultiStateCounter readFromParcel(Parcel in, TimeBase timeBase, + int stateCount, long timestampMs) { + LongMultiStateCounter counter = LongMultiStateCounter.CREATOR.createFromParcel(in); + if (counter.getStateCount() != stateCount) { + return null; + } + return new TimeMultiStateCounter(timeBase, counter, timestampMs); + } + private void writeToParcel(Parcel out) { mCounter.writeToParcel(out, 0); } @@ -3510,11 +3518,8 @@ public class BatteryStatsImpl extends BatteryStats { private TimeMultiStateCounter readTimeMultiStateCounter(Parcel in, TimeBase timeBase) { if (in.readBoolean()) { - final TimeMultiStateCounter counter = - new TimeMultiStateCounter(timeBase, in, mClock.elapsedRealtime()); - if (counter.getStateCount() == BatteryConsumer.PROCESS_STATE_COUNT) { - return counter; - } + return TimeMultiStateCounter.readFromParcel(in, timeBase, + BatteryConsumer.PROCESS_STATE_COUNT, mClock.elapsedRealtime()); } return null; } @@ -3537,9 +3542,10 @@ public class BatteryStatsImpl extends BatteryStats { // invalid. TimeMultiStateCounter[] counters = new TimeMultiStateCounter[numCounters]; for (int i = 0; i < numCounters; i++) { - final TimeMultiStateCounter counter = - new TimeMultiStateCounter(timeBase, in, mClock.elapsedRealtime()); - if (counter.getStateCount() == BatteryConsumer.PROCESS_STATE_COUNT) { + final TimeMultiStateCounter counter = TimeMultiStateCounter.readFromParcel(in, + timeBase, BatteryConsumer.PROCESS_STATE_COUNT, + mClock.elapsedRealtime()); + if (counter != null) { counters[i] = counter; } else { valid = false; @@ -10744,11 +10750,9 @@ public class BatteryStatsImpl extends BatteryStats { = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); } if (in.readBoolean()) { - final TimeMultiStateCounter counter = - new TimeMultiStateCounter(mBsi.mOnBatteryTimeBase, in, timestampMs); - if (counter.getStateCount() == BatteryConsumer.PROCESS_STATE_COUNT) { - mMobileRadioActiveTime = counter; - } + mMobileRadioActiveTime = TimeMultiStateCounter.readFromParcel(in, + mBsi.mOnBatteryTimeBase, BatteryConsumer.PROCESS_STATE_COUNT, + timestampMs); } mMobileRadioActiveCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); @@ -10794,11 +10798,9 @@ public class BatteryStatsImpl extends BatteryStats { int stateCount = in.readInt(); if (stateCount != 0) { - final TimeMultiStateCounter counter = new TimeMultiStateCounter( - mBsi.mOnBatteryTimeBase, in, timestampMs); - if (stateCount == BatteryConsumer.PROCESS_STATE_COUNT) { - mCpuActiveTimeMs = counter; - } + mCpuActiveTimeMs = TimeMultiStateCounter.readFromParcel(in, + mBsi.mOnBatteryTimeBase, BatteryConsumer.PROCESS_STATE_COUNT, + timestampMs); } mCpuClusterTimesMs = new LongSamplingCounterArray(mBsi.mOnBatteryTimeBase, in); @@ -16887,14 +16889,18 @@ public class BatteryStatsImpl extends BatteryStats { mNextMaxDailyDeadlineMs = in.readLong(); mBatteryTimeToFullSeconds = in.readLong(); - mMeasuredEnergyStatsConfig = MeasuredEnergyStats.Config.createFromParcel(in); - - /** - * WARNING: Supported buckets may have changed across boots. Bucket mismatch is handled - * later when {@link #initMeasuredEnergyStatsLocked} is called. - */ - mGlobalMeasuredEnergyStats = MeasuredEnergyStats.createAndReadSummaryFromParcel( - mMeasuredEnergyStatsConfig, in); + final MeasuredEnergyStats.Config config = MeasuredEnergyStats.Config.createFromParcel(in); + final MeasuredEnergyStats measuredEnergyStats = + MeasuredEnergyStats.createAndReadSummaryFromParcel(mMeasuredEnergyStatsConfig, in); + if (config != null && Arrays.equals(config.getStateNames(), + getBatteryConsumerProcessStateNames())) { + /** + * WARNING: Supported buckets may have changed across boots. Bucket mismatch is handled + * later when {@link #initMeasuredEnergyStatsLocked} is called. + */ + mMeasuredEnergyStatsConfig = config; + mGlobalMeasuredEnergyStats = measuredEnergyStats; + } mStartCount++; @@ -16986,7 +16992,6 @@ public class BatteryStatsImpl extends BatteryStats { getScreenOffRpmTimerLocked(rpmName).readSummaryFromParcelLocked(in); } } - int NKW = in.readInt(); if (NKW > 10000) { throw new ParcelFormatException("File corrupt: too many kernel wake locks " + NKW); @@ -17114,11 +17119,9 @@ public class BatteryStatsImpl extends BatteryStats { u.mNetworkPacketActivityCounters[i].readSummaryFromParcelLocked(in); } if (in.readBoolean()) { - TimeMultiStateCounter counter = new TimeMultiStateCounter( - mOnBatteryTimeBase, in, elapsedRealtimeMs); - if (counter.getStateCount() == BatteryConsumer.PROCESS_STATE_COUNT) { - u.mMobileRadioActiveTime = counter; - } + u.mMobileRadioActiveTime = TimeMultiStateCounter.readFromParcel(in, + mOnBatteryTimeBase, BatteryConsumer.PROCESS_STATE_COUNT, + elapsedRealtimeMs); } u.mMobileRadioActiveCount.readSummaryFromParcelLocked(in); } @@ -17168,11 +17171,9 @@ public class BatteryStatsImpl extends BatteryStats { int stateCount = in.readInt(); if (stateCount != 0) { - final TimeMultiStateCounter counter = new TimeMultiStateCounter( - mOnBatteryTimeBase, in, mClock.elapsedRealtime()); - if (stateCount == BatteryConsumer.PROCESS_STATE_COUNT) { - u.mCpuActiveTimeMs = counter; - } + u.mCpuActiveTimeMs = TimeMultiStateCounter.readFromParcel(in, + mOnBatteryTimeBase, BatteryConsumer.PROCESS_STATE_COUNT, + mClock.elapsedRealtime()); } u.mCpuClusterTimesMs.readSummaryFromParcelLocked(in); @@ -18007,9 +18008,15 @@ public class BatteryStatsImpl extends BatteryStats { mLastWriteTimeMs = in.readLong(); mBatteryTimeToFullSeconds = in.readLong(); - mMeasuredEnergyStatsConfig = MeasuredEnergyStats.Config.createFromParcel(in); - mGlobalMeasuredEnergyStats = + + final MeasuredEnergyStats.Config config = MeasuredEnergyStats.Config.createFromParcel(in); + final MeasuredEnergyStats measuredEnergyStats = MeasuredEnergyStats.createFromParcel(mMeasuredEnergyStatsConfig, in); + if (config != null && Arrays.equals(config.getStateNames(), + getBatteryConsumerProcessStateNames())) { + mMeasuredEnergyStatsConfig = config; + mGlobalMeasuredEnergyStats = measuredEnergyStats; + } mRpmStats.clear(); int NRPMS = in.readInt(); diff --git a/core/java/com/android/internal/power/MeasuredEnergyStats.java b/core/java/com/android/internal/power/MeasuredEnergyStats.java index 7262e846d9b0..7fb8696a217d 100644 --- a/core/java/com/android/internal/power/MeasuredEnergyStats.java +++ b/core/java/com/android/internal/power/MeasuredEnergyStats.java @@ -194,6 +194,7 @@ public class MeasuredEnergyStats { return mSupportedMultiStateBuckets[index]; } + @NonNull public String[] getStateNames() { return mStateNames; } @@ -321,6 +322,10 @@ public class MeasuredEnergyStats { LongMultiStateCounter multiStateCounter = null; if (in.readBoolean()) { multiStateCounter = LongMultiStateCounter.CREATOR.createFromParcel(in); + if (mConfig == null + || multiStateCounter.getStateCount() != mConfig.getStateNames().length) { + multiStateCounter = null; + } } if (index < mAccumulatedChargeMicroCoulomb.length) { diff --git a/core/proto/android/os/batteryusagestats.proto b/core/proto/android/os/batteryusagestats.proto index cc90e05de744..856bc839aee5 100644 --- a/core/proto/android/os/batteryusagestats.proto +++ b/core/proto/android/os/batteryusagestats.proto @@ -76,6 +76,7 @@ message BatteryUsageStatsAtomsProto { FOREGROUND = 1; BACKGROUND = 2; FOREGROUND_SERVICE = 3; + CACHED = 4; } optional ProcessState process_state = 2; diff --git a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java index 6a53f6843d48..19bb718578a0 100644 --- a/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java +++ b/core/tests/batterystatstests/BatteryStatsViewer/src/com/android/frameworks/core/batterystatsviewer/BatteryConsumerData.java @@ -188,6 +188,9 @@ public class BatteryConsumerData { case BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE: label = "FGS"; break; + case BatteryConsumer.PROCESS_STATE_CACHED: + label = "cached"; + break; default: continue; } diff --git a/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java b/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java index 23b12cf3ea4b..fd08e3c789f7 100644 --- a/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java +++ b/core/tests/batterystatstests/BatteryUsageStatsProtoTests/src/com/android/internal/os/BatteryUsageStatsPulledTest.java @@ -242,13 +242,17 @@ public class BatteryUsageStatsPulledTest { BatteryConsumer.PROCESS_STATE_BACKGROUND); final BatteryConsumer.Key keyFgs = uidBuilder.getKey(BatteryConsumer.POWER_COMPONENT_CPU, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE); + final BatteryConsumer.Key keyCached = uidBuilder.getKey(BatteryConsumer.POWER_COMPONENT_CPU, + BatteryConsumer.PROCESS_STATE_CACHED); uidBuilder.setConsumedPower(keyFg, 9100, BatteryConsumer.POWER_MODEL_POWER_PROFILE) .setUsageDurationMillis(keyFg, 8100) .setConsumedPower(keyBg, 9200, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) .setUsageDurationMillis(keyBg, 8200) .setConsumedPower(keyFgs, 9300, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) - .setUsageDurationMillis(keyFgs, 8300); + .setUsageDurationMillis(keyFgs, 8300) + .setConsumedPower(keyCached, 9400, BatteryConsumer.POWER_MODEL_MEASURED_ENERGY) + .setUsageDurationMillis(keyFgs, 8400); builder.getOrCreateUidBatteryConsumerBuilder(batteryStatsUid1) .setPackageWithHighestDrain("myPackage1") diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java index 5adc9bdf0d00..483224cf353d 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java @@ -20,6 +20,7 @@ import static android.os.BatteryConsumer.POWER_COMPONENT_ANY; import static android.os.BatteryConsumer.POWER_MODEL_MEASURED_ENERGY; import static android.os.BatteryConsumer.POWER_MODEL_UNDEFINED; import static android.os.BatteryConsumer.PROCESS_STATE_BACKGROUND; +import static android.os.BatteryConsumer.PROCESS_STATE_CACHED; import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND; import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE; @@ -83,7 +84,7 @@ public class BatteryUsageStatsTest { final Parcel parcel = Parcel.obtain(); parcel.writeParcelable(outBatteryUsageStats, 0); - assertThat(parcel.dataSize()).isLessThan(7000); + assertThat(parcel.dataSize()).isLessThan(8000); parcel.setDataPosition(0); @@ -155,10 +156,11 @@ public class BatteryUsageStatsTest { assertThat(dump).contains("cpu(fg): 2333 apps: 1333 duration: 3s 332ms"); assertThat(dump).contains("cpu(bg): 2444 apps: 1444 duration: 4s 442ms"); assertThat(dump).contains("cpu(fgs): 2555 apps: 1555 duration: 5s 552ms"); + assertThat(dump).contains("cpu(cached): 123 apps: 123 duration: 456ms"); assertThat(dump).contains("FOO: 20200 apps: 10200 duration: 20s 400ms"); - assertThat(dump).contains("UID 271: 1200 fg: 1777 bg: 1888 fgs: 1999 ( screen=300 " - + "cpu=400 (600ms) cpu:fg=1777 (7s 771ms) cpu:bg=1888 (8s 881ms) " - + "cpu:fgs=1999 (9s 991ms) FOO=500 )"); + assertThat(dump).contains("UID 271: 1200 fg: 1777 bg: 1888 fgs: 1999 cached: 123 " + + "( screen=300 cpu=400 (600ms) cpu:fg=1777 (7s 771ms) cpu:bg=1888 (8s 881ms) " + + "cpu:fgs=1999 (9s 991ms) cpu:cached=123 (456ms) FOO=500 )"); assertThat(dump).contains("User 42: 30.0 ( cpu=10.0 (30ms) FOO=20.0 )"); } @@ -193,13 +195,15 @@ public class BatteryUsageStatsTest { 5321, 7432, 423, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 745, POWER_MODEL_UNDEFINED, 956, 1167, 1478, - true, 3554, 3776, 3998, 3554, 15542, 3776, 17762, 3998, 19982); + true, 3554, 3776, 3998, 444, 3554, 15542, 3776, 17762, 3998, 19982, + 444, 1110); } else if (uidBatteryConsumer.getUid() == APP_UID2) { assertUidBatteryConsumer(uidBatteryConsumer, 1332, "bar", 1111, 2222, 333, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 444, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 555, 666, 777, - true, 1777, 1888, 1999, 1777, 7771, 1888, 8881, 1999, 9991); + true, 1777, 1888, 1999, 321, 1777, 7771, 1888, 8881, 1999, 9991, + 321, 654); } else { fail("Unexpected UID " + uidBatteryConsumer.getUid()); } @@ -267,17 +271,17 @@ public class BatteryUsageStatsTest { 1000, 2000, 300, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 400, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 500, 600, 800, - 1777, 7771, 1888, 8881, 1999, 9991); + 1777, 7771, 1888, 8881, 1999, 9991, 123, 456); addAggregateBatteryConsumer(builder, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS, 0, 10100, 10200, 10300, 10400, - 1333, 3331, 1444, 4441, 1555, 5551); + 1333, 3331, 1444, 4441, 1555, 5551, 123, 456); addAggregateBatteryConsumer(builder, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE, 30000, 20100, 20200, 20300, 20400, - 2333, 3332, 2444, 4442, 2555, 5552); + 2333, 3332, 2444, 4442, 2555, 5552, 123, 456); if (includeUserBatteryConsumer) { builder.getOrCreateUserBatteryConsumerBuilder(USER_ID) @@ -310,23 +314,23 @@ public class BatteryUsageStatsTest { 4321, 5432, 123, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 345, POWER_MODEL_MEASURED_ENERGY, 456, 567, 678, - 1777, 7771, 1888, 8881, 1999, 9991); + 1777, 7771, 1888, 8881, 1999, 9991, 321, 654); addUidBatteryConsumer(builder, batteryStats, APP_UID2, "bar", 1111, 2222, 333, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 444, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 555, 666, 777, - 1777, 7771, 1888, 8881, 1999, 9991); + 1777, 7771, 1888, 8881, 1999, 9991, 321, 654); addAggregateBatteryConsumer(builder, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS, 0, 10123, 10234, 10345, 10456, - 4333, 3334, 5444, 4445, 6555, 5556); + 4333, 3334, 5444, 4445, 6555, 5556, 321, 654); addAggregateBatteryConsumer(builder, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE, 12345, 20111, 20222, 20333, 20444, - 7333, 3337, 8444, 4448, 9555, 5559); + 7333, 3337, 8444, 4448, 9555, 5559, 123, 456); return builder; } @@ -337,7 +341,7 @@ public class BatteryUsageStatsTest { int screenPowerModel, double cpuPower, int cpuPowerModel, double customComponentPower, int cpuDuration, int customComponentDuration, double cpuPowerForeground, int cpuDurationForeground, double cpuPowerBackground, int cpuDurationBackground, - double cpuPowerFgs, int cpuDurationFgs) { + double cpuPowerFgs, int cpuDurationFgs, double cpuPowerCached, long cpuDurationCached) { final BatteryStatsImpl.Uid batteryStatsUid = batteryStats.getUidStatsLocked(uid); final UidBatteryConsumer.Builder uidBuilder = builder.getOrCreateUidBatteryConsumerBuilder(batteryStatsUid); @@ -365,6 +369,9 @@ public class BatteryUsageStatsTest { final BatteryConsumer.Key cpuFgsKey = uidBuilder.getKey( BatteryConsumer.POWER_COMPONENT_CPU, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE); + final BatteryConsumer.Key cachedKey = uidBuilder.getKey( + BatteryConsumer.POWER_COMPONENT_CPU, + BatteryConsumer.PROCESS_STATE_CACHED); uidBuilder .setConsumedPower(cpuFgKey, cpuPowerForeground, BatteryConsumer.POWER_MODEL_POWER_PROFILE) @@ -374,7 +381,10 @@ public class BatteryUsageStatsTest { .setUsageDurationMillis(cpuBgKey, cpuDurationBackground) .setConsumedPower(cpuFgsKey, cpuPowerFgs, BatteryConsumer.POWER_MODEL_POWER_PROFILE) - .setUsageDurationMillis(cpuFgsKey, cpuDurationFgs); + .setUsageDurationMillis(cpuFgsKey, cpuDurationFgs) + .setConsumedPower(cachedKey, cpuPowerCached, + BatteryConsumer.POWER_MODEL_POWER_PROFILE) + .setUsageDurationMillis(cachedKey, cpuDurationCached); } } @@ -382,7 +392,7 @@ public class BatteryUsageStatsTest { double consumedPower, int cpuPower, int customComponentPower, int cpuDuration, int customComponentDuration, double cpuPowerForeground, long cpuDurationForeground, double cpuPowerBackground, long cpuDurationBackground, double cpuPowerFgs, - long cpuDurationFgs) { + long cpuDurationFgs, double cpuPowerCached, long cpuDurationCached) { final AggregateBatteryConsumer.Builder aggBuilder = builder.getAggregateBatteryConsumerBuilder(scope) .setConsumedPower(consumedPower) @@ -406,6 +416,9 @@ public class BatteryUsageStatsTest { final BatteryConsumer.Key cpuFgsKey = aggBuilder.getKey( BatteryConsumer.POWER_COMPONENT_CPU, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE); + final BatteryConsumer.Key cpuCachedKey = aggBuilder.getKey( + BatteryConsumer.POWER_COMPONENT_CPU, + BatteryConsumer.PROCESS_STATE_CACHED); aggBuilder .setConsumedPower(cpuFgKey, cpuPowerForeground, BatteryConsumer.POWER_MODEL_POWER_PROFILE) @@ -415,7 +428,10 @@ public class BatteryUsageStatsTest { .setUsageDurationMillis(cpuBgKey, cpuDurationBackground) .setConsumedPower(cpuFgsKey, cpuPowerFgs, BatteryConsumer.POWER_MODEL_POWER_PROFILE) - .setUsageDurationMillis(cpuFgsKey, cpuDurationFgs); + .setUsageDurationMillis(cpuFgsKey, cpuDurationFgs) + .setConsumedPower(cpuCachedKey, cpuPowerCached, + BatteryConsumer.POWER_MODEL_POWER_PROFILE) + .setUsageDurationMillis(cpuCachedKey, cpuDurationCached); } } @@ -432,7 +448,7 @@ public class BatteryUsageStatsTest { 1000, 2000, 300, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 400, BatteryConsumer.POWER_MODEL_POWER_PROFILE, 500, 600, 800, - true, 1777, 1888, 1999, 1777, 7771, 1888, 8881, 1999, 9991); + true, 1777, 1888, 1999, 123, 1777, 7771, 1888, 8881, 1999, 9991, 123, 456); } else { fail("Unexpected UID " + uidBatteryConsumer.getUid()); } @@ -484,8 +500,10 @@ public class BatteryUsageStatsTest { int cpuPowerModel, double customComponentPower, int cpuDuration, int customComponentDuration, boolean processStateDataIncluded, double totalPowerForeground, double totalPowerBackground, double totalPowerFgs, - double cpuPowerForeground, int cpuDurationForeground, double cpuPowerBackground, - int cpuDurationBackground, double cpuPowerFgs, int cpuDurationFgs) { + double totalPowerCached, double cpuPowerForeground, int cpuDurationForeground, + double cpuPowerBackground, + int cpuDurationBackground, double cpuPowerFgs, int cpuDurationFgs, + int cpuPowerCached, int cpuDurationCached) { assertThat(uidBatteryConsumer.getConsumedPower()).isEqualTo(consumedPower); assertThat(uidBatteryConsumer.getPackageWithHighestDrain()).isEqualTo( packageWithHighestDrain); @@ -525,6 +543,10 @@ public class BatteryUsageStatsTest { new BatteryConsumer.Dimensions(POWER_COMPONENT_ANY, PROCESS_STATE_FOREGROUND_SERVICE))) .isEqualTo(totalPowerFgs); + assertThat(uidBatteryConsumer.getConsumedPower( + new BatteryConsumer.Dimensions(POWER_COMPONENT_ANY, + PROCESS_STATE_CACHED))) + .isEqualTo(totalPowerCached); } final BatteryConsumer.Key cpuFgKey = uidBatteryConsumer.getKey( @@ -563,6 +585,19 @@ public class BatteryUsageStatsTest { } else { assertThat(cpuFgsKey).isNotNull(); } + + final BatteryConsumer.Key cachedKey = uidBatteryConsumer.getKey( + BatteryConsumer.POWER_COMPONENT_CPU, + BatteryConsumer.PROCESS_STATE_CACHED); + if (processStateDataIncluded) { + assertThat(cachedKey).isNotNull(); + assertThat(uidBatteryConsumer.getConsumedPower(cachedKey)) + .isEqualTo(cpuPowerCached); + assertThat(uidBatteryConsumer.getUsageDurationMillis(cachedKey)) + .isEqualTo(cpuDurationCached); + } else { + assertThat(cpuFgsKey).isNotNull(); + } } private void assertUserBatteryConsumer(UserBatteryConsumer userBatteryConsumer, diff --git a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java index 448f6664c2fa..fdbf071b7bba 100644 --- a/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BluetoothPowerCalculatorTest.java @@ -145,10 +145,14 @@ public class BluetoothPowerCalculatorTest { final BatteryConsumer.Key fgs = uidConsumer.getKey( BatteryConsumer.POWER_COMPONENT_BLUETOOTH, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE); + final BatteryConsumer.Key cached = uidConsumer.getKey( + BatteryConsumer.POWER_COMPONENT_BLUETOOTH, + BatteryConsumer.PROCESS_STATE_CACHED); assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(0.081); assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(0.0416666); assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0); + assertThat(uidConsumer.getConsumedPower(cached)).isWithin(PRECISION).of(0); } @Test @@ -261,10 +265,14 @@ public class BluetoothPowerCalculatorTest { final BatteryConsumer.Key fgs = uidConsumer.getKey( BatteryConsumer.POWER_COMPONENT_BLUETOOTH, BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE); + final BatteryConsumer.Key cached = uidConsumer.getKey( + BatteryConsumer.POWER_COMPONENT_BLUETOOTH, + BatteryConsumer.PROCESS_STATE_CACHED); assertThat(uidConsumer.getConsumedPower(foreground)).isWithin(PRECISION).of(0.4965352); assertThat(uidConsumer.getConsumedPower(background)).isWithin(PRECISION).of(0.3255208); assertThat(uidConsumer.getConsumedPower(fgs)).isWithin(PRECISION).of(0); + assertThat(uidConsumer.getConsumedPower(cached)).isWithin(PRECISION).of(0); } diff --git a/services/core/java/com/android/server/am/AppBatteryTracker.java b/services/core/java/com/android/server/am/AppBatteryTracker.java index 7cd45fed1498..ea1e3357c4dc 100644 --- a/services/core/java/com/android/server/am/AppBatteryTracker.java +++ b/services/core/java/com/android/server/am/AppBatteryTracker.java @@ -28,7 +28,6 @@ import static android.app.usage.UsageStatsManager.REASON_SUB_USAGE_USER_INTERACT import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.BatteryConsumer.POWER_COMPONENT_ANY; import static android.os.BatteryConsumer.PROCESS_STATE_BACKGROUND; -import static android.os.BatteryConsumer.PROCESS_STATE_COUNT; import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND; import static android.os.BatteryConsumer.PROCESS_STATE_FOREGROUND_SERVICE; import static android.os.BatteryConsumer.PROCESS_STATE_UNSPECIFIED; @@ -38,7 +37,6 @@ import static android.util.TimeUtils.formatTime; import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.AppRestrictionController.DEVICE_CONFIG_SUBNAMESPACE_PREFIX; -import static com.android.server.am.BaseAppStateTracker.ONE_MINUTE; import android.annotation.NonNull; import android.annotation.Nullable; @@ -71,7 +69,6 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.server.am.AppBatteryTracker.AppBatteryPolicy; import com.android.server.am.AppRestrictionController.UidBatteryUsageProvider; -import com.android.server.am.BaseAppStateTracker.Injector; import com.android.server.pm.UserManagerInternal; import java.io.PrintWriter; @@ -684,7 +681,7 @@ final class AppBatteryTracker extends BaseAppStateTracker<AppBatteryPolicy> static final int BATTERY_USAGE_INDEX_FOREGROUND = PROCESS_STATE_FOREGROUND; static final int BATTERY_USAGE_INDEX_BACKGROUND = PROCESS_STATE_BACKGROUND; static final int BATTERY_USAGE_INDEX_FOREGROUND_SERVICE = PROCESS_STATE_FOREGROUND_SERVICE; - static final int BATTERY_USAGE_COUNT = PROCESS_STATE_COUNT; + static final int BATTERY_USAGE_COUNT = 4; static final Dimensions[] BATT_DIMENS = new Dimensions[] { new Dimensions(AppBatteryPolicy.DEFAULT_BG_CURRENT_DRAIN_POWER_COMPONENTS, |