diff options
| -rw-r--r-- | services/core/java/com/android/server/power/stats/PowerStatsExporter.java | 89 |
1 files changed, 46 insertions, 43 deletions
diff --git a/services/core/java/com/android/server/power/stats/PowerStatsExporter.java b/services/core/java/com/android/server/power/stats/PowerStatsExporter.java index 39954b8e8dba..5f41090da0a4 100644 --- a/services/core/java/com/android/server/power/stats/PowerStatsExporter.java +++ b/services/core/java/com/android/server/power/stats/PowerStatsExporter.java @@ -59,58 +59,61 @@ public class PowerStatsExporter { */ public void exportAggregatedPowerStats(BatteryUsageStats.Builder batteryUsageStatsBuilder, long monotonicStartTime, long monotonicEndTime) { - boolean hasStoredSpans = false; - long maxEndTime = monotonicStartTime; - List<PowerStatsSpan.Metadata> spans = mPowerStatsStore.getTableOfContents(); - for (int i = spans.size() - 1; i >= 0; i--) { - PowerStatsSpan.Metadata metadata = spans.get(i); - if (!metadata.getSections().contains(AggregatedPowerStatsSection.TYPE)) { - continue; - } + synchronized (this) { + boolean hasStoredSpans = false; + long maxEndTime = monotonicStartTime; + List<PowerStatsSpan.Metadata> spans = mPowerStatsStore.getTableOfContents(); + for (int i = spans.size() - 1; i >= 0; i--) { + PowerStatsSpan.Metadata metadata = spans.get(i); + if (!metadata.getSections().contains(AggregatedPowerStatsSection.TYPE)) { + continue; + } - List<PowerStatsSpan.TimeFrame> timeFrames = metadata.getTimeFrames(); - long spanMinTime = Long.MAX_VALUE; - long spanMaxTime = Long.MIN_VALUE; - for (int j = 0; j < timeFrames.size(); j++) { - PowerStatsSpan.TimeFrame timeFrame = timeFrames.get(j); - long startMonotonicTime = timeFrame.startMonotonicTime; - long endMonotonicTime = startMonotonicTime + timeFrame.duration; - if (startMonotonicTime < spanMinTime) { - spanMinTime = startMonotonicTime; + List<PowerStatsSpan.TimeFrame> timeFrames = metadata.getTimeFrames(); + long spanMinTime = Long.MAX_VALUE; + long spanMaxTime = Long.MIN_VALUE; + for (int j = 0; j < timeFrames.size(); j++) { + PowerStatsSpan.TimeFrame timeFrame = timeFrames.get(j); + long startMonotonicTime = timeFrame.startMonotonicTime; + long endMonotonicTime = startMonotonicTime + timeFrame.duration; + if (startMonotonicTime < spanMinTime) { + spanMinTime = startMonotonicTime; + } + if (endMonotonicTime > spanMaxTime) { + spanMaxTime = endMonotonicTime; + } } - if (endMonotonicTime > spanMaxTime) { - spanMaxTime = endMonotonicTime; + + if (!(spanMinTime >= monotonicStartTime && spanMaxTime < monotonicEndTime)) { + continue; } - } - if (!(spanMinTime >= monotonicStartTime && spanMaxTime < monotonicEndTime)) { - continue; - } + if (spanMaxTime > maxEndTime) { + maxEndTime = spanMaxTime; + } - if (spanMaxTime > maxEndTime) { - maxEndTime = spanMaxTime; + PowerStatsSpan span = mPowerStatsStore.loadPowerStatsSpan(metadata.getId(), + AggregatedPowerStatsSection.TYPE); + if (span == null) { + Slog.e(TAG, "Could not read PowerStatsStore section " + metadata); + continue; + } + List<PowerStatsSpan.Section> sections = span.getSections(); + for (int k = 0; k < sections.size(); k++) { + hasStoredSpans = true; + PowerStatsSpan.Section section = sections.get(k); + populateBatteryUsageStatsBuilder(batteryUsageStatsBuilder, + ((AggregatedPowerStatsSection) section).getAggregatedPowerStats()); + } } - PowerStatsSpan span = mPowerStatsStore.loadPowerStatsSpan(metadata.getId(), - AggregatedPowerStatsSection.TYPE); - if (span == null) { - Slog.e(TAG, "Could not read PowerStatsStore section " + metadata); - continue; - } - List<PowerStatsSpan.Section> sections = span.getSections(); - for (int k = 0; k < sections.size(); k++) { - hasStoredSpans = true; - PowerStatsSpan.Section section = sections.get(k); - populateBatteryUsageStatsBuilder(batteryUsageStatsBuilder, - ((AggregatedPowerStatsSection) section).getAggregatedPowerStats()); + if (!hasStoredSpans + || maxEndTime < monotonicEndTime - mBatterySessionTimeSpanSlackMillis) { + mPowerStatsAggregator.aggregatePowerStats(maxEndTime, monotonicEndTime, + stats -> populateBatteryUsageStatsBuilder(batteryUsageStatsBuilder, stats)); } + mPowerStatsAggregator.reset(); } - - if (!hasStoredSpans || maxEndTime < monotonicEndTime - mBatterySessionTimeSpanSlackMillis) { - mPowerStatsAggregator.aggregatePowerStats(maxEndTime, monotonicEndTime, - stats -> populateBatteryUsageStatsBuilder(batteryUsageStatsBuilder, stats)); - } - mPowerStatsAggregator.reset(); } private void populateBatteryUsageStatsBuilder( |