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

Commit e855d9f1 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Automerger Merge Worker
Browse files

Merge "Fix concurrency issue with BatteryUsageStats" am: 587eef25

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1927563

Change-Id: Iebd2db7d42cc4dbbfd344c855695a837f246e477
parents c1fe8d36 587eef25
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ 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;
@@ -186,16 +187,23 @@ public class BatteryUsageStatsProvider {
            }

            BatteryStatsImpl batteryStatsImpl = (BatteryStatsImpl) mStats;

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

            ArrayList<BatteryStats.HistoryTag> tags = new ArrayList<>(
                    batteryStatsImpl.mHistoryTagPool.size());
            for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
                    batteryStatsImpl.mHistoryTagPool.entrySet()) {
                final BatteryStats.HistoryTag tag = entry.getKey();
                final BatteryStats.HistoryTag tag = new BatteryStats.HistoryTag();
                tag.setTo(entry.getKey());
                tag.poolIdx = entry.getValue();
                tags.add(tag);
            }

            batteryUsageStatsBuilder.setBatteryHistory(batteryStatsImpl.mHistoryBuffer, tags);
            batteryUsageStatsBuilder.setBatteryHistory(historyBuffer, tags);
        }

        return batteryUsageStatsBuilder.build();