Merge "Batterystats handles nested unoptimized ble scans"
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 04f7c76..a44fd67 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -130,7 +130,7 @@
long getAwakeTimePlugged();
void noteBleScanStarted(in WorkSource ws, boolean isUnoptimized);
- void noteBleScanStopped(in WorkSource ws);
+ void noteBleScanStopped(in WorkSource ws, boolean isUnoptimized);
void noteResetBleScan();
void noteBleScanResults(in WorkSource ws, int numNewResults);
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 235ebc8..4b582bf 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -4845,7 +4845,7 @@
}
}
- private void noteBluetoothScanStoppedLocked(int uid) {
+ private void noteBluetoothScanStoppedLocked(int uid, boolean isUnoptimized) {
uid = mapUid(uid);
final long elapsedRealtime = mClocks.elapsedRealtime();
final long uptime = mClocks.uptimeMillis();
@@ -4857,13 +4857,13 @@
addHistoryRecordLocked(elapsedRealtime, uptime);
mBluetoothScanTimer.stopRunningLocked(elapsedRealtime);
}
- getUidStatsLocked(uid).noteBluetoothScanStoppedLocked(elapsedRealtime);
+ getUidStatsLocked(uid).noteBluetoothScanStoppedLocked(elapsedRealtime, isUnoptimized);
}
- public void noteBluetoothScanStoppedFromSourceLocked(WorkSource ws) {
+ public void noteBluetoothScanStoppedFromSourceLocked(WorkSource ws, boolean isUnoptimized) {
final int N = ws.size();
for (int i = 0; i < N; i++) {
- noteBluetoothScanStoppedLocked(ws.get(i));
+ noteBluetoothScanStoppedLocked(ws.get(i), isUnoptimized);
}
}
@@ -6114,14 +6114,11 @@
}
}
- public void noteBluetoothScanStoppedLocked(long elapsedRealtimeMs) {
+ public void noteBluetoothScanStoppedLocked(long elapsedRealtimeMs, boolean isUnoptimized) {
if (mBluetoothScanTimer != null) {
mBluetoothScanTimer.stopRunningLocked(elapsedRealtimeMs);
}
- // In the ble code, a scan cannot change types and nested starts are not possible.
- // So if an unoptimizedScan is running, it is now being stopped.
- if (mBluetoothUnoptimizedScanTimer != null
- && mBluetoothUnoptimizedScanTimer.isRunningLocked()) {
+ if (isUnoptimized && mBluetoothUnoptimizedScanTimer != null) {
mBluetoothUnoptimizedScanTimer.stopRunningLocked(elapsedRealtimeMs);
}
}
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
index c539f78..c21c3be 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsBackgroundStatsTest.java
@@ -217,10 +217,6 @@
curr = 1000 * (clocks.realtime = clocks.uptime = 305);
bi.updateTimeBasesLocked(false, false, curr, curr); // off battery
- // Stop timer
- curr = 1000 * (clocks.realtime = clocks.uptime = 409);
- bi.noteBluetoothScanStoppedFromSourceLocked(ws);
-
// Start timer (unoptimized)
curr = 1000 * (clocks.realtime = clocks.uptime = 1000);
bi.noteBluetoothScanStartedFromSourceLocked(ws, true);
@@ -233,9 +229,13 @@
curr = 1000 * (clocks.realtime = clocks.uptime = 3004);
bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_TOP);
- // Stop timer
+ // Stop timer (optimized)
+ curr = 1000 * (clocks.realtime = clocks.uptime = 3409);
+ bi.noteBluetoothScanStoppedFromSourceLocked(ws, false);
+
+ // Stop timer (unoptimized)
curr = 1000 * (clocks.realtime = clocks.uptime = 4008);
- bi.noteBluetoothScanStoppedFromSourceLocked(ws);
+ bi.noteBluetoothScanStoppedFromSourceLocked(ws, true);
// Test
curr = 1000 * (clocks.realtime = clocks.uptime = 5000);
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
index 4e8ab31..ed54f53 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsNoteTest.java
@@ -44,8 +44,6 @@
assertEquals(101,
bi.getUidStats().get(UID).getBluetoothScanResultCounter()
.getCountLocked(STATS_SINCE_CHARGED));
- // TODO: remove next line when Counter misreporting values when plugged-in bug is fixed.
- bi.noteUidProcessStateLocked(UID, ActivityManager.PROCESS_STATE_IMPORTANT_BACKGROUND);
BatteryStats.Counter bgCntr = bi.getUidStats().get(UID).getBluetoothScanResultBgCounter();
if (bgCntr != null) {
assertEquals(0, bgCntr.getCountLocked(STATS_SINCE_CHARGED));
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index c20221b..deaf3b8 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -962,10 +962,10 @@
}
@Override
- public void noteBleScanStopped(WorkSource ws) {
+ public void noteBleScanStopped(WorkSource ws, boolean isUnoptimized) {
enforceCallingPermission();
synchronized (mStats) {
- mStats.noteBluetoothScanStoppedFromSourceLocked(ws);
+ mStats.noteBluetoothScanStoppedFromSourceLocked(ws, isUnoptimized);
}
}