Merge "Reclassify FGS and BOUND_TOP as "background" in BatteryUsageStats"
This commit is contained in:
committed by
Android (Google) Code Review
commit
ebe0011f41
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user