Loading android/app/src/com/android/bluetooth/gatt/AppScanStats.java +66 −10 Original line number Diff line number Diff line Loading @@ -272,6 +272,7 @@ import java.util.Objects; mWorkSourceUtil.getUids(), mWorkSourceUtil.getTags(), BluetoothStatsLog.BLE_SCAN_STATE_CHANGED__STATE__ON, scan.isFilterScan, scan.isBackgroundScan, scan.isOpportunisticScan); recordScanAppCountMetricsStart(scan); mOngoingScans.put(scannerId, scan); } Loading Loading @@ -338,6 +339,44 @@ import java.util.Objects; mWorkSourceUtil.getUids(), mWorkSourceUtil.getTags(), BluetoothStatsLog.BLE_SCAN_STATE_CHANGED__STATE__OFF, scan.isFilterScan, scan.isBackgroundScan, scan.isOpportunisticScan); recordScanAppCountMetricsStop(scan); } private void recordScanAppCountMetricsStart(LastScan scan) { MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_TOTAL_ENABLE, 1); if (scan.isAutoBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_AUTO_BATCH_ENABLE, 1); } else if (scan.isBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_BATCH_ENABLE, 1); } else { if (scan.isFilterScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_FILTERED_ENABLE, 1); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_UNFILTERED_ENABLE, 1); } } } private void recordScanAppCountMetricsStop(LastScan scan) { MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_TOTAL_DISABLE, 1); if (scan.isAutoBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_AUTO_BATCH_DISABLE, 1); } else if (scan.isBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_BATCH_DISABLE, 1); } else { if (scan.isFilterScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_FILTERED_DISABLE, 1); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_UNFILTERED_DISABLE, 1); } } } synchronized void recordScanTimeoutCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_SCAN_TIMEOUT, 1); } static void initScanRadioState() { Loading Loading @@ -374,20 +413,20 @@ import java.util.Objects; if (!sIsRadioStarted) { return; } MetricsLogger logger = MetricsLogger.getInstance(); long currentTime = SystemClock.elapsedRealtime(); long radioScanDuration = currentTime - sRadioStartTime; double scanWeight = getScanWeight(sRadioScanMode) * 0.01; long weightedDuration = (long) (radioScanDuration * scanWeight); if (weightedDuration > 0) { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR, weightedDuration); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR, weightedDuration); if (sIsScreenOn) { MetricsLogger.getInstance().cacheCount( logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_ON, weightedDuration); } else { MetricsLogger.getInstance().cacheCount( logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_OFF, weightedDuration); } Loading Loading @@ -427,15 +466,32 @@ import java.util.Objects; if (!sIsRadioStarted) { return; } MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR, 1); MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR, 1); if (sIsScreenOn) { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_ON, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_ON, 1); } else { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_OFF, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_OFF, 1); } } } static void recordBatchScanRadioResultCount(int numRecords) { boolean isScreenOn; synchronized (sLock) { isScreenOn = sIsScreenOn; } MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH, numRecords); if (isScreenOn) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE_SCREEN_ON, 1); logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_SCREEN_ON, numRecords); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE_SCREEN_OFF, 1); logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_SCREEN_OFF, numRecords); } } Loading android/app/src/com/android/bluetooth/gatt/GattService.java +10 −10 Original line number Diff line number Diff line Loading @@ -187,10 +187,9 @@ public class GattService extends ProfileService { UUID.fromString("00001846-0000-1000-8000-00805F9B34FB"), // CSIS }; /** * Example raw beacons captured from a Blue Charm BC011 */ private static final String[] TEST_MODE_BEACONS = new String[] { /** Example raw beacons captured from a Blue Charm BC011 */ private static final String[] TEST_MODE_BEACONS = new String[] { "020106", "0201060303AAFE1716AAFE10EE01626C7565636861726D626561636F6E730009168020691E0EFE13551109426C7565436861726D5F313639363835000000", "0201060303AAFE1716AAFE00EE626C7565636861726D31000000000001000009168020691E0EFE13551109426C7565436861726D5F313639363835000000", Loading Loading @@ -2719,6 +2718,7 @@ public class GattService extends ProfileService { // When in testing mode, ignore all real-world events if (isTestModeEnabled()) return; AppScanStats.recordBatchScanRadioResultCount(numRecords); onBatchScanReportsInternal(status, scannerId, reportType, numRecords, recordData); } Loading android/app/src/com/android/bluetooth/gatt/ScanManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -1365,14 +1365,15 @@ public class ScanManager { + client.scannerId + ")"); setOpportunisticScanClient(client); removeScanFilters(client.scannerId); client.stats.setScanTimeout(client.scannerId); } else { Log.w(TAG, "Moving filtered scan client to downgraded scan (scannerId " + client.scannerId + ")"); client.updateScanMode(ScanSettings.SCAN_MODE_LOW_POWER); client.stats.setScanTimeout(client.scannerId); } client.stats.setScanTimeout(client.scannerId); client.stats.recordScanTimeoutCountMetrics(); } // The scan should continue for background scans Loading Loading
android/app/src/com/android/bluetooth/gatt/AppScanStats.java +66 −10 Original line number Diff line number Diff line Loading @@ -272,6 +272,7 @@ import java.util.Objects; mWorkSourceUtil.getUids(), mWorkSourceUtil.getTags(), BluetoothStatsLog.BLE_SCAN_STATE_CHANGED__STATE__ON, scan.isFilterScan, scan.isBackgroundScan, scan.isOpportunisticScan); recordScanAppCountMetricsStart(scan); mOngoingScans.put(scannerId, scan); } Loading Loading @@ -338,6 +339,44 @@ import java.util.Objects; mWorkSourceUtil.getUids(), mWorkSourceUtil.getTags(), BluetoothStatsLog.BLE_SCAN_STATE_CHANGED__STATE__OFF, scan.isFilterScan, scan.isBackgroundScan, scan.isOpportunisticScan); recordScanAppCountMetricsStop(scan); } private void recordScanAppCountMetricsStart(LastScan scan) { MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_TOTAL_ENABLE, 1); if (scan.isAutoBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_AUTO_BATCH_ENABLE, 1); } else if (scan.isBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_BATCH_ENABLE, 1); } else { if (scan.isFilterScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_FILTERED_ENABLE, 1); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_UNFILTERED_ENABLE, 1); } } } private void recordScanAppCountMetricsStop(LastScan scan) { MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_TOTAL_DISABLE, 1); if (scan.isAutoBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_AUTO_BATCH_DISABLE, 1); } else if (scan.isBatchScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_BATCH_DISABLE, 1); } else { if (scan.isFilterScan) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_FILTERED_DISABLE, 1); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_COUNT_UNFILTERED_DISABLE, 1); } } } synchronized void recordScanTimeoutCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_SCAN_TIMEOUT, 1); } static void initScanRadioState() { Loading Loading @@ -374,20 +413,20 @@ import java.util.Objects; if (!sIsRadioStarted) { return; } MetricsLogger logger = MetricsLogger.getInstance(); long currentTime = SystemClock.elapsedRealtime(); long radioScanDuration = currentTime - sRadioStartTime; double scanWeight = getScanWeight(sRadioScanMode) * 0.01; long weightedDuration = (long) (radioScanDuration * scanWeight); if (weightedDuration > 0) { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR, weightedDuration); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR, weightedDuration); if (sIsScreenOn) { MetricsLogger.getInstance().cacheCount( logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_ON, weightedDuration); } else { MetricsLogger.getInstance().cacheCount( logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RADIO_DURATION_REGULAR_SCREEN_OFF, weightedDuration); } Loading Loading @@ -427,15 +466,32 @@ import java.util.Objects; if (!sIsRadioStarted) { return; } MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR, 1); MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR, 1); if (sIsScreenOn) { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_ON, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_ON, 1); } else { MetricsLogger.getInstance().cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_OFF, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_REGULAR_SCREEN_OFF, 1); } } } static void recordBatchScanRadioResultCount(int numRecords) { boolean isScreenOn; synchronized (sLock) { isScreenOn = sIsScreenOn; } MetricsLogger logger = MetricsLogger.getInstance(); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE, 1); logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH, numRecords); if (isScreenOn) { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE_SCREEN_ON, 1); logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_SCREEN_ON, numRecords); } else { logger.cacheCount(BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_BUNDLE_SCREEN_OFF, 1); logger.cacheCount( BluetoothProtoEnums.LE_SCAN_RESULTS_COUNT_BATCH_SCREEN_OFF, numRecords); } } Loading
android/app/src/com/android/bluetooth/gatt/GattService.java +10 −10 Original line number Diff line number Diff line Loading @@ -187,10 +187,9 @@ public class GattService extends ProfileService { UUID.fromString("00001846-0000-1000-8000-00805F9B34FB"), // CSIS }; /** * Example raw beacons captured from a Blue Charm BC011 */ private static final String[] TEST_MODE_BEACONS = new String[] { /** Example raw beacons captured from a Blue Charm BC011 */ private static final String[] TEST_MODE_BEACONS = new String[] { "020106", "0201060303AAFE1716AAFE10EE01626C7565636861726D626561636F6E730009168020691E0EFE13551109426C7565436861726D5F313639363835000000", "0201060303AAFE1716AAFE00EE626C7565636861726D31000000000001000009168020691E0EFE13551109426C7565436861726D5F313639363835000000", Loading Loading @@ -2719,6 +2718,7 @@ public class GattService extends ProfileService { // When in testing mode, ignore all real-world events if (isTestModeEnabled()) return; AppScanStats.recordBatchScanRadioResultCount(numRecords); onBatchScanReportsInternal(status, scannerId, reportType, numRecords, recordData); } Loading
android/app/src/com/android/bluetooth/gatt/ScanManager.java +3 −2 Original line number Diff line number Diff line Loading @@ -1365,14 +1365,15 @@ public class ScanManager { + client.scannerId + ")"); setOpportunisticScanClient(client); removeScanFilters(client.scannerId); client.stats.setScanTimeout(client.scannerId); } else { Log.w(TAG, "Moving filtered scan client to downgraded scan (scannerId " + client.scannerId + ")"); client.updateScanMode(ScanSettings.SCAN_MODE_LOW_POWER); client.stats.setScanTimeout(client.scannerId); } client.stats.setScanTimeout(client.scannerId); client.stats.recordScanTimeoutCountMetrics(); } // The scan should continue for background scans Loading