Merge "Fix concurrency issue with BatteryUsageStats" am: 587eef25c9
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1927563 Change-Id: Iebd2db7d42cc4dbbfd344c855695a837f246e477
This commit is contained in:
@@ -21,6 +21,7 @@ import android.hardware.SensorManager;
|
|||||||
import android.os.BatteryStats;
|
import android.os.BatteryStats;
|
||||||
import android.os.BatteryUsageStats;
|
import android.os.BatteryUsageStats;
|
||||||
import android.os.BatteryUsageStatsQuery;
|
import android.os.BatteryUsageStatsQuery;
|
||||||
|
import android.os.Parcel;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.os.UidBatteryConsumer;
|
import android.os.UidBatteryConsumer;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -186,16 +187,23 @@ public class BatteryUsageStatsProvider {
|
|||||||
}
|
}
|
||||||
|
|
||||||
BatteryStatsImpl batteryStatsImpl = (BatteryStatsImpl) mStats;
|
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<>(
|
ArrayList<BatteryStats.HistoryTag> tags = new ArrayList<>(
|
||||||
batteryStatsImpl.mHistoryTagPool.size());
|
batteryStatsImpl.mHistoryTagPool.size());
|
||||||
for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
|
for (Map.Entry<BatteryStats.HistoryTag, Integer> entry :
|
||||||
batteryStatsImpl.mHistoryTagPool.entrySet()) {
|
batteryStatsImpl.mHistoryTagPool.entrySet()) {
|
||||||
final BatteryStats.HistoryTag tag = entry.getKey();
|
final BatteryStats.HistoryTag tag = new BatteryStats.HistoryTag();
|
||||||
|
tag.setTo(entry.getKey());
|
||||||
tag.poolIdx = entry.getValue();
|
tag.poolIdx = entry.getValue();
|
||||||
tags.add(tag);
|
tags.add(tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
batteryUsageStatsBuilder.setBatteryHistory(batteryStatsImpl.mHistoryBuffer, tags);
|
batteryUsageStatsBuilder.setBatteryHistory(historyBuffer, tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
return batteryUsageStatsBuilder.build();
|
return batteryUsageStatsBuilder.build();
|
||||||
|
|||||||
Reference in New Issue
Block a user