Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1020)

Unified Diff: content/browser/bluetooth/bluetooth_dispatcher_host.cc

Issue 1261593004: bluetooth: Add histograms and logging for requestDevice() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-adapter-ff
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/bluetooth/bluetooth_dispatcher_host.cc
diff --git a/content/browser/bluetooth/bluetooth_dispatcher_host.cc b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
index 9870148b7f2ecb1d34d96f59aa2f5d8188d3a4bc..7974b37229950a6bca9aedee5707f19f89a6f536 100644
--- a/content/browser/bluetooth/bluetooth_dispatcher_host.cc
+++ b/content/browser/bluetooth/bluetooth_dispatcher_host.cc
@@ -58,11 +58,151 @@ enum class UMARequestDeviceOutcome {
};
void RecordRequestDeviceOutcome(UMARequestDeviceOutcome outcome) {
- UMA_HISTOGRAM_ENUMERATION("Bluetooth.RequestDevice.Outcome",
+ UMA_HISTOGRAM_ENUMERATION("Bluetooth.Web.RequestDevice.Outcome",
static_cast<int>(outcome),
static_cast<int>(UMARequestDeviceOutcome::COUNT));
}
+enum class UMAGATTServices {
+ UNKNOWN,
+ ALERT_NOTIFICATION,
+ AUTOMATION_IO,
+ BATTERY_SERVICE,
+ BLOOD_PRESSURE,
+ BODY_COMPOSITION,
+ BOND_MANAGEMENT,
+ CONTINUOUS_GLUCOSE_MONITORING,
+ CURRENT_TIME,
+ CYCLING_POWER,
+ CYCLING_SPEED_AND_CADENCE,
+ DEVICE_INFORMATION,
+ ENVIRONMENTAL_SENSING,
+ GENERIC_ACCESS,
+ GENERIC_ATTRIBUTE,
+ GLUCOSE,
+ HEALTH_THERMOMETER,
+ HEART_RATE,
+ HUMAN_INTERFACE_DEVICE,
+ IMMEDIATE_ALERT,
+ INDOOR_POSITIONING,
+ INTERNET_PROTOCOL_SUPPORT,
+ LINK_LOSS,
+ LOCATION_AND_NAVIGATION,
+ NEXT_DST_CHANGE,
+ PHONE_ALERT_STATUS,
+ PULSE_OXIMETER,
+ REFERENCE_TIME_UPDATE,
+ RUNNING_SPEED_AND_CADENCE,
+ SCAN_PARAMETERS,
+ TX_POWER,
+ USER_DATA,
+ WEIGHT_SCALE,
+ // NOTE: Add new services immediately above this line. Make sure to update the
+ // enum list in tools/metrics/histogram/histograms.xml accordingly.
+ COUNT
+};
+
+typedef std::map<BluetoothUUID, UMAGATTServices> BluetoothUUIDToServicesMap;
+
+std::map<BluetoothUUID, UMAGATTServices>* getServiceToEnumMap() {
Jeffrey Yasskin 2015/08/05 19:03:49 I don't really like having to maintain yet another
ortuno 2015/08/10 20:05:50 Done.
+ CR_DEFINE_STATIC_LOCAL(BluetoothUUIDToServicesMap, services, ());
+ if (services.empty()) {
+ services.insert(std::make_pair(BluetoothUUID("1811"),
+ UMAGATTServices::ALERT_NOTIFICATION));
+ services.insert(std::make_pair(BluetoothUUID("180F"),
+ UMAGATTServices::BATTERY_SERVICE));
+ services.insert(
+ std::make_pair(BluetoothUUID("1810"), UMAGATTServices::BLOOD_PRESSURE));
+ services.insert(std::make_pair(BluetoothUUID("181B"),
+ UMAGATTServices::BODY_COMPOSITION));
+ services.insert(std::make_pair(BluetoothUUID("181E"),
+ UMAGATTServices::BOND_MANAGEMENT));
+ services.insert(std::make_pair(
+ BluetoothUUID("181F"), UMAGATTServices::CONTINUOUS_GLUCOSE_MONITORING));
+ services.insert(
+ std::make_pair(BluetoothUUID("1805"), UMAGATTServices::CURRENT_TIME));
+ services.insert(
+ std::make_pair(BluetoothUUID("1818"), UMAGATTServices::CYCLING_POWER));
+ services.insert(std::make_pair(BluetoothUUID("1816"),
+ UMAGATTServices::CYCLING_SPEED_AND_CADENCE));
+ services.insert(std::make_pair(BluetoothUUID("180A"),
+ UMAGATTServices::DEVICE_INFORMATION));
+ services.insert(std::make_pair(BluetoothUUID("181A"),
+ UMAGATTServices::ENVIRONMENTAL_SENSING));
+ services.insert(
+ std::make_pair(BluetoothUUID("1800"), UMAGATTServices::GENERIC_ACCESS));
+ services.insert(std::make_pair(BluetoothUUID("1801"),
+ UMAGATTServices::GENERIC_ATTRIBUTE));
+ services.insert(
+ std::make_pair(BluetoothUUID("1808"), UMAGATTServices::GLUCOSE));
+ services.insert(std::make_pair(BluetoothUUID("1809"),
+ UMAGATTServices::HEALTH_THERMOMETER));
+ services.insert(
+ std::make_pair(BluetoothUUID("180D"), UMAGATTServices::HEART_RATE));
+ services.insert(std::make_pair(BluetoothUUID("1812"),
+ UMAGATTServices::HUMAN_INTERFACE_DEVICE));
+ services.insert(std::make_pair(BluetoothUUID("1802"),
+ UMAGATTServices::IMMEDIATE_ALERT));
+ services.insert(std::make_pair(BluetoothUUID("1821"),
+ UMAGATTServices::INDOOR_POSITIONING));
+ services.insert(std::make_pair(BluetoothUUID("1820"),
+ UMAGATTServices::INTERNET_PROTOCOL_SUPPORT));
+ services.insert(
+ std::make_pair(BluetoothUUID("1803"), UMAGATTServices::LINK_LOSS));
+ services.insert(std::make_pair(BluetoothUUID("1819"),
+ UMAGATTServices::LOCATION_AND_NAVIGATION));
+ services.insert(std::make_pair(BluetoothUUID("1807"),
+ UMAGATTServices::NEXT_DST_CHANGE));
+ services.insert(std::make_pair(BluetoothUUID("180E"),
+ UMAGATTServices::PHONE_ALERT_STATUS));
+ services.insert(std::make_pair(BluetoothUUID("1806"),
+ UMAGATTServices::REFERENCE_TIME_UPDATE));
+ services.insert(std::make_pair(BluetoothUUID("1814"),
+ UMAGATTServices::RUNNING_SPEED_AND_CADENCE));
+ services.insert(std::make_pair(BluetoothUUID("1813"),
+ UMAGATTServices::SCAN_PARAMETERS));
+ services.insert(
+ std::make_pair(BluetoothUUID("1804"), UMAGATTServices::TX_POWER));
+ services.insert(
+ std::make_pair(BluetoothUUID("181C"), UMAGATTServices::USER_DATA));
+ services.insert(
+ std::make_pair(BluetoothUUID("181D"), UMAGATTServices::WEIGHT_SCALE));
+ }
+ return &services;
+}
+
+int GetServiceBucket(const BluetoothUUID& service) {
+ std::map<BluetoothUUID, UMAGATTServices>* services = getServiceToEnumMap();
+ auto it = services->find(service);
+ if (it == services->end())
+ return static_cast<int>(UMAGATTServices::UNKNOWN);
+ return static_cast<int>(it->second);
+}
+
+void RecordRequestDeviceFilters(
+ const std::vector<content::BluetoothScanFilter>& filters) {
+ UMA_HISTOGRAM_COUNTS("Bluetooth.Web.RequestDevice.Filters.Count",
+ filters.size());
+ for (const content::BluetoothScanFilter& filter : filters) {
+ for (const BluetoothUUID& service : filter.services) {
+ UMA_HISTOGRAM_ENUMERATION("Bluetooth.Web.RequestDevice.Filters.Services",
+ GetServiceBucket(service),
+ static_cast<int>(UMAGATTServices::COUNT));
+ }
+ }
+}
+
+void RecordRequestDeviceOptionalServices(
+ const std::vector<BluetoothUUID>& optional_services) {
+ UMA_HISTOGRAM_COUNTS("Bluetooth.Web.RequestDevice.OptionalServices.Count",
+ optional_services.size());
+ for (const BluetoothUUID& service : optional_services) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "Bluetooth.Web.RequestDevice.OptionalServices.Services",
+ GetServiceBucket(service), static_cast<int>(UMAGATTServices::COUNT));
+ }
+}
+
enum class UMAWebBluetoothFunction {
REQUEST_DEVICE,
CONNECT_GATT,
@@ -271,14 +411,27 @@ void BluetoothDispatcherHost::OnRequestDevice(
const std::vector<BluetoothUUID>& optional_services) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction::REQUEST_DEVICE);
+ RecordRequestDeviceFilters(filters);
+ RecordRequestDeviceOptionalServices(optional_services);
+
+ VLOG(1) << "requestDevice called with the following filters: ";
+ for (const BluetoothScanFilter& filter : filters) {
+ VLOG(1) << "[";
+ for (const BluetoothUUID& service : filter.services)
+ VLOG(1) << "\t" << service.value();
+ VLOG(1) << "]";
+ }
+
+ VLOG(1) << "requestDevice called with the following optional services: ";
+ for (const BluetoothUUID& service : optional_services)
+ VLOG(1) << "\t" << service.value();
RenderFrameHostImpl* render_frame_host =
RenderFrameHostImpl::FromID(render_process_id_, frame_routing_id);
if (!render_frame_host) {
- DLOG(WARNING)
- << "Got a requestDevice IPC without a matching RenderFrameHost: "
- << render_process_id_ << ", " << frame_routing_id;
+ VLOG(1) << "Got a requestDevice IPC without a matching RenderFrameHost: "
+ << render_process_id_ << ", " << frame_routing_id;
RecordRequestDeviceOutcome(UMARequestDeviceOutcome::NO_RENDER_FRAME);
Send(new BluetoothMsg_RequestDeviceError(
thread_id, request_id, WebBluetoothError::RequestDeviceWithoutFrame));
@@ -321,7 +474,7 @@ void BluetoothDispatcherHost::OnRequestDevice(
base::Bind(&BluetoothDispatcherHost::OnDiscoverySessionStartedError,
weak_ptr_factory_.GetWeakPtr(), thread_id, request_id));
} else {
- DLOG(WARNING) << "No BluetoothAdapter. Can't serve requestDevice.";
+ VLOG(1) << "No BluetoothAdapter. Can't serve requestDevice.";
RecordRequestDeviceOutcome(UMARequestDeviceOutcome::NO_BLUETOOTH_ADAPTER);
Send(new BluetoothMsg_RequestDeviceError(
thread_id, request_id, WebBluetoothError::NoBluetoothAdapter));
@@ -605,6 +758,10 @@ void BluetoothDispatcherHost::OnDiscoverySessionStopped(int thread_id,
CHECK(session != request_device_sessions_.end());
BluetoothAdapter::DeviceList devices = adapter_->GetDevices();
for (device::BluetoothDevice* device : devices) {
+ VLOG(1) << "Device: " << device->GetName();
+ VLOG(1) << "UUIDs: ";
+ for (BluetoothUUID uuid : device->GetUUIDs())
+ VLOG(1) << "\t" << uuid.canonical_value();
if (MatchesFilters(*device, session->second.filters)) {
content::BluetoothDevice device_ipc(
device->GetAddress(), // instance_id
@@ -626,6 +783,7 @@ void BluetoothDispatcherHost::OnDiscoverySessionStopped(int thread_id,
}
RecordRequestDeviceOutcome(
UMARequestDeviceOutcome::NO_MATCHING_DEVICES_FOUND);
+ VLOG(1) << "No matching Bluetooth Devices found";
Send(new BluetoothMsg_RequestDeviceError(thread_id, request_id,
WebBluetoothError::NoDevicesFound));
request_device_sessions_.erase(session);
« no previous file with comments | « no previous file | tools/metrics/histograms/histograms.xml » ('j') | tools/metrics/histograms/histograms.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698