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

Commit 46993bfa authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Android (Google) Code Review
Browse files

Merge "Fix concurrency issue with BatteryUsageStats"

parents 7eb99cea c635cfdd
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -21,11 +21,13 @@ import android.hardware.SensorManager;
import android.os.BatteryStats;
import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery;
import android.os.Parcel;
import android.os.SystemClock;
import android.os.UidBatteryConsumer;
import android.util.Log;
import android.util.SparseArray;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;

import java.util.ArrayList;
@@ -133,9 +135,12 @@ public class BatteryUsageStatsProvider {
     */
    @VisibleForTesting
    public BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) {
        synchronized (mStats) {
            return getBatteryUsageStats(query, currentTimeMillis());
        }
    }

    @GuardedBy("mStats")
    private BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query,
            long currentTimeMs) {
        if (query.getToTimestamp() == 0) {
@@ -145,6 +150,7 @@ public class BatteryUsageStatsProvider {
        }
    }

    @GuardedBy("mStats")
    private BatteryUsageStats getCurrentBatteryUsageStats(BatteryUsageStatsQuery query,
            long currentTimeMs) {
        final long realtimeUs = elapsedRealtime() * 1000;
@@ -189,7 +195,12 @@ public class BatteryUsageStatsProvider {
            }

            BatteryStatsImpl batteryStatsImpl = (BatteryStatsImpl) mStats;
            batteryUsageStatsBuilder.setBatteryHistory(batteryStatsImpl.mHistoryBuffer);

            // Make a copy of battery history to avoid concurrent modification.
            Parcel historyBuffer = Parcel.obtain();
            historyBuffer.appendFrom(batteryStatsImpl.mHistoryBuffer, 0,
                    batteryStatsImpl.mHistoryBuffer.dataSize());
            batteryUsageStatsBuilder.setBatteryHistory(historyBuffer);
        }

        return batteryUsageStatsBuilder.build();