summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/BatteryStats.java34
-rw-r--r--core/java/com/android/internal/os/BatteryStatsImpl.java20
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);
+ }
}
}
}