Merge "Reclassify FGS and BOUND_TOP as "background" in BatteryUsageStats" into tm-qpr-dev am: f38ff6c1b7
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21298223 Change-Id: I3d221f4b90feefd882f694f5ec4bb0135ee93892 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -649,8 +649,11 @@ public abstract class BatteryStats implements Parcelable {
|
|||||||
return Uid.PROCESS_STATE_NONEXISTENT;
|
return Uid.PROCESS_STATE_NONEXISTENT;
|
||||||
} else if (procState == ActivityManager.PROCESS_STATE_TOP) {
|
} else if (procState == ActivityManager.PROCESS_STATE_TOP) {
|
||||||
return Uid.PROCESS_STATE_TOP;
|
return Uid.PROCESS_STATE_TOP;
|
||||||
} else if (ActivityManager.isForegroundService(procState)) {
|
} else if (procState == ActivityManager.PROCESS_STATE_BOUND_TOP) {
|
||||||
// State when app has put itself in the foreground.
|
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;
|
return Uid.PROCESS_STATE_FOREGROUND_SERVICE;
|
||||||
} else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
|
} else if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) {
|
||||||
// Persistent and other foreground states go here.
|
// 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
|
* The state of an application when it is either running a foreground (top) activity.
|
||||||
* or a foreground service.
|
|
||||||
*/
|
*/
|
||||||
public static final int STATE_FOREGROUND = 0;
|
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_TRANSIENT_BACKGROUND},
|
||||||
* {@link android.app.ActivityManager#PROCESS_STATE_BACKUP},
|
* {@link android.app.ActivityManager#PROCESS_STATE_BACKUP},
|
||||||
* {@link android.app.ActivityManager#PROCESS_STATE_SERVICE},
|
* {@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;
|
public static final int STATE_BACKGROUND = 1;
|
||||||
|
|
||||||
|
|||||||
@@ -298,18 +298,16 @@ public class BatteryUsageStatsProvider {
|
|||||||
BatteryStats.Uid.PROCESS_STATE_FOREGROUND, realtimeUs,
|
BatteryStats.Uid.PROCESS_STATE_FOREGROUND, realtimeUs,
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
totalForegroundDurationUs += uid.getProcessStateTime(
|
|
||||||
BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE, realtimeUs,
|
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
|
||||||
|
|
||||||
return totalForegroundDurationUs / 1000;
|
return totalForegroundDurationUs / 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
|
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
|
||||||
return uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND, realtimeUs,
|
return (uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
|
||||||
BatteryStats.STATS_SINCE_CHARGED) / 1000;
|
realtimeUs, BatteryStats.STATS_SINCE_CHARGED)
|
||||||
|
+ uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
|
||||||
|
realtimeUs, BatteryStats.STATS_SINCE_CHARGED))
|
||||||
|
/ 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryUsageStats getAggregatedBatteryUsageStats(BatteryUsageStatsQuery query) {
|
private BatteryUsageStats getAggregatedBatteryUsageStats(BatteryUsageStatsQuery query) {
|
||||||
final boolean includePowerModels = (query.getFlags()
|
final boolean includePowerModels = (query.getFlags()
|
||||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_POWER_MODELS) != 0;
|
& 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 of ActivityManager process states and how long to simulate run time in each state
|
||||||
Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
|
Map<Integer, Integer> stateRuntimeMap = new HashMap<Integer, Integer>();
|
||||||
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP, 1111);
|
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_BOUND_FOREGROUND_SERVICE, 1234);
|
||||||
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
|
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE, 2468);
|
||||||
stateRuntimeMap.put(ActivityManager.PROCESS_STATE_TOP_SLEEPING, 7531);
|
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,
|
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND_SERVICE,
|
||||||
elapsedTimeUs, STATS_SINCE_CHARGED);
|
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);
|
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
|
||||||
|
|
||||||
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP_SLEEPING,
|
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,
|
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_FOREGROUND,
|
||||||
elapsedTimeUs, STATS_SINCE_CHARGED);
|
elapsedTimeUs, STATS_SINCE_CHARGED);
|
||||||
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND)
|
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND);
|
||||||
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE);
|
|
||||||
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
|
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
|
||||||
|
|
||||||
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_BACKGROUND,
|
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)
|
expectedRunTimeMs = stateRuntimeMap.get(ActivityManager.PROCESS_STATE_TRANSIENT_BACKGROUND)
|
||||||
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
|
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_BACKUP)
|
||||||
+ stateRuntimeMap.get(ActivityManager.PROCESS_STATE_SERVICE)
|
+ 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);
|
assertEquals(expectedRunTimeMs * 1000, actualRunTimeUs);
|
||||||
|
|
||||||
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,
|
actualRunTimeUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_CACHED,
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ 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(60 * MINUTE_IN_MS);
|
.isEqualTo(20 * MINUTE_IN_MS);
|
||||||
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
|
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
|
||||||
.isEqualTo(10 * MINUTE_IN_MS);
|
.isEqualTo(40 * MINUTE_IN_MS);
|
||||||
assertThat(uidBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_AUDIO))
|
assertThat(uidBatteryConsumer.getConsumedPower(BatteryConsumer.POWER_COMPONENT_AUDIO))
|
||||||
.isWithin(PRECISION).of(2.0);
|
.isWithin(PRECISION).of(2.0);
|
||||||
assertThat(
|
assertThat(
|
||||||
@@ -121,22 +121,44 @@ public class BatteryUsageStatsProviderTest {
|
|||||||
private BatteryStatsImpl prepareBatteryStats() {
|
private BatteryStatsImpl prepareBatteryStats() {
|
||||||
BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
|
BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats();
|
||||||
|
|
||||||
batteryStats.noteActivityResumedLocked(APP_UID,
|
mStatsRule.setTime(10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
|
||||||
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
|
synchronized (batteryStats) {
|
||||||
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_TOP,
|
batteryStats.noteActivityResumedLocked(APP_UID);
|
||||||
10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
|
}
|
||||||
batteryStats.noteActivityPausedLocked(APP_UID,
|
|
||||||
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
|
mStatsRule.setTime(10 * MINUTE_IN_MS, 10 * MINUTE_IN_MS);
|
||||||
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_SERVICE,
|
synchronized (batteryStats) {
|
||||||
30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
|
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_TOP);
|
||||||
batteryStats.noteUidProcessStateLocked(APP_UID,
|
}
|
||||||
ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE,
|
mStatsRule.setTime(30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
|
||||||
40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS);
|
synchronized (batteryStats) {
|
||||||
batteryStats.noteUidProcessStateLocked(APP_UID,
|
batteryStats.noteActivityPausedLocked(APP_UID);
|
||||||
ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE,
|
}
|
||||||
50 * MINUTE_IN_MS, 50 * MINUTE_IN_MS);
|
mStatsRule.setTime(30 * MINUTE_IN_MS, 30 * MINUTE_IN_MS);
|
||||||
batteryStats.noteUidProcessStateLocked(APP_UID, ActivityManager.PROCESS_STATE_CACHED_EMPTY,
|
synchronized (batteryStats) {
|
||||||
80 * MINUTE_IN_MS, 80 * MINUTE_IN_MS);
|
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.noteFlashlightOnLocked(APP_UID, 1000, 1000);
|
||||||
batteryStats.noteFlashlightOffLocked(APP_UID, 5000, 5000);
|
batteryStats.noteFlashlightOffLocked(APP_UID, 5000, 5000);
|
||||||
|
|||||||
Reference in New Issue
Block a user