Loading core/java/android/os/BatteryStats.java +5 −2 Original line number Diff line number Diff line Loading @@ -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. Loading core/java/android/os/UidBatteryConsumer.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading core/java/com/android/internal/os/BatteryUsageStatsProvider.java +5 −7 Original line number Diff line number Diff line Loading @@ -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; Loading core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +6 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java +40 −18 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); 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, 40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS); 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, 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); 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); Loading Loading
core/java/android/os/BatteryStats.java +5 −2 Original line number Diff line number Diff line Loading @@ -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. Loading
core/java/android/os/UidBatteryConsumer.java +3 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading
core/java/com/android/internal/os/BatteryUsageStatsProvider.java +5 −7 Original line number Diff line number Diff line Loading @@ -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; Loading
core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java +6 −4 Original line number Diff line number Diff line Loading @@ -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); Loading Loading @@ -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, Loading @@ -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, Loading @@ -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, Loading
core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java +40 −18 Original line number Diff line number Diff line Loading @@ -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( Loading Loading @@ -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); 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, 40 * MINUTE_IN_MS, 40 * MINUTE_IN_MS); 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, 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); 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); Loading