Chromium Code Reviews| 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 031f17177443abb4c8507430aa4eba6ccaf195dc..310094a5c285bc0bb58fab1a14f54aeb7feae9f6 100644 |
| --- a/content/browser/bluetooth/bluetooth_dispatcher_host.cc |
| +++ b/content/browser/bluetooth/bluetooth_dispatcher_host.cc |
| @@ -111,6 +111,37 @@ void RecordUnionOfServices( |
| union_of_services.size()); |
| } |
| +enum class UMAConnectGATTOutcome { |
| + SUCCESS, |
| + NO_DEVICE, |
| + UNKNOWN, |
| + IN_PROGRESS, |
| + FAILED, |
| + AUTH_FAILED, |
| + AUTH_CANCELED, |
| + AUTH_REJECTED, |
| + AUTH_TIMEOUT, |
| + UNSUPPORTED_DEVICE, |
| + // Note: Add new ConnectGATT outcomes immediately above this line. Make sure |
| + // to update the enum list in tools/metrisc/histogram/histograms.xml |
| + // accordingly. |
| + COUNT |
| +}; |
| + |
| +void RecordConnectGATTOutcome(UMAConnectGATTOutcome outcome) { |
| + UMA_HISTOGRAM_ENUMERATION("Bluetooth.Web.ConnectGATT.Outcome", |
| + static_cast<int>(outcome), |
| + static_cast<int>(UMAConnectGATTOutcome::COUNT)); |
| +} |
| + |
| +void RecordConnectGATTTimeSuccess(const base::TimeDelta& duration) { |
| + UMA_HISTOGRAM_TIMES("Bluetooth.Web.ConnectGATT.TimeSuccess", duration); |
|
Jeffrey Yasskin
2015/08/12 00:35:45
I'm a little worried that 10 seconds won't be enou
ortuno
2015/08/12 16:34:04
Done.
|
| +} |
| + |
| +void RecordConnectGATTTimeFailed(const base::TimeDelta& duration) { |
| + UMA_HISTOGRAM_TIMES("Bluetooth.Web.ConnectGATT.TimeFailed", duration); |
| +} |
| + |
| enum class UMAWebBluetoothFunction { |
| REQUEST_DEVICE, |
| CONNECT_GATT, |
| @@ -171,20 +202,28 @@ WebBluetoothError TranslateConnectError( |
| device::BluetoothDevice::ConnectErrorCode error_code) { |
| switch (error_code) { |
| case device::BluetoothDevice::ERROR_UNKNOWN: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::UNKNOWN); |
| return WebBluetoothError::ConnectUnknownError; |
| case device::BluetoothDevice::ERROR_INPROGRESS: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::IN_PROGRESS); |
| return WebBluetoothError::ConnectAlreadyInProgress; |
| case device::BluetoothDevice::ERROR_FAILED: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::FAILED); |
| return WebBluetoothError::ConnectUnknownFailure; |
| case device::BluetoothDevice::ERROR_AUTH_FAILED: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::AUTH_FAILED); |
| return WebBluetoothError::ConnectAuthFailed; |
| case device::BluetoothDevice::ERROR_AUTH_CANCELED: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::AUTH_CANCELED); |
| return WebBluetoothError::ConnectAuthCanceled; |
| case device::BluetoothDevice::ERROR_AUTH_REJECTED: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::AUTH_REJECTED); |
| return WebBluetoothError::ConnectAuthRejected; |
| case device::BluetoothDevice::ERROR_AUTH_TIMEOUT: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::AUTH_TIMEOUT); |
| return WebBluetoothError::ConnectAuthTimeout; |
| case device::BluetoothDevice::ERROR_UNSUPPORTED_DEVICE: |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::UNSUPPORTED_DEVICE); |
| return WebBluetoothError::ConnectUnsupportedDevice; |
| } |
| NOTREACHED(); |
| @@ -413,6 +452,8 @@ void BluetoothDispatcherHost::OnConnectGATT( |
| // the device. https://crbug.com/484745 |
| device::BluetoothDevice* device = adapter_->GetDevice(device_instance_id); |
| if (device == nullptr) { // See "NETWORK_ERROR Note" above. |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::NO_DEVICE); |
| + VLOG(1) << "Bluetooth Device no longer in range."; |
| Send(new BluetoothMsg_ConnectGATTError( |
| thread_id, request_id, WebBluetoothError::DeviceNoLongerInRange)); |
| return; |
| @@ -420,10 +461,10 @@ void BluetoothDispatcherHost::OnConnectGATT( |
| device->CreateGattConnection( |
| base::Bind(&BluetoothDispatcherHost::OnGATTConnectionCreated, |
| weak_ptr_factory_.GetWeakPtr(), thread_id, request_id, |
| - device_instance_id), |
| + device_instance_id, base::TimeTicks::Now()), |
|
Jeffrey Yasskin
2015/08/12 00:35:45
Measure the starting time once at the beginning of
ortuno
2015/08/12 16:34:04
Done.
|
| base::Bind(&BluetoothDispatcherHost::OnCreateGATTConnectionError, |
| weak_ptr_factory_.GetWeakPtr(), thread_id, request_id, |
| - device_instance_id)); |
| + device_instance_id, base::TimeTicks::Now())); |
| } |
| void BluetoothDispatcherHost::OnGetPrimaryService( |
| @@ -722,9 +763,12 @@ void BluetoothDispatcherHost::OnGATTConnectionCreated( |
| int thread_id, |
| int request_id, |
| const std::string& device_instance_id, |
| + base::TimeTicks start_time, |
| scoped_ptr<device::BluetoothGattConnection> connection) { |
| // TODO(ortuno): Save the BluetoothGattConnection so we can disconnect |
| // from it. |
| + RecordConnectGATTTimeSuccess(base::TimeTicks::Now() - start_time); |
| + RecordConnectGATTOutcome(UMAConnectGATTOutcome::SUCCESS); |
| Send(new BluetoothMsg_ConnectGATTSuccess(thread_id, request_id, |
| device_instance_id)); |
| } |
| @@ -733,10 +777,12 @@ void BluetoothDispatcherHost::OnCreateGATTConnectionError( |
| int thread_id, |
| int request_id, |
| const std::string& device_instance_id, |
| + base::TimeTicks start_time, |
| device::BluetoothDevice::ConnectErrorCode error_code) { |
| // There was an error creating the ATT Bearer so we reject with |
| // NetworkError. |
| // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothdevice-connectgatt |
| + RecordConnectGATTTimeFailed(base::TimeTicks::Now() - start_time); |
| Send(new BluetoothMsg_ConnectGATTError(thread_id, request_id, |
|
Jeffrey Yasskin
2015/08/12 00:35:45
Comment that RecordConnectGATTOutcome is called by
ortuno
2015/08/12 16:34:04
Done.
|
| TranslateConnectError(error_code))); |
| } |