Merge "Reclassify FGS and BOUND_TOP as "background" in BatteryUsageStats" into tm-qpr-dev

This commit is contained in:
Dmitri Plotnikov
2023-02-10 18:49:04 +00:00
committed by Android (Google) Code Review
5 changed files with 59 additions and 34 deletions

View File

@@ -649,8 +649,11 @@ public abstract class BatteryStats implements Parcelable {
return Uid.PROCESS_STATE_NONEXISTENT;
} else if (procState == ActivityManager.PROCESS_STATE_TOP) {
return Uid.PROCESS_STATE_TOP;
} else if (ActivityManager.isForegroundService(procState)) {
// State when app has put itself in the foreground.
} else if (procState == ActivityManager.PROCESS_STATE_BOUND_TOP) {
return Uid.PROCESS_STATE_BACKGROUND;
} else if (procState == ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) {
return Uid.PROCESS_STATE_FOREGROUND_SERVICE;
} else if (procState == ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE) {
return Uid.PROCESS_STATE_FOREGROUND_SERVICE;
} else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
// Persistent and other foreground states go here.

View File

@@ -51,8 +51,7 @@ public final class UidBatteryConsumer extends BatteryConsumer {
}
/**
* The state of an application when it is either running a foreground (top) activity
* or a foreground service.
* The state of an application when it is either running a foreground (top) activity.
*/
public static final int STATE_FOREGROUND = 0;
@@ -64,7 +63,8 @@ public final class UidBatteryConsumer extends BatteryConsumer {
* {@link android.app.ActivityManager#PROCESS_STATE_TRANSIENT_BACKGROUND},
* {@link android.app.ActivityManager#PROCESS_STATE_BACKUP},
* {@link android.app.ActivityManager#PROCESS_STATE_SERVICE},
* {@link android.app.ActivityManager#PROCESS_STATE_RECEIVER}.
* {@link android.app.ActivityManager#PROCESS_STATE_RECEIVER},
* {@link android.app.ActivityManager#PROCESS_STATE_FOREGROUND_SERVICE}.
*/
public static final int STATE_BACKGROUND = 1;

View File

@@ -298,18 +298,16 @@ public class BatteryUsageStatsProvider {
BatteryStats.Uid.PROCESS_STATE_FOREGROUND, realtimeUs,
BatteryStats.STATS_SINCE_CHARGED);
totalForegroundDurationUs += uid.getProcessStateTime(
BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, realtimeUs,
BatteryStats.STATS_SINCE_CHARGED);
return totalForegroundDurationUs / 1000;
}
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND, realtimeUs,
BatteryStats.STATS_SINCE_CHARGED) / 1000;
return (uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
realtimeUs, BatteryStats.STATS_SINCE_CHARGED)
+ uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
realtimeUs, BatteryStats.STATS_SINCE_CHARGED))
/ 1000;
}
private BatteryUsageStats getAggregatedBatteryUsageStats(BatteryUsageStatsQuery query) {
final boolean includePowerModels = (query.getFlags()
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;

View File

@@ -360,6 +360,7 @@ public class BatteryStatsNoteTest extends TestCase {
// map of ActivityManager process states and how long to simulate run time in each state
Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP, 1111);
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_TOP, 7382);
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE, 1234);
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP_SLEEPING, 7531);
@@ -396,7 +397,8 @@ public class BatteryStatsNoteTest extends TestCase {
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
elapsedTimeUs, STATS_SINCE_CHARGED);
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
@@ -406,8 +408,7 @@ public class BatteryStatsNoteTest extends TestCase {
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND,
elapsedTimeUs, STATS_SINCE_CHARGED);
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
@@ -415,7 +416,8 @@ public class BatteryStatsNoteTest extends TestCase {
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_SERVICE)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_RECEIVER);
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_RECEIVER)
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_TOP);
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,

View File

@@ -78,9 +78,9 @@ public class BatteryUsageStatsProviderTest {
batteryUsageStats.getUidBatteryConsumers();
final UidBatteryConsumer uidBatteryConsumer = uidBatteryConsumers.get(0);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
.isEqualTo(60 * MINUTE_IN_MS);
.isEqualTo(20 * MINUTE_IN_MS);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
.isEqualTo(10 * MINUTE_IN_MS);
.isEqualTo(40 * MINUTE_IN_MS);
assertThat(uidBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_AUDIO))
.isWithin(PRECISION).of(2.0);
assertThat(
@@ -121,22 +121,44 @@ public class BatteryUsageStatsProviderTest {
private BatteryStatsImpl prepareBatteryStats() {
BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
batteryStats.noteActivityResumedLocked(APP_UID,
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_TOP,
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
batteryStats.noteActivityPausedLocked(APP_UID,
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_SERVICE,
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE,
50 * MINUTE_IN_MS, 50 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY,
80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS);
mStatsRule.setTime(10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteActivityResumedLocked(APP_UID);
}
mStatsRule.setTime(10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_TOP);
}
mStatsRule.setTime(30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteActivityPausedLocked(APP_UID);
}
mStatsRule.setTime(30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_SERVICE);
}
mStatsRule.setTime(40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE);
}
mStatsRule.setTime(50 * MINUTE_IN_MS, 50 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
}
mStatsRule.setTime(60 * MINUTE_IN_MS, 60 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_BOUND_TOP);
}
mStatsRule.setTime(70 * MINUTE_IN_MS, 70 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_CACHED_EMPTY);
}
batteryStats.noteFlashlightOnLocked(APP_UID, 1000, 1000);
batteryStats.noteFlashlightOffLocked(APP_UID, 5000, 5000);