Merge "Reclassify FGS and BOUND_TOP as "background" in BatteryUsageStats"

This commit is contained in:
Dmitri Plotnikov
2022-12-09 22:45:39 +00:00
committed by Android (Google) Code Review
5 changed files with 56 additions and 48 deletions

View File

@@ -650,8 +650,11 @@ public abstract class BatteryStats {
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

@@ -50,8 +50,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;
@@ -63,7 +62,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

@@ -286,16 +286,15 @@ 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) {

View File

@@ -359,6 +359,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);
@@ -395,7 +396,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,
@@ -405,8 +407,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,
@@ -414,7 +415,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,40 +121,44 @@ public class BatteryUsageStatsProviderTest {
private BatteryStatsImpl prepareBatteryStats() {
BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
mStatsRule.setTime(10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
synchronized (batteryStats) {
batteryStats.noteActivityResumedLocked(APP_UID,
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_TOP,
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteActivityPausedLocked(APP_UID,
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_SERVICE,
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE,
50 * MINUTE_IN_MS, 50 * MINUTE_IN_MS);
}
synchronized (batteryStats) {
batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_CACHED_EMPTY,
80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS);
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);
}
synchronized (batteryStats) {
batteryStats.noteFlashlightOnLocked(APP_UID, 1000, 1000);
}