Merge "Fix concurrency issue with BatteryUsageStats"
This commit is contained in:
committed by
Android (Google) Code Review
commit
46993bfa99
@@ -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) {
|
||||
return getBatteryUsageStats(query, currentTimeMillis());
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user