Merge "Fix time-in-foreground to include PROCESS_STATE_FOREGROUND_SERVICE" into sc-dev

This commit is contained in:
Dmitri Plotnikov
2021-05-24 20:02:36 +00:00
committed by Android (Google) Code Review
2 changed files with 22 additions and 17 deletions

View File

@@ -180,29 +180,28 @@ public class BatteryUsageStatsProvider {
} }
private long getProcessForegroundTimeMs(BatteryStats.Uid uid, long realtimeUs) { private long getProcessForegroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
final long topStateDurationMs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP, final long topStateDurationUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP,
realtimeUs, BatteryStats.STATS_SINCE_CHARGED) / 1000; realtimeUs, BatteryStats.STATS_SINCE_CHARGED);
long foregroundActivityDurationUs = 0;
long foregroundActivityDurationMs = 0;
final BatteryStats.Timer foregroundActivityTimer = uid.getForegroundActivityTimer(); final BatteryStats.Timer foregroundActivityTimer = uid.getForegroundActivityTimer();
if (foregroundActivityTimer != null) { if (foregroundActivityTimer != null) {
foregroundActivityDurationMs = foregroundActivityTimer.getTotalTimeLocked(realtimeUs, foregroundActivityDurationUs = foregroundActivityTimer.getTotalTimeLocked(realtimeUs,
BatteryStats.STATS_SINCE_CHARGED) / 1000; BatteryStats.STATS_SINCE_CHARGED);
} }
// Use the min value of STATE_TOP time and foreground activity time, since both of these // Use the min value of STATE_TOP time and foreground activity time, since both of these
// times are imprecise // times are imprecise
final long foregroundDurationMs = Math.min(topStateDurationMs, long totalForegroundDurationUs = Math.min(topStateDurationUs, foregroundActivityDurationUs);
foregroundActivityDurationMs);
long foregroundServiceDurationMs = 0; totalForegroundDurationUs += uid.getProcessStateTime(
final BatteryStats.Timer foregroundServiceTimer = uid.getForegroundServiceTimer(); BatteryStats.Uid.PROCESS_STATE_FOREGROUND, realtimeUs,
if (foregroundServiceTimer != null) { BatteryStats.STATS_SINCE_CHARGED);
foregroundServiceDurationMs = foregroundServiceTimer.getTotalTimeLocked(realtimeUs,
BatteryStats.STATS_SINCE_CHARGED) / 1000;
}
return foregroundDurationMs + foregroundServiceDurationMs; 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) { private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {

View File

@@ -59,8 +59,14 @@ public class BatteryUsageStatsProviderTest {
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS); 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_SERVICE, batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_SERVICE,
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS); 30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY, batteryStats.noteUidProcessStateLocked(APP_UID,
ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS); 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.setCurrentTime(54321); mStatsRule.setCurrentTime(54321);
@@ -74,7 +80,7 @@ public class BatteryUsageStatsProviderTest {
batteryUsageStats.getUidBatteryConsumers(); batteryUsageStats.getUidBatteryConsumers();
final UidBatteryConsumer uidBatteryConsumer = uidBatteryConsumers.get(0); final UidBatteryConsumer uidBatteryConsumer = uidBatteryConsumers.get(0);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND)) assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
.isEqualTo(20 * MINUTE_IN_MS); .isEqualTo(60 * MINUTE_IN_MS);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND)) assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
.isEqualTo(10 * MINUTE_IN_MS); .isEqualTo(10 * MINUTE_IN_MS);