Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b65d270d authored by Dmitri Plotnikov's avatar Dmitri Plotnikov
Browse files

Serialize PowerStatsExporter sessions

There is a chance of a race condition if multiple passes
over PowerStatsExporter are done at the same time.

Bug: 355359427
Test: atest PowerStatsTests; atest PowerStatsTestsRavenwood
Flag: EXEMPT bugfix
Change-Id: I691843dc9a1f6597467a4c5984386a623e7233d8
parent ac0bd013
Loading
Loading
Loading
Loading
+46 −43
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ public class PowerStatsExporter {
     */
    public void exportAggregatedPowerStats(BatteryUsageStats.Builder batteryUsageStatsBuilder,
            long monotonicStartTime, long monotonicEndTime) {
        synchronized (this) {
            boolean hasStoredSpans = false;
            long maxEndTime = monotonicStartTime;
            List<PowerStatsSpan.Metadata> spans = mPowerStatsStore.getTableOfContents();
@@ -106,12 +107,14 @@ public class PowerStatsExporter {
                }
            }

        if (!hasStoredSpans || maxEndTime < monotonicEndTime - mBatterySessionTimeSpanSlackMillis) {
            if (!hasStoredSpans
                    || maxEndTime < monotonicEndTime - mBatterySessionTimeSpanSlackMillis) {
                mPowerStatsAggregator.aggregatePowerStats(maxEndTime, monotonicEndTime,
                        stats -> populateBatteryUsageStatsBuilder(batteryUsageStatsBuilder, stats));
            }
            mPowerStatsAggregator.reset();
        }
    }

    private void populateBatteryUsageStatsBuilder(
            BatteryUsageStats.Builder batteryUsageStatsBuilder, AggregatedPowerStats stats) {