summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAjay Panicker <apanicke@google.com>2016-03-08 19:54:18 -0800
committerAndre Eisenbach <eisenbach@google.com>2016-03-23 19:21:58 +0000
commite90db937c008f365f47e7199d6d86f9eb13bed1e (patch)
tree91815ee726c687e906258aa04cbf8537dbbf1017
parent55296d1fb8e3daef4681205a9591f0af522b099e (diff)
downloadandroid_packages_apps_Bluetooth-e90db937c008f365f47e7199d6d86f9eb13bed1e.tar.gz
android_packages_apps_Bluetooth-e90db937c008f365f47e7199d6d86f9eb13bed1e.tar.bz2
android_packages_apps_Bluetooth-e90db937c008f365f47e7199d6d86f9eb13bed1e.zip
Add scan results to scan stats
Ex: GATT Client Map Entries: 1 no.nordicsemi.android.mcp LE scans (started/stopped) : 3 / 3 Scan time in ms (min/max/avg/total): 3050 / 6901 / 4815 / 14447 Total number of results : 338 Last 3 scans : 1970/01/01 08:20:06 - 6901ms 0 results 1970/01/01 08:20:13 - 4496ms 171 results 1970/01/01 08:20:39 - 3050ms 167 results Bug: 27294154 Change-Id: I32fd6da035f2c37302a105733ac6a9817547b7a3
-rw-r--r--src/com/android/bluetooth/gatt/AppScanStats.java25
-rw-r--r--src/com/android/bluetooth/gatt/ContextMap.java39
-rw-r--r--src/com/android/bluetooth/gatt/GattService.java33
3 files changed, 63 insertions, 34 deletions
diff --git a/src/com/android/bluetooth/gatt/AppScanStats.java b/src/com/android/bluetooth/gatt/AppScanStats.java
index a65e80302..a6257f441 100644
--- a/src/com/android/bluetooth/gatt/AppScanStats.java
+++ b/src/com/android/bluetooth/gatt/AppScanStats.java
@@ -35,11 +35,15 @@ import com.android.bluetooth.btservice.BluetoothProto;
/* ContextMap here is needed to grab Apps and Connections */
ContextMap contextMap;
+ /* GattService is needed to add scan event protos to be dumped later */
+ GattService gattService;
+
class LastScan {
long duration;
long timestamp;
boolean opportunistic;
boolean background;
+ int results;
public LastScan(long timestamp, long duration,
boolean opportunistic, boolean background) {
@@ -47,6 +51,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
this.timestamp = timestamp;
this.opportunistic = opportunistic;
this.background = background;
+ this.results = 0;
}
}
@@ -63,10 +68,19 @@ import com.android.bluetooth.btservice.BluetoothProto;
List<LastScan> lastScans = new ArrayList<LastScan>(NUM_SCAN_DURATIONS_KEPT + 1);
long startTime = 0;
long stopTime = 0;
+ int results = 0;
- public AppScanStats(String name, ContextMap map) {
+ public AppScanStats(String name, ContextMap map, GattService service) {
appName = name;
contextMap = map;
+ gattService = service;
+ }
+
+ synchronized void addResult() {
+ if (!lastScans.isEmpty())
+ lastScans.get(lastScans.size() - 1).results++;
+
+ results++;
}
synchronized void recordScanStart(ScanSettings settings) {
@@ -89,7 +103,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
scanEvent.setScanTechnologyType(BluetoothProto.ScanEvent.SCAN_TECH_TYPE_LE);
scanEvent.setInitiator(appName);
scanEvent.setEventTimeMillis(System.currentTimeMillis());
- contextMap.addScanEvent(scanEvent);
+ gattService.addScanEvent(scanEvent);
}
synchronized void recordScanStop() {
@@ -117,7 +131,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
scanEvent.setScanTechnologyType(BluetoothProto.ScanEvent.SCAN_TECH_TYPE_LE);
scanEvent.setInitiator(appName);
scanEvent.setEventTimeMillis(System.currentTimeMillis());
- contextMap.addScanEvent(scanEvent);
+ gattService.addScanEvent(scanEvent);
}
synchronized void dumpToString(StringBuilder sb) {
@@ -159,6 +173,8 @@ import com.android.bluetooth.btservice.BluetoothProto;
maxScan + " / " +
avgScan + " / " +
totalScanTime + "\n");
+ sb.append(" Total number of results : " +
+ results + "\n");
if (lastScans.size() != 0) {
int lastScansSize = scansStopped < NUM_SCAN_DURATIONS_KEPT ?
@@ -172,7 +188,8 @@ import com.android.bluetooth.btservice.BluetoothProto;
sb.append(" " + dateFormat.format(timestamp) + " - ");
sb.append(scan.duration + "ms ");
if (scan.opportunistic) sb.append("Opp ");
- if (scan.background) sb.append("Back");
+ if (scan.background) sb.append("Back ");
+ sb.append(scan.results + " results");
sb.append("\n");
}
}
diff --git a/src/com/android/bluetooth/gatt/ContextMap.java b/src/com/android/bluetooth/gatt/ContextMap.java
index 41b34e3e0..6f9025d6d 100644
--- a/src/com/android/bluetooth/gatt/ContextMap.java
+++ b/src/com/android/bluetooth/gatt/ContextMap.java
@@ -40,7 +40,6 @@ import com.android.bluetooth.btservice.BluetoothProto;
*/
/*package*/ class ContextMap<T> {
private static final String TAG = GattServiceConfig.TAG_PREFIX + "ContextMap";
- static final int NUM_SCAN_EVENTS_KEPT = 20;
/**
* Connection class helps map connection IDs to device addresses.
@@ -72,6 +71,9 @@ import com.android.bluetooth.btservice.BluetoothProto;
/** The package name of the application */
String name;
+ /** Statistics for this app */
+ AppScanStats appScanStats;
+
/** Application callbacks */
T callback;
@@ -87,10 +89,11 @@ import com.android.bluetooth.btservice.BluetoothProto;
/**
* Creates a new app context.
*/
- App(UUID uuid, T callback, String name) {
+ App(UUID uuid, T callback, String name, AppScanStats appScanStats) {
this.uuid = uuid;
this.callback = callback;
this.name = name;
+ this.appScanStats = appScanStats;
}
/**
@@ -136,28 +139,24 @@ import com.android.bluetooth.btservice.BluetoothProto;
/** Internal map to keep track of logging information by app name */
HashMap<String, AppScanStats> mAppScanStats = new HashMap<String, AppScanStats>();
- /** Internal list of scan events to use with the proto */
- ArrayList<BluetoothProto.ScanEvent> mScanEvents =
- new ArrayList<BluetoothProto.ScanEvent>(NUM_SCAN_EVENTS_KEPT);
-
/** Internal list of connected devices **/
Set<Connection> mConnections = new HashSet<Connection>();
/**
* Add an entry to the application context list.
*/
- void add(UUID uuid, T callback, Context context) {
- String appName = context.getPackageManager().getNameForUid(
+ void add(UUID uuid, T callback, GattService service) {
+ String appName = service.getPackageManager().getNameForUid(
Binder.getCallingUid());
if (appName == null) {
// Assign an app name if one isn't found
appName = "Unknown App (UID: " + Binder.getCallingUid() + ")";
}
synchronized (mApps) {
- mApps.add(new App(uuid, callback, appName));
AppScanStats appScanStats = mAppScanStats.get(appName);
+ mApps.add(new App(uuid, callback, appName, appScanStats));
if (appScanStats == null) {
- appScanStats = new AppScanStats(appName, this);
+ appScanStats = new AppScanStats(appName, this, service);
mAppScanStats.put(appName, appScanStats);
}
appScanStats.isRegistered = true;
@@ -174,7 +173,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
App entry = i.next();
if (entry.uuid.equals(uuid)) {
entry.unlinkToDeath();
- mAppScanStats.get(entry.name).isRegistered = false;
+ entry.appScanStats.isRegistered = false;
i.remove();
break;
}
@@ -273,7 +272,7 @@ import com.android.bluetooth.btservice.BluetoothProto;
AppScanStats getAppScanStatsById(int id) {
App temp = getById(id);
if (temp != null) {
- return mAppScanStats.get(temp.name);
+ return temp.appScanStats;
}
return null;
}
@@ -380,14 +379,6 @@ import com.android.bluetooth.btservice.BluetoothProto;
return connectedmap;
}
- void addScanEvent(BluetoothProto.ScanEvent event) {
- synchronized(mScanEvents) {
- if (mScanEvents.size() == NUM_SCAN_EVENTS_KEPT)
- mScanEvents.remove(0);
- mScanEvents.add(event);
- }
- }
-
/**
* Logs debug information.
*/
@@ -403,12 +394,4 @@ import com.android.bluetooth.btservice.BluetoothProto;
appScanStats.dumpToString(sb);
}
}
-
- void dumpProto(BluetoothProto.BluetoothLog proto) {
- synchronized(mScanEvents) {
- for (BluetoothProto.ScanEvent event : mScanEvents) {
- proto.addScanEvent(event);
- }
- }
- }
}
diff --git a/src/com/android/bluetooth/gatt/GattService.java b/src/com/android/bluetooth/gatt/GattService.java
index 60d5e3fd0..7aea6ec5a 100644
--- a/src/com/android/bluetooth/gatt/GattService.java
+++ b/src/com/android/bluetooth/gatt/GattService.java
@@ -128,6 +128,13 @@ public class GattService extends ProfileService {
private Map<Integer, List<BluetoothGattService>> gattClientDatabases =
new HashMap<Integer, List<BluetoothGattService>>();
+ static final int NUM_SCAN_EVENTS_KEPT = 20;
+ /**
+ * Internal list of scan events to use with the proto
+ */
+ ArrayList<BluetoothProto.ScanEvent> mScanEvents =
+ new ArrayList<BluetoothProto.ScanEvent>(NUM_SCAN_EVENTS_KEPT);
+
private ServiceDeclaration addDeclaration() {
synchronized (mServiceDeclarations) {
mServiceDeclarations.add(new ServiceDeclaration());
@@ -592,6 +599,8 @@ public class GattService extends ProfileService {
if (VDBG) Log.d(TAG, "onScanResult() - address=" + address
+ ", rssi=" + rssi);
List<UUID> remoteUuids = parseUuids(adv_data);
+ addScanResult();
+
for (ScanClient client : mScanManager.getRegularScanQueue()) {
if (client.uuids.length > 0) {
int matches = 0;
@@ -621,6 +630,7 @@ public class GattService extends ProfileService {
ScanSettings settings = client.settings;
if ((settings.getCallbackType() &
ScanSettings.CALLBACK_TYPE_ALL_MATCHES) != 0) {
+ app.appScanStats.addResult();
app.callback.onScanResult(result);
}
} catch (RemoteException e) {
@@ -2228,10 +2238,29 @@ public class GattService extends ProfileService {
mHandleMap.dump(sb);
}
+ void addScanResult() {
+ if (mScanEvents.isEmpty())
+ return;
+
+ BluetoothProto.ScanEvent curr = mScanEvents.get(mScanEvents.size() - 1);
+ curr.setNumberResults(curr.getNumberResults() + 1);
+ }
+
+ void addScanEvent(BluetoothProto.ScanEvent event) {
+ synchronized(mScanEvents) {
+ if (mScanEvents.size() == NUM_SCAN_EVENTS_KEPT)
+ mScanEvents.remove(0);
+ mScanEvents.add(event);
+ }
+ }
+
@Override
public void dumpProto(BluetoothProto.BluetoothLog proto) {
- mClientMap.dumpProto(proto);
- mServerMap.dumpProto(proto);
+ synchronized(mScanEvents) {
+ for (BluetoothProto.ScanEvent event : mScanEvents) {
+ proto.addScanEvent(event);
+ }
+ }
}
/**************************************************************************