Loading android/app/src/com/android/bluetooth/gatt/ContextMap.java +5 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.le_scan.AppScanStats; import com.android.internal.annotations.GuardedBy; import com.google.common.collect.EvictingQueue; Loading @@ -56,7 +57,7 @@ public class ContextMap<C, T> { /** * Connection class helps map connection IDs to device addresses. */ static class Connection { public static class Connection { public int connId; public String address; public int appId; Loading @@ -73,7 +74,7 @@ public class ContextMap<C, T> { /** * Application entry mapping UUIDs to appIDs and callbacks. */ class App { public class App { /** The UUID of the application */ public UUID uuid; Loading Loading @@ -403,7 +404,7 @@ public class ContextMap<C, T> { /** * Get an application context by the calling Apps name. */ App getByName(String name) { public App getByName(String name) { synchronized (mAppsLock) { Iterator<App> i = mApps.iterator(); while (i.hasNext()) { Loading Loading @@ -656,7 +657,7 @@ public class ContextMap<C, T> { return null; } List<Connection> getConnectionByApp(int appId) { public List<Connection> getConnectionByApp(int appId) { List<Connection> currentConnections = new ArrayList<Connection>(); synchronized (mConnectionsLock) { Iterator<Connection> i = mConnections.iterator(); Loading android/app/src/com/android/bluetooth/gatt/GattService.java +2 −1 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.flags.FeatureFlagsImpl; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.le_scan.AppScanStats; import com.android.bluetooth.le_scan.PeriodicScanManager; import com.android.bluetooth.le_scan.ScanManager; import com.android.bluetooth.util.NumberUtils; Loading Loading @@ -5136,7 +5137,7 @@ public class GattService extends ProfileService { mHandleMap.dump(sb); } void addScanEvent(BluetoothMetricsProto.ScanEvent event) { public void addScanEvent(BluetoothMetricsProto.ScanEvent event) { synchronized (mScanEvents) { if (mScanEvents.size() == NUM_SCAN_EVENTS_KEPT) { mScanEvents.remove(); Loading android/app/src/com/android/bluetooth/gatt/ScanClient.java +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.bluetooth.le.ScanSettings; import android.os.Binder; import android.os.UserHandle; import com.android.bluetooth.le_scan.AppScanStats; import java.util.List; import java.util.Objects; Loading android/app/src/com/android/bluetooth/gatt/AppScanStats.java→android/app/src/com/android/bluetooth/le_scan/AppScanStats.java +37 −34 Original line number Diff line number Diff line Loading @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.bluetooth.gatt; package com.android.bluetooth.le_scan; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.le.ScanFilter; Loading @@ -27,6 +28,8 @@ import com.android.bluetooth.BluetoothMetricsProto; import com.android.bluetooth.BluetoothStatsLog; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.MetricsLogger; import com.android.bluetooth.gatt.ContextMap; import com.android.bluetooth.gatt.GattService; import com.android.bluetooth.util.WorkSourceUtil; import com.android.internal.annotations.GuardedBy; Loading @@ -52,11 +55,11 @@ public class AppScanStats { // Weight is the duty cycle of the scan mode static final int OPPORTUNISTIC_WEIGHT = 0; public static final int SCREEN_OFF_LOW_POWER_WEIGHT = 5; public static final int LOW_POWER_WEIGHT = 10; public static final int AMBIENT_DISCOVERY_WEIGHT = 25; public static final int BALANCED_WEIGHT = 25; public static final int LOW_LATENCY_WEIGHT = 100; static final int SCREEN_OFF_LOW_POWER_WEIGHT = 5; static final int LOW_POWER_WEIGHT = 10; static final int AMBIENT_DISCOVERY_WEIGHT = 25; static final int BALANCED_WEIGHT = 25; static final int LOW_LATENCY_WEIGHT = 100; static final int LARGE_SCAN_TIME_GAP_MS = 24000; Loading Loading @@ -121,8 +124,8 @@ public class AppScanStats { } } public String appName; public WorkSource mWorkSource; // Used for BatteryStatsManager public final WorkSourceUtil mWorkSourceUtil; // Used for BluetoothStatsLog private WorkSource mWorkSource; // Used for BatteryStatsManager private final WorkSourceUtil mWorkSourceUtil; // Used for BluetoothStatsLog private int mScansStarted = 0; private int mScansStopped = 0; public boolean isRegistered = false; Loading @@ -142,9 +145,9 @@ public class AppScanStats { private int mAmbientDiscoveryScan = 0; private List<LastScan> mLastScans = new ArrayList<LastScan>(); private HashMap<Integer, LastScan> mOngoingScans = new HashMap<Integer, LastScan>(); public long startTime = 0; public long stopTime = 0; public int results = 0; private long startTime = 0; private long stopTime = 0; private int results = 0; public AppScanStats(String name, WorkSource source, ContextMap map, GattService service) { appName = name; Loading @@ -161,7 +164,7 @@ public class AppScanStats { mAdapterService = Objects.requireNonNull(AdapterService.getAdapterService()); } synchronized void addResult(int scannerId) { public synchronized void addResult(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan != null) { scan.results++; Loading @@ -186,7 +189,7 @@ public class AppScanStats { return mOngoingScans.get(scannerId); } public synchronized boolean isScanTimeout(int scannerId) { synchronized boolean isScanTimeout(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading @@ -194,7 +197,7 @@ public class AppScanStats { return scan.isTimeout; } public synchronized boolean isScanDowngraded(int scannerId) { synchronized boolean isScanDowngraded(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading @@ -202,7 +205,7 @@ public class AppScanStats { return scan.isDowngraded; } public synchronized boolean isAutoBatchScan(int scannerId) { synchronized boolean isAutoBatchScan(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading Loading @@ -277,7 +280,7 @@ public class AppScanStats { mOngoingScans.put(scannerId, scan); } synchronized void recordScanStop(int scannerId) { public synchronized void recordScanStop(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return; Loading Loading @@ -374,30 +377,30 @@ public class AppScanStats { } } public synchronized void recordScanTimeoutCountMetrics() { synchronized void recordScanTimeoutCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_SCAN_TIMEOUT, 1); } public synchronized void recordHwFilterNotAvailableCountMetrics() { synchronized void recordHwFilterNotAvailableCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_HW_FILTER_NOT_AVAILABLE, 1); } public synchronized void recordTrackingHwFilterNotAvailableCountMetrics() { synchronized void recordTrackingHwFilterNotAvailableCountMetrics() { MetricsLogger.getInstance() .cacheCount( BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_TRACKING_HW_FILTER_NOT_AVAILABLE, 1); } public static void initScanRadioState() { static void initScanRadioState() { synchronized (sLock) { sIsRadioStarted = false; } } public static boolean recordScanRadioStart(int scanMode) { static boolean recordScanRadioStart(int scanMode) { synchronized (sLock) { if (sIsRadioStarted) { return false; Loading @@ -409,7 +412,7 @@ public class AppScanStats { return true; } public static boolean recordScanRadioStop() { static boolean recordScanRadioStop() { synchronized (sLock) { if (!sIsRadioStarted) { return false; Loading Loading @@ -474,7 +477,7 @@ public class AppScanStats { } } static void recordScanRadioResultCount() { public static void recordScanRadioResultCount() { synchronized (sLock) { if (!sIsRadioStarted) { return; Loading @@ -489,7 +492,7 @@ public class AppScanStats { } } static void recordBatchScanRadioResultCount(int numRecords) { public static void recordBatchScanRadioResultCount(int numRecords) { boolean isScreenOn; synchronized (sLock) { isScreenOn = sIsScreenOn; Loading @@ -508,7 +511,7 @@ public class AppScanStats { } } public static void setScreenState(boolean isScreenOn) { static void setScreenState(boolean isScreenOn) { synchronized (sLock) { if (sIsScreenOn == isScreenOn) { return; Loading @@ -522,7 +525,7 @@ public class AppScanStats { } } public synchronized void recordScanSuspend(int scannerId) { synchronized void recordScanSuspend(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null || scan.isSuspended) { return; Loading @@ -531,7 +534,7 @@ public class AppScanStats { scan.isSuspended = true; } public synchronized void recordScanResume(int scannerId) { synchronized void recordScanResume(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); long suspendDuration = 0; if (scan == null || !scan.isSuspended) { Loading @@ -544,7 +547,7 @@ public class AppScanStats { mTotalSuspendTime += suspendDuration; } public synchronized void setScanTimeout(int scannerId) { synchronized void setScanTimeout(int scannerId) { if (!isScanning()) { return; } Loading @@ -555,7 +558,7 @@ public class AppScanStats { } } public synchronized void setScanDowngrade(int scannerId, boolean isDowngrade) { synchronized void setScanDowngrade(int scannerId, boolean isDowngrade) { if (!isScanning()) { return; } Loading @@ -566,14 +569,14 @@ public class AppScanStats { } } public synchronized void setAutoBatchScan(int scannerId, boolean isBatchScan) { synchronized void setAutoBatchScan(int scannerId, boolean isBatchScan) { LastScan scan = getScanFromScannerId(scannerId); if (scan != null) { scan.isAutoBatchScan = isBatchScan; } } synchronized boolean isScanningTooFrequently() { public synchronized boolean isScanningTooFrequently() { if (mLastScans.size() < mAdapterService.getScanQuotaCount()) { return false; } Loading @@ -582,7 +585,7 @@ public class AppScanStats { < mAdapterService.getScanQuotaWindowMillis(); } public synchronized boolean isScanningTooLong() { synchronized boolean isScanningTooLong() { if (!isScanning()) { return false; } Loading @@ -590,7 +593,7 @@ public class AppScanStats { >= mAdapterService.getScanTimeoutMillis(); } public synchronized boolean hasRecentScan() { synchronized boolean hasRecentScan() { if (!isScanning() || mLastScans.isEmpty()) { return false; } Loading Loading @@ -696,7 +699,7 @@ public class AppScanStats { } } synchronized void dumpToString(StringBuilder sb) { public synchronized void dumpToString(StringBuilder sb) { long currentTime = System.currentTimeMillis(); long currTime = SystemClock.elapsedRealtime(); long Score = 0; Loading android/app/src/com/android/bluetooth/le_scan/ScanManager.java +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.BluetoothAdapterProxy; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.gatt.AppScanStats; import com.android.bluetooth.gatt.FilterParams; import com.android.bluetooth.gatt.GattObjectsFactory; import com.android.bluetooth.gatt.GattService; Loading Loading
android/app/src/com/android/bluetooth/gatt/ContextMap.java +5 −4 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; import com.android.bluetooth.BluetoothMethodProxy; import com.android.bluetooth.le_scan.AppScanStats; import com.android.internal.annotations.GuardedBy; import com.google.common.collect.EvictingQueue; Loading @@ -56,7 +57,7 @@ public class ContextMap<C, T> { /** * Connection class helps map connection IDs to device addresses. */ static class Connection { public static class Connection { public int connId; public String address; public int appId; Loading @@ -73,7 +74,7 @@ public class ContextMap<C, T> { /** * Application entry mapping UUIDs to appIDs and callbacks. */ class App { public class App { /** The UUID of the application */ public UUID uuid; Loading Loading @@ -403,7 +404,7 @@ public class ContextMap<C, T> { /** * Get an application context by the calling Apps name. */ App getByName(String name) { public App getByName(String name) { synchronized (mAppsLock) { Iterator<App> i = mApps.iterator(); while (i.hasNext()) { Loading Loading @@ -656,7 +657,7 @@ public class ContextMap<C, T> { return null; } List<Connection> getConnectionByApp(int appId) { public List<Connection> getConnectionByApp(int appId) { List<Connection> currentConnections = new ArrayList<Connection>(); synchronized (mConnectionsLock) { Iterator<Connection> i = mConnections.iterator(); Loading
android/app/src/com/android/bluetooth/gatt/GattService.java +2 −1 Original line number Diff line number Diff line Loading @@ -96,6 +96,7 @@ import com.android.bluetooth.btservice.ProfileService; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.flags.FeatureFlagsImpl; import com.android.bluetooth.flags.Flags; import com.android.bluetooth.le_scan.AppScanStats; import com.android.bluetooth.le_scan.PeriodicScanManager; import com.android.bluetooth.le_scan.ScanManager; import com.android.bluetooth.util.NumberUtils; Loading Loading @@ -5136,7 +5137,7 @@ public class GattService extends ProfileService { mHandleMap.dump(sb); } void addScanEvent(BluetoothMetricsProto.ScanEvent event) { public void addScanEvent(BluetoothMetricsProto.ScanEvent event) { synchronized (mScanEvents) { if (mScanEvents.size() == NUM_SCAN_EVENTS_KEPT) { mScanEvents.remove(); Loading
android/app/src/com/android/bluetooth/gatt/ScanClient.java +2 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import android.bluetooth.le.ScanSettings; import android.os.Binder; import android.os.UserHandle; import com.android.bluetooth.le_scan.AppScanStats; import java.util.List; import java.util.Objects; Loading
android/app/src/com/android/bluetooth/gatt/AppScanStats.java→android/app/src/com/android/bluetooth/le_scan/AppScanStats.java +37 −34 Original line number Diff line number Diff line Loading @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.bluetooth.gatt; package com.android.bluetooth.le_scan; import android.bluetooth.BluetoothProtoEnums; import android.bluetooth.le.ScanFilter; Loading @@ -27,6 +28,8 @@ import com.android.bluetooth.BluetoothMetricsProto; import com.android.bluetooth.BluetoothStatsLog; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.MetricsLogger; import com.android.bluetooth.gatt.ContextMap; import com.android.bluetooth.gatt.GattService; import com.android.bluetooth.util.WorkSourceUtil; import com.android.internal.annotations.GuardedBy; Loading @@ -52,11 +55,11 @@ public class AppScanStats { // Weight is the duty cycle of the scan mode static final int OPPORTUNISTIC_WEIGHT = 0; public static final int SCREEN_OFF_LOW_POWER_WEIGHT = 5; public static final int LOW_POWER_WEIGHT = 10; public static final int AMBIENT_DISCOVERY_WEIGHT = 25; public static final int BALANCED_WEIGHT = 25; public static final int LOW_LATENCY_WEIGHT = 100; static final int SCREEN_OFF_LOW_POWER_WEIGHT = 5; static final int LOW_POWER_WEIGHT = 10; static final int AMBIENT_DISCOVERY_WEIGHT = 25; static final int BALANCED_WEIGHT = 25; static final int LOW_LATENCY_WEIGHT = 100; static final int LARGE_SCAN_TIME_GAP_MS = 24000; Loading Loading @@ -121,8 +124,8 @@ public class AppScanStats { } } public String appName; public WorkSource mWorkSource; // Used for BatteryStatsManager public final WorkSourceUtil mWorkSourceUtil; // Used for BluetoothStatsLog private WorkSource mWorkSource; // Used for BatteryStatsManager private final WorkSourceUtil mWorkSourceUtil; // Used for BluetoothStatsLog private int mScansStarted = 0; private int mScansStopped = 0; public boolean isRegistered = false; Loading @@ -142,9 +145,9 @@ public class AppScanStats { private int mAmbientDiscoveryScan = 0; private List<LastScan> mLastScans = new ArrayList<LastScan>(); private HashMap<Integer, LastScan> mOngoingScans = new HashMap<Integer, LastScan>(); public long startTime = 0; public long stopTime = 0; public int results = 0; private long startTime = 0; private long stopTime = 0; private int results = 0; public AppScanStats(String name, WorkSource source, ContextMap map, GattService service) { appName = name; Loading @@ -161,7 +164,7 @@ public class AppScanStats { mAdapterService = Objects.requireNonNull(AdapterService.getAdapterService()); } synchronized void addResult(int scannerId) { public synchronized void addResult(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan != null) { scan.results++; Loading @@ -186,7 +189,7 @@ public class AppScanStats { return mOngoingScans.get(scannerId); } public synchronized boolean isScanTimeout(int scannerId) { synchronized boolean isScanTimeout(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading @@ -194,7 +197,7 @@ public class AppScanStats { return scan.isTimeout; } public synchronized boolean isScanDowngraded(int scannerId) { synchronized boolean isScanDowngraded(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading @@ -202,7 +205,7 @@ public class AppScanStats { return scan.isDowngraded; } public synchronized boolean isAutoBatchScan(int scannerId) { synchronized boolean isAutoBatchScan(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return false; Loading Loading @@ -277,7 +280,7 @@ public class AppScanStats { mOngoingScans.put(scannerId, scan); } synchronized void recordScanStop(int scannerId) { public synchronized void recordScanStop(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null) { return; Loading Loading @@ -374,30 +377,30 @@ public class AppScanStats { } } public synchronized void recordScanTimeoutCountMetrics() { synchronized void recordScanTimeoutCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_SCAN_TIMEOUT, 1); } public synchronized void recordHwFilterNotAvailableCountMetrics() { synchronized void recordHwFilterNotAvailableCountMetrics() { MetricsLogger.getInstance() .cacheCount(BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_HW_FILTER_NOT_AVAILABLE, 1); } public synchronized void recordTrackingHwFilterNotAvailableCountMetrics() { synchronized void recordTrackingHwFilterNotAvailableCountMetrics() { MetricsLogger.getInstance() .cacheCount( BluetoothProtoEnums.LE_SCAN_ABUSE_COUNT_TRACKING_HW_FILTER_NOT_AVAILABLE, 1); } public static void initScanRadioState() { static void initScanRadioState() { synchronized (sLock) { sIsRadioStarted = false; } } public static boolean recordScanRadioStart(int scanMode) { static boolean recordScanRadioStart(int scanMode) { synchronized (sLock) { if (sIsRadioStarted) { return false; Loading @@ -409,7 +412,7 @@ public class AppScanStats { return true; } public static boolean recordScanRadioStop() { static boolean recordScanRadioStop() { synchronized (sLock) { if (!sIsRadioStarted) { return false; Loading Loading @@ -474,7 +477,7 @@ public class AppScanStats { } } static void recordScanRadioResultCount() { public static void recordScanRadioResultCount() { synchronized (sLock) { if (!sIsRadioStarted) { return; Loading @@ -489,7 +492,7 @@ public class AppScanStats { } } static void recordBatchScanRadioResultCount(int numRecords) { public static void recordBatchScanRadioResultCount(int numRecords) { boolean isScreenOn; synchronized (sLock) { isScreenOn = sIsScreenOn; Loading @@ -508,7 +511,7 @@ public class AppScanStats { } } public static void setScreenState(boolean isScreenOn) { static void setScreenState(boolean isScreenOn) { synchronized (sLock) { if (sIsScreenOn == isScreenOn) { return; Loading @@ -522,7 +525,7 @@ public class AppScanStats { } } public synchronized void recordScanSuspend(int scannerId) { synchronized void recordScanSuspend(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); if (scan == null || scan.isSuspended) { return; Loading @@ -531,7 +534,7 @@ public class AppScanStats { scan.isSuspended = true; } public synchronized void recordScanResume(int scannerId) { synchronized void recordScanResume(int scannerId) { LastScan scan = getScanFromScannerId(scannerId); long suspendDuration = 0; if (scan == null || !scan.isSuspended) { Loading @@ -544,7 +547,7 @@ public class AppScanStats { mTotalSuspendTime += suspendDuration; } public synchronized void setScanTimeout(int scannerId) { synchronized void setScanTimeout(int scannerId) { if (!isScanning()) { return; } Loading @@ -555,7 +558,7 @@ public class AppScanStats { } } public synchronized void setScanDowngrade(int scannerId, boolean isDowngrade) { synchronized void setScanDowngrade(int scannerId, boolean isDowngrade) { if (!isScanning()) { return; } Loading @@ -566,14 +569,14 @@ public class AppScanStats { } } public synchronized void setAutoBatchScan(int scannerId, boolean isBatchScan) { synchronized void setAutoBatchScan(int scannerId, boolean isBatchScan) { LastScan scan = getScanFromScannerId(scannerId); if (scan != null) { scan.isAutoBatchScan = isBatchScan; } } synchronized boolean isScanningTooFrequently() { public synchronized boolean isScanningTooFrequently() { if (mLastScans.size() < mAdapterService.getScanQuotaCount()) { return false; } Loading @@ -582,7 +585,7 @@ public class AppScanStats { < mAdapterService.getScanQuotaWindowMillis(); } public synchronized boolean isScanningTooLong() { synchronized boolean isScanningTooLong() { if (!isScanning()) { return false; } Loading @@ -590,7 +593,7 @@ public class AppScanStats { >= mAdapterService.getScanTimeoutMillis(); } public synchronized boolean hasRecentScan() { synchronized boolean hasRecentScan() { if (!isScanning() || mLastScans.isEmpty()) { return false; } Loading Loading @@ -696,7 +699,7 @@ public class AppScanStats { } } synchronized void dumpToString(StringBuilder sb) { public synchronized void dumpToString(StringBuilder sb) { long currentTime = System.currentTimeMillis(); long currTime = SystemClock.elapsedRealtime(); long Score = 0; Loading
android/app/src/com/android/bluetooth/le_scan/ScanManager.java +0 −1 Original line number Diff line number Diff line Loading @@ -47,7 +47,6 @@ import com.android.bluetooth.Utils; import com.android.bluetooth.btservice.AdapterService; import com.android.bluetooth.btservice.BluetoothAdapterProxy; import com.android.bluetooth.flags.FeatureFlags; import com.android.bluetooth.gatt.AppScanStats; import com.android.bluetooth.gatt.FilterParams; import com.android.bluetooth.gatt.GattObjectsFactory; import com.android.bluetooth.gatt.GattService; Loading