Merge "Fix concurrency issue with BatteryUsageStats" am: 587eef25c9 am: e855d9f17e am: fb37eaa5df
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1927563 Change-Id: Ie0e2b0be5d90cf1a40957a343a44489714446d0f
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user