Loading services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +7 −3 Original line number Diff line number Diff line Loading @@ -5723,7 +5723,9 @@ public class BatteryStatsImpl extends BatteryStats { displayStats.screenDozeTimer.stopRunningLocked(elapsedRealtimeMs); shouldScheduleSync = true; break; case Display.STATE_OFF: // fallthrough case Display.STATE_OFF: shouldScheduleSync = true; break; case Display.STATE_UNKNOWN: // Not tracked by timers. break; Loading Loading @@ -5756,7 +5758,9 @@ public class BatteryStatsImpl extends BatteryStats { displayStats.screenDozeTimer.startRunningLocked(elapsedRealtimeMs); shouldScheduleSync = true; break; case Display.STATE_OFF: // fallthrough case Display.STATE_OFF: shouldScheduleSync = true; break; case Display.STATE_UNKNOWN: // Not tracked by timers. break; Loading Loading @@ -5873,7 +5877,7 @@ public class BatteryStatsImpl extends BatteryStats { if (shouldScheduleSync) { if (mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_SCREEN)) { mScreenPowerStatsCollector.schedule(); mScreenPowerStatsCollector.onScreenStateChange(); } else { final int numDisplays = mPerDisplayBatteryStats.length; final int[] displayStates = new int[numDisplays]; Loading services/core/java/com/android/server/power/stats/ScreenPowerStatsCollector.java +21 −4 Original line number Diff line number Diff line Loading @@ -111,6 +111,22 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { return true; } /** * Must be called whenever the screen state (on/off/doze) changes. */ public void onScreenStateChange() { if (ensureInitialized() && mConsumedEnergyHelper.getEnergyConsumerCount() != 0) { // Sync power monitor reading immediately, because the estimation algorithm // distributes consumed power proportionally between screen states. // Since screen power consumption differs dramatically between different states, // this would lead an overestimation in the screen-off state. forceSchedule(); return; } // Perhaps schedule a sync, allowing throttling schedule(); } @Override public PowerStats collectStats() { if (!ensureInitialized()) { Loading @@ -126,7 +142,7 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { long screenOnTimeMs = mScreenUsageTimeRetriever.getScreenOnTimeMs(display); if (!mFirstSample) { mLayout.setScreenOnDuration(mPowerStats.stats, display, screenOnTimeMs - mLastScreenOnTime[display]); Math.max(0, screenOnTimeMs - mLastScreenOnTime[display])); } mLastScreenOnTime[display] = screenOnTimeMs; Loading @@ -135,14 +151,15 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { mScreenUsageTimeRetriever.getBrightnessLevelTimeMs(display, level); if (!mFirstSample) { mLayout.setBrightnessLevelDuration(mPowerStats.stats, display, level, brightnessLevelTimeMs - mLastBrightnessLevelTime[display][level]); Math.max(0, brightnessLevelTimeMs - mLastBrightnessLevelTime[display][level])); } mLastBrightnessLevelTime[display][level] = brightnessLevelTimeMs; } long screenDozeTimeMs = mScreenUsageTimeRetriever.getScreenDozeTimeMs(display); if (!mFirstSample) { mLayout.setScreenDozeDuration(mPowerStats.stats, display, screenDozeTimeMs - mLastDozeTime[display]); Math.max(0, screenDozeTimeMs - mLastDozeTime[display])); } mLastDozeTime[display] = screenDozeTimeMs; } Loading @@ -162,7 +179,7 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { } mLayout.setUidTopActivityDuration(uidStats, mLayout.getUidTopActivityDuration(uidStats) + topActivityDuration); Math.max(0, mLayout.getUidTopActivityDuration(uidStats) + topActivityDuration)); }); long elapsedRealtime = mClock.elapsedRealtime(); Loading Loading
services/core/java/com/android/server/power/stats/BatteryStatsImpl.java +7 −3 Original line number Diff line number Diff line Loading @@ -5723,7 +5723,9 @@ public class BatteryStatsImpl extends BatteryStats { displayStats.screenDozeTimer.stopRunningLocked(elapsedRealtimeMs); shouldScheduleSync = true; break; case Display.STATE_OFF: // fallthrough case Display.STATE_OFF: shouldScheduleSync = true; break; case Display.STATE_UNKNOWN: // Not tracked by timers. break; Loading Loading @@ -5756,7 +5758,9 @@ public class BatteryStatsImpl extends BatteryStats { displayStats.screenDozeTimer.startRunningLocked(elapsedRealtimeMs); shouldScheduleSync = true; break; case Display.STATE_OFF: // fallthrough case Display.STATE_OFF: shouldScheduleSync = true; break; case Display.STATE_UNKNOWN: // Not tracked by timers. break; Loading Loading @@ -5873,7 +5877,7 @@ public class BatteryStatsImpl extends BatteryStats { if (shouldScheduleSync) { if (mPowerStatsCollectorEnabled.get(BatteryConsumer.POWER_COMPONENT_SCREEN)) { mScreenPowerStatsCollector.schedule(); mScreenPowerStatsCollector.onScreenStateChange(); } else { final int numDisplays = mPerDisplayBatteryStats.length; final int[] displayStates = new int[numDisplays]; Loading
services/core/java/com/android/server/power/stats/ScreenPowerStatsCollector.java +21 −4 Original line number Diff line number Diff line Loading @@ -111,6 +111,22 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { return true; } /** * Must be called whenever the screen state (on/off/doze) changes. */ public void onScreenStateChange() { if (ensureInitialized() && mConsumedEnergyHelper.getEnergyConsumerCount() != 0) { // Sync power monitor reading immediately, because the estimation algorithm // distributes consumed power proportionally between screen states. // Since screen power consumption differs dramatically between different states, // this would lead an overestimation in the screen-off state. forceSchedule(); return; } // Perhaps schedule a sync, allowing throttling schedule(); } @Override public PowerStats collectStats() { if (!ensureInitialized()) { Loading @@ -126,7 +142,7 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { long screenOnTimeMs = mScreenUsageTimeRetriever.getScreenOnTimeMs(display); if (!mFirstSample) { mLayout.setScreenOnDuration(mPowerStats.stats, display, screenOnTimeMs - mLastScreenOnTime[display]); Math.max(0, screenOnTimeMs - mLastScreenOnTime[display])); } mLastScreenOnTime[display] = screenOnTimeMs; Loading @@ -135,14 +151,15 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { mScreenUsageTimeRetriever.getBrightnessLevelTimeMs(display, level); if (!mFirstSample) { mLayout.setBrightnessLevelDuration(mPowerStats.stats, display, level, brightnessLevelTimeMs - mLastBrightnessLevelTime[display][level]); Math.max(0, brightnessLevelTimeMs - mLastBrightnessLevelTime[display][level])); } mLastBrightnessLevelTime[display][level] = brightnessLevelTimeMs; } long screenDozeTimeMs = mScreenUsageTimeRetriever.getScreenDozeTimeMs(display); if (!mFirstSample) { mLayout.setScreenDozeDuration(mPowerStats.stats, display, screenDozeTimeMs - mLastDozeTime[display]); Math.max(0, screenDozeTimeMs - mLastDozeTime[display])); } mLastDozeTime[display] = screenDozeTimeMs; } Loading @@ -162,7 +179,7 @@ public class ScreenPowerStatsCollector extends PowerStatsCollector { } mLayout.setUidTopActivityDuration(uidStats, mLayout.getUidTopActivityDuration(uidStats) + topActivityDuration); Math.max(0, mLayout.getUidTopActivityDuration(uidStats) + topActivityDuration)); }); long elapsedRealtime = mClock.elapsedRealtime(); Loading