From: Bookatz Date: Tue, 11 Jul 2017 23:49:17 +0000 (-0700) Subject: Batterystats handles nested unoptimized ble scans X-Git-Tag: android-x86-9.0-r1~348^2~1^2~3^2~6^2~18^2 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=20e22f6248444e4e6563ccaf60e09ad9d5e7b112;p=android-x86%2Fframeworks-base.git Batterystats handles nested unoptimized ble scans When a ble scan starts, it tells batterystats whether that scan is unoptimized. When the scan stops, batterystats is not informed of whether the stopped scan was unoptimized. Because the ble scan call could not be nested (couldn't call start twice without stopping first), this was fine, but now nesting is possible, so batterystats needs to know whether the stopped ble scan is unoptimized. Bug: 63456783 Test: runtest -x frameworks/base/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java Test: no new errors when run cts-dev -m CtsIncidentHostTestCases -t com.android.server.cts.BatteryStatsValidationTest#testUnoptimizedBleScans Change-Id: Ia73f294cf1807ddaf20f1c0bcc28add001cac78c Merged-In: Ia73f294cf1807ddaf20f1c0bcc28add001cac78c (cherry picked from commit 94c5a313d7313a9a88abdf4267af43b87deb0dd2) --- diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl index 04f7c76c8e74..a44fd675a709 100644 --- a/core/java/com/android/internal/app/IBatteryStats.aidl +++ b/core/java/com/android/internal/app/IBatteryStats.aidl @@ -130,7 +130,7 @@ interface IBatteryStats { 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 235ebc88d5e5..4b582bfd0711 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -4845,7 +4845,7 @@ public class BatteryStatsImpl extends BatteryStats { } } - 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 @@ public class BatteryStatsImpl extends BatteryStats { 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 class BatteryStatsImpl extends BatteryStats { } } - 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 c539f789ff60..c21c3be2bcbe 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 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { 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 @@ public class BatteryStatsBackgroundStatsTest extends TestCase { 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 4e8ab316e1c9..ed54f5303750 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 @@ public class BatteryStatsNoteTest extends TestCase{ 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 c20221bfe4aa..deaf3b8861c8 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 @@ public final class BatteryStatsService extends IBatteryStats.Stub } @Override - public void noteBleScanStopped(WorkSource ws) { + public void noteBleScanStopped(WorkSource ws, boolean isUnoptimized) { enforceCallingPermission(); synchronized (mStats) { - mStats.noteBluetoothScanStoppedFromSourceLocked(ws); + mStats.noteBluetoothScanStoppedFromSourceLocked(ws, isUnoptimized); } }