From a00309cdc2b8a42e5bcb7a67987718542ce62e60 Mon Sep 17 00:00:00 2001 From: Dmitri Plotnikov Date: Thu, 20 May 2021 15:32:19 -0700 Subject: Fix time-in-foreground to include PROCESS_STATE_FOREGROUND_SERVICE Bug: 188656360 Test: atest FrameworksCoreTests:BatteryUsageStatsProviderTest Change-Id: I29312fb36e13181a57c68bb9968b103256f14077 --- .../internal/os/BatteryUsageStatsProvider.java | 31 +++++++++++----------- .../internal/os/BatteryUsageStatsProviderTest.java | 10 +++++-- 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); -- cgit v1.2.3-59-g8ed1b