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

Commit f613b08e authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Avoid fatal crashes during power stats aggregation" into main

parents f86ea8bc 8f7fc041
Loading
Loading
Loading
Loading
+108 −95
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.power.stats.processor;
import android.annotation.NonNull;
import android.os.BatteryConsumer;
import android.os.BatteryStats;
import android.util.Slog;
import android.util.SparseBooleanArray;

import com.android.internal.annotations.VisibleForTesting;
@@ -33,6 +34,7 @@ import java.util.function.Consumer;
 * {@link AggregatedPowerStats} that adds up power stats from the samples found in battery history.
 */
public class PowerStatsAggregator {
    private static final String TAG = "PowerStatsAggregator";
    private static final long UNINITIALIZED = -1;
    private final AggregatedPowerStatsConfig mAggregatedPowerStatsConfig;
    private final SparseBooleanArray mEnabledComponents =
@@ -81,7 +83,19 @@ public class PowerStatsAggregator {
     */
    public void aggregatePowerStats(BatteryStatsHistory history, long startTimeMs, long endTimeMs,
            Consumer<AggregatedPowerStats> consumer) {
        try {
            synchronized (this) {
                aggregatePowerStatsLocked(history, startTimeMs, endTimeMs, consumer);
            }
        } catch (Exception e) {
            Slog.e(TAG, "Cannot perform power stats aggregation"
                    + " because battery stats history may be corrupted", e);
            history.reset();
        }
    }

    private void aggregatePowerStatsLocked(BatteryStatsHistory history, long startTimeMs,
            long endTimeMs, Consumer<AggregatedPowerStats> consumer) {
        if (mStats == null) {
            mStats = new AggregatedPowerStats(mAggregatedPowerStatsConfig, mEnabledComponents);
        }
@@ -192,7 +206,6 @@ public class PowerStatsAggregator {

        mStats.reset();     // to free up memory
    }
    }

    /**
     * Reset to prepare for a new aggregation session.