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

Commit 587eef25 authored by Dmitri Plotnikov's avatar Dmitri Plotnikov Committed by Gerrit Code Review
Browse files

Merge "Fix concurrency issue with BatteryUsageStats"

parents af4fc5fb 0856f768
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();