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

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac_metrics.mm

Issue 2912633002: bluetooth: macOS: Adding histograms for NSError values (Closed)
Patch Set: Created 3 years, 6 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "device/bluetooth/bluetooth_adapter_mac_metrics.h"
6
7 #import <CoreBluetooth/CoreBluetooth.h>
8 #import <Foundation/Foundation.h>
9
10 #include "base/metrics/histogram_macros.h"
11
12 namespace {
13
14 #if !defined(MAC_OS_X_VERSION_10_11)
15 // Available with macOS 10.11 SDK or after.
16 const NSInteger CBErrorMaxConnection = 11;
17 #endif // !defined(MAC_OS_X_VERSION_10_11)
18
19 WebBluetoothMacOSErrors GetWebBluetoothMacOSErrorsFromNSError(NSError* error) {
20 NSString* error_domain = [error domain];
21 NSInteger error_code = [error code];
22 if ([error_domain isEqualToString:CBErrorDomain]) {
ortuno 2017/05/31 06:59:52 We don't need all these enums. We can just histogr
jlebel 2017/06/13 22:31:37 So I would have to do: if ([error_domain isEqualTo
ortuno 2017/06/14 03:46:29 Yup, what's the difference between CBErrorDomain a
jlebel 2017/06/19 07:07:49 Both errors from CBErrorDomain and CBATTErrorDomai
ortuno 2017/06/20 05:59:40 I see. Let's do what you propose instead of using
23 switch (static_cast<CBError>(error_code)) {
24 case CBErrorUnknown:
25 return WebBluetoothMacOSErrors::
26 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_UNKNOWN;
27 case CBErrorInvalidParameters:
28 return WebBluetoothMacOSErrors::
29 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_INVALID_PARAMETERS;
30 case CBErrorInvalidHandle:
31 return WebBluetoothMacOSErrors::
32 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_INVALID_HANDLE;
33 case CBErrorNotConnected:
34 return WebBluetoothMacOSErrors::
35 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_NOT_CONNECTED;
36 case CBErrorOutOfSpace:
37 return WebBluetoothMacOSErrors::
38 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_OUT_OF_SPACE;
39 case CBErrorOperationCancelled:
40 return WebBluetoothMacOSErrors::
41 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_OPERATION_CANCELLED;
42 case CBErrorConnectionTimeout:
43 return WebBluetoothMacOSErrors::
44 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_CONNECTION_TIMEOUT;
45 case CBErrorPeripheralDisconnected:
46 return WebBluetoothMacOSErrors::
47 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_PERIPHERAL_DISCONNECTED;
48 case CBErrorUUIDNotAllowed:
49 return WebBluetoothMacOSErrors::
50 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_UUID_NOT_ALLOWED;
51 case CBErrorAlreadyAdvertising:
52 return WebBluetoothMacOSErrors::
53 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_ALREADY_ADVERTISING;
54 #if defined(MAC_OS_X_VERSION_10_11)
55 case CBErrorMaxConnection:
56 return WebBluetoothMacOSErrors::
57 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX_CONNECTION;
58 #endif // defined(MAC_OS_X_VERSION_10_11)
59 }
60 #if !defined(MAC_OS_X_VERSION_10_11)
61 if (error_code == CBErrorMaxConnection) {
62 return WebBluetoothMacOSErrors::
63 WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX_CONNECTION;
64 }
65 #endif // !defined(MAC_OS_X_VERSION_10_11)
66 return WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_CBERROR_MAX;
67 } else if ([error_domain isEqualToString:CBATTErrorDomain]) {
68 switch (static_cast<CBATTError>(error_code)) {
69 case CBATTErrorSuccess:
70 return WebBluetoothMacOSErrors::
71 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_SUCCESS;
72 case CBATTErrorInvalidHandle:
73 return WebBluetoothMacOSErrors::
74 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_HANDLE;
75 case CBATTErrorReadNotPermitted:
76 return WebBluetoothMacOSErrors::
77 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_READ_NOT_PERMITTED;
78 case CBATTErrorWriteNotPermitted:
79 return WebBluetoothMacOSErrors::
80 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_WRITE_NOT_PERMITTED;
81 case CBATTErrorInvalidPdu:
82 return WebBluetoothMacOSErrors::
83 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_PDU;
84 case CBATTErrorInsufficientAuthentication:
85 return WebBluetoothMacOSErrors::
86 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_AUTHENTICATION;
87 case CBATTErrorRequestNotSupported:
88 return WebBluetoothMacOSErrors::
89 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_REQUEST_NOT_SUPPORTED;
90 case CBATTErrorInvalidOffset:
91 return WebBluetoothMacOSErrors::
92 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_OFFSET;
93 case CBATTErrorInsufficientAuthorization:
94 return WebBluetoothMacOSErrors::
95 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_AUTHORIZATION;
96 case CBATTErrorPrepareQueueFull:
97 return WebBluetoothMacOSErrors::
98 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_PREPARE_QUEUE_FULL;
99 case CBATTErrorAttributeNotFound:
100 return WebBluetoothMacOSErrors::
101 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_ATTRIBUTE_NOT_FOUND;
102 case CBATTErrorAttributeNotLong:
103 return WebBluetoothMacOSErrors::
104 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_ATTRIBUTE_NOT_LONG;
105 case CBATTErrorInsufficientEncryptionKeySize:
106 return WebBluetoothMacOSErrors::
107 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_ENCRYPTION_KEY_S IZE;
108 case CBATTErrorInvalidAttributeValueLength:
109 return WebBluetoothMacOSErrors::
110 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INVALID_ATTRIBUTE_VALUE_LENGT H;
111 case CBATTErrorUnlikelyError:
112 return WebBluetoothMacOSErrors::
113 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_UNLIKELY_ERROR;
114 case CBATTErrorInsufficientEncryption:
115 return WebBluetoothMacOSErrors::
116 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_ENCRYPTION;
117 case CBATTErrorUnsupportedGroupType:
118 return WebBluetoothMacOSErrors::
119 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_UNSUPPORTED_GROUP_TYPE;
120 case CBATTErrorInsufficientResources:
121 return WebBluetoothMacOSErrors::
122 WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_INSUFFICIENT_RESOURCES;
123 }
124 return WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_CBATT_ERROR_MAX;
125 }
126 return WebBluetoothMacOSErrors::
127 WEB_BLUETOOTH_MACOS_ERRORS_UNKNOWN_ERROR_DOMAIN;
128 }
129
130 } // namespace
131
132 void LogNSErrorToHistogram(NSError* error,
ortuno 2017/05/31 06:59:52 Add if (error == nil) { return; } That way we
jlebel 2017/06/13 22:31:37 Done.
133 WebBluetoothMacOSAPIs web_bluetooth_macos_apis) {
134 WebBluetoothMacOSErrors histogram_macos_error =
135 GetWebBluetoothMacOSErrorsFromNSError(error);
136 switch (web_bluetooth_macos_apis) {
137 case WebBluetoothMacOSAPIs::
138 WEB_BLUETOOTH_MACOS_APIS_DID_FAIL_TO_CONNECT_TO_PERIPHERAL:
139 UMA_HISTOGRAM_ENUMERATION(
140 "Bluetooth.Web.MacOS.Errors.DidFailToConnectToPeripheral",
141 static_cast<int>(histogram_macos_error),
142 static_cast<int>(
143 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
144 break;
145 case WebBluetoothMacOSAPIs::
146 WEB_BLUETOOTH_MACOS_APIS_DID_DISCONNECT_PERIPHERAL:
147 UMA_HISTOGRAM_ENUMERATION(
148 "Bluetooth.Web.MacOS.Errors.DidDisconnectPeripheral",
149 static_cast<int>(histogram_macos_error),
150 static_cast<int>(
151 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
152 break;
153 case WebBluetoothMacOSAPIs::
154 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_PRIMARY_SERVICES:
155 UMA_HISTOGRAM_ENUMERATION(
156 "Bluetooth.Web.MacOS.Errors.DidDiscoverPrimaryServices",
157 static_cast<int>(histogram_macos_error),
158 static_cast<int>(
159 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
160 break;
161 case WebBluetoothMacOSAPIs::
162 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_CHARACTERISTICS:
163 UMA_HISTOGRAM_ENUMERATION(
164 "Bluetooth.Web.MacOS.Errors.DidDiscoverCharacteristics",
165 static_cast<int>(histogram_macos_error),
166 static_cast<int>(
167 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
168 break;
169 case WebBluetoothMacOSAPIs::WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_VALUE:
170 UMA_HISTOGRAM_ENUMERATION(
171 "Bluetooth.Web.MacOS.Errors.DidUpdateValue",
172 static_cast<int>(histogram_macos_error),
173 static_cast<int>(
174 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
175 break;
176 case WebBluetoothMacOSAPIs::WEB_BLUETOOTH_MACOS_APIS_DID_WRITE_VALUE:
177 UMA_HISTOGRAM_ENUMERATION(
178 "Bluetooth.Web.MacOS.Errors.DidWriteValue",
179 static_cast<int>(histogram_macos_error),
180 static_cast<int>(
181 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
182 break;
183 case WebBluetoothMacOSAPIs::
184 WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_NOTIFICATION_STATE:
185 UMA_HISTOGRAM_ENUMERATION(
186 "Bluetooth.Web.MacOS.Errors.DidUpdateNotificationState",
187 static_cast<int>(histogram_macos_error),
188 static_cast<int>(
189 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
190 break;
191 case WebBluetoothMacOSAPIs::
192 WEB_BLUETOOTH_MACOS_APIS_DID_DISCOVER_DESCRIPTORS:
193 UMA_HISTOGRAM_ENUMERATION(
194 "Bluetooth.Web.MacOS.Errors.DidDiscoverDescriptors",
195 static_cast<int>(histogram_macos_error),
196 static_cast<int>(
197 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
198 break;
199 case WebBluetoothMacOSAPIs::
200 WEB_BLUETOOTH_MACOS_APIS_DID_UPDATE_VALUE_FOR_DESCRIPTOR:
201 UMA_HISTOGRAM_ENUMERATION(
202 "Bluetooth.Web.MacOS.Errors.DidUpdateValueForDescriptor",
203 static_cast<int>(histogram_macos_error),
204 static_cast<int>(
205 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
206 break;
207 case WebBluetoothMacOSAPIs::
208 WEB_BLUETOOTH_MACOS_APIS_DID_WRITE_VALUE_FOR_DESCRIPTOR:
209 UMA_HISTOGRAM_ENUMERATION(
210 "Bluetooth.Web.MacOS.Errors.DidWriteValueForDescriptor",
211 static_cast<int>(histogram_macos_error),
212 static_cast<int>(
213 WebBluetoothMacOSErrors::WEB_BLUETOOTH_MACOS_ERRORS_MAX));
214 break;
215 }
216 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698