summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Dmitri Plotnikov <dplotnikov@google.com> 2021-05-20 15:32:19 -0700
committer Dmitri Plotnikov <dplotnikov@google.com> 2021-05-20 18:56:46 -0700
commita00309cdc2b8a42e5bcb7a67987718542ce62e60 (patch)
treea39cd151b84afe54e17a7a14996afb0f681ef8b6
parent186fbcc208eb306a4e6461e360b133b0fc4cf0ab (diff)
Fix time-in-foreground to include PROCESS_STATE_FOREGROUND_SERVICE
Bug: 188656360 Test: atest FrameworksCoreTests:BatteryUsageStatsProviderTest Change-Id: I29312fb36e13181a57c68bb9968b103256f14077
-rw-r--r--core/java/com/android/internal/os/BatteryUsageStatsProvider.java31
-rw-r--r--core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java10
2 files changed, 23 insertions, 18 deletions
diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
index d4d61256a7a3..3aaccdd71844 100644
--- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
+++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java
@@ -180,29 +180,28 @@ public class BatteryUsageStatsProvider {
}
private long getProcessForegroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
- final long topStateDurationMs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP,
- realtimeUs, BatteryStats.STATS_SINCE_CHARGED) / 1000;
-
- long foregroundActivityDurationMs = 0;
+ final long topStateDurationUs = uid.getProcessStateTime(BatteryStats.Uid.PROCESS_STATE_TOP,
+ realtimeUs, BatteryStats.STATS_SINCE_CHARGED);
+ long foregroundActivityDurationUs = 0;
final BatteryStats.Timer foregroundActivityTimer = uid.getForegroundActivityTimer();
if (foregroundActivityTimer != null) {
- foregroundActivityDurationMs = foregroundActivityTimer.getTotalTimeLocked(realtimeUs,
- BatteryStats.STATS_SINCE_CHARGED) / 1000;
+ foregroundActivityDurationUs = foregroundActivityTimer.getTotalTimeLocked(realtimeUs,
+ BatteryStats.STATS_SINCE_CHARGED);
}
// Use the min value of STATE_TOP time and foreground activity time, since both of these
// times are imprecise
- final long foregroundDurationMs = Math.min(topStateDurationMs,
- foregroundActivityDurationMs);
-
- long foregroundServiceDurationMs = 0;
- final BatteryStats.Timer foregroundServiceTimer = uid.getForegroundServiceTimer();
- if (foregroundServiceTimer != null) {
- foregroundServiceDurationMs = foregroundServiceTimer.getTotalTimeLocked(realtimeUs,
- BatteryStats.STATS_SINCE_CHARGED) / 1000;
- }
+ long totalForegroundDurationUs = Math.min(topStateDurationUs, foregroundActivityDurationUs);
+
+ totalForegroundDurationUs += uid.getProcessStateTime(
+ 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 foregroundDurationMs + foregroundServiceDurationMs;
+ return totalForegroundDurationUs / 1000;
}
private long getProcessBackgroundTimeMs(BatteryStats.Uid uid, long realtimeUs) {
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java
index 7f0449b75c18..d83645d6e0a5 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsProviderTest.java
@@ -59,8 +59,14 @@ public class BatteryUsageStatsProviderTest {
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_CACHED_EMPTY,
+ 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.setCurrentTime(54321);
@@ -74,7 +80,7 @@ public class BatteryUsageStatsProviderTest {
batteryUsageStats.getUidBatteryConsumers();
final UidBatteryConsumer uidBatteryConsumer = uidBatteryConsumers.get(0);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
- .isEqualTo(20 * MINUTE_IN_MS);
+ .isEqualTo(60 * MINUTE_IN_MS);
assertThat(uidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
.isEqualTo(10 * MINUTE_IN_MS);