diff options
| -rw-r--r-- | core/java/android/os/BatteryStats.java | 34 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/BatteryStatsImpl.java | 20 |
2 files changed, 38 insertions, 16 deletions
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 49afeeb4642a..66b6b47887b9 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -53,6 +53,8 @@ public abstract class BatteryStats implements Parcelable { private static final String TAG = "BatteryStats"; private static final boolean LOCAL_LOGV = false; + /** Fetching RPM stats is too slow to do each time screen changes, so disable it. */ + protected static final boolean SCREEN_OFF_RPM_STATS_ENABLED = false; /** @hide */ public static final String SERVICE_NAME = "batterystats"; @@ -214,7 +216,7 @@ public abstract class BatteryStats implements Parcelable { * New in version 25: * - Package wakeup alarms are now on screen-off timebase * New in version 26: - * - Resource power manager (rpm) states + * - Resource power manager (rpm) states [but screenOffRpm is disabled from working properly] */ static final String CHECKIN_VERSION = "26"; @@ -3338,8 +3340,14 @@ public abstract class BatteryStats implements Parcelable { ? (screenOffTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000 : 0; int screenOffCount = screenOffTimer != null ? screenOffTimer.getCountLocked(which) : 0; - dumpLine(pw, 0 /* uid */, category, RESOURCE_POWER_MANAGER_DATA, - "\"" + ent.getKey() + "\"", timeMs, count, screenOffTimeMs, screenOffCount); + if (SCREEN_OFF_RPM_STATS_ENABLED) { + dumpLine(pw, 0 /* uid */, category, RESOURCE_POWER_MANAGER_DATA, + "\"" + ent.getKey() + "\"", timeMs, count, screenOffTimeMs, + screenOffCount); + } else { + dumpLine(pw, 0 /* uid */, category, RESOURCE_POWER_MANAGER_DATA, + "\"" + ent.getKey() + "\"", timeMs, count); + } } } @@ -4629,18 +4637,20 @@ public abstract class BatteryStats implements Parcelable { } pw.println(); } - final Map<String, ? extends Timer> screenOffRpmStats = getScreenOffRpmStats(); - if (screenOffRpmStats.size() > 0) { - pw.print(prefix); - pw.println(" Resource Power Manager Stats for when screen was off"); + if (SCREEN_OFF_RPM_STATS_ENABLED) { + final Map<String, ? extends Timer> screenOffRpmStats = getScreenOffRpmStats(); if (screenOffRpmStats.size() > 0) { - for (Map.Entry<String, ? extends Timer> ent : screenOffRpmStats.entrySet()) { - final String timerName = ent.getKey(); - final Timer timer = ent.getValue(); - printTimer(pw, sb, timer, rawRealtime, which, prefix, timerName); + pw.print(prefix); + pw.println(" Resource Power Manager Stats for when screen was off"); + if (screenOffRpmStats.size() > 0) { + for (Map.Entry<String, ? extends Timer> ent : screenOffRpmStats.entrySet()) { + final String timerName = ent.getKey(); + final Timer timer = ent.getValue(); + printTimer(pw, sb, timer, rawRealtime, which, prefix, timerName); + } } + pw.println(); } - pw.println(); } final long[] cpuFreqs = getCpuFreqs(); diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 90455f643f35..907c69f30b14 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -626,6 +626,7 @@ public class BatteryStatsImpl extends BatteryStats { return mRpmStats; } + // TODO: Note: screenOffRpmStats has been disabled via SCREEN_OFF_RPM_STATS_ENABLED. @Override public Map<String, ? extends Timer> getScreenOffRpmStats() { return mScreenOffRpmStats; @@ -3559,7 +3560,12 @@ public class BatteryStatsImpl extends BatteryStats { updateKernelWakelocksLocked(); updateBatteryPropertiesLocked(); } - updateRpmStatsLocked(); // if either OnBattery or OnBatteryScreenOff timebase changes. + // This if{} is only necessary due to SCREEN_OFF_RPM_STATS_ENABLED, which exists because + // updateRpmStatsLocked is too slow to run each screen change. When the speed is + // improved, remove the surrounding if{}. + if (SCREEN_OFF_RPM_STATS_ENABLED || updateOnBatteryTimeBase) { + updateRpmStatsLocked(); // if either OnBattery or OnBatteryScreenOff timebase changes. + } if (DEBUG_ENERGY_CPU) { Slog.d(TAG, "Updating cpu time because screen is now " + (screenOff ? "off" : "on") + " and battery is " + (unplugged ? "on" : "off")); @@ -10254,7 +10260,9 @@ public class BatteryStatsImpl extends BatteryStats { final long pTimeUs = pstate.getValue().mTimeMs * 1000; final int pCount = pstate.getValue().mCount; getRpmTimerLocked(pName).update(pTimeUs, pCount); - getScreenOffRpmTimerLocked(pName).update(pTimeUs, pCount); + if (SCREEN_OFF_RPM_STATS_ENABLED) { + getScreenOffRpmTimerLocked(pName).update(pTimeUs, pCount); + } // Update values for each voter of this platform state. for (Map.Entry<String, RpmStats.PowerStateElement> voter @@ -10263,7 +10271,9 @@ public class BatteryStatsImpl extends BatteryStats { final long vTimeUs = voter.getValue().mTimeMs * 1000; final int vCount = voter.getValue().mCount; getRpmTimerLocked(vName).update(vTimeUs, vCount); - getScreenOffRpmTimerLocked(vName).update(vTimeUs, vCount); + if (SCREEN_OFF_RPM_STATS_ENABLED) { + getScreenOffRpmTimerLocked(vName).update(vTimeUs, vCount); + } } } @@ -10277,7 +10287,9 @@ public class BatteryStatsImpl extends BatteryStats { final long timeUs = sstate.getValue().mTimeMs * 1000; final int count = sstate.getValue().mCount; getRpmTimerLocked(name).update(timeUs, count); - getScreenOffRpmTimerLocked(name).update(timeUs, count); + if (SCREEN_OFF_RPM_STATS_ENABLED) { + getScreenOffRpmTimerLocked(name).update(timeUs, count); + } } } } |