Merge "Track CACHED procstate in BatteryStats" into tm-dev

This commit is contained in:
Dmitri Plotnikov
2022-03-14 19:42:07 +00:00
committed by Android (Google) Code Review
12 changed files with 143 additions and 72 deletions

View File

@@ -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 = {

View File

@@ -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;
}

View File

@@ -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);
}

View File

@@ -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);
}

View File

@@ -1929,18 +1929,26 @@ public class BatteryStatsImpl extends BatteryStats {
private final TimeBase mTimeBase;
private final LongMultiStateCounter mCounter;
private TimeMultiStateCounter(TimeBase timeBase, Parcel in, long timestampMs) {
private TimeMultiStateCounter(TimeBase timeBase, int stateCount, long timestampMs) {
this(timeBase, new LongMultiStateCounter(stateCount), timestampMs);
}
private TimeMultiStateCounter(TimeBase timeBase, LongMultiStateCounter counter,
long timestampMs) {
mTimeBase = timeBase;
mCounter = LongMultiStateCounter.CREATOR.createFromParcel(in);
mCounter = counter;
mCounter.setEnabled(mTimeBase.isRunning(), timestampMs);
timeBase.add(this);
}
private TimeMultiStateCounter(TimeBase timeBase, int stateCount, long timestampMs) {
mTimeBase = timeBase;
mCounter = new LongMultiStateCounter(stateCount);
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) {
@@ -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();

View File

@@ -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) {

View File

@@ -76,6 +76,7 @@ message BatteryUsageStatsAtomsProto {
FOREGROUND = 1;
BACKGROUND = 2;
FOREGROUND_SERVICE = 3;
CACHED = 4;
}
optional ProcessState process_state = 2;

View File

@@ -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;
}

View File

@@ -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")

View File

@@ -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,

View File

@@ -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);
}

View File

@@ -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,