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