1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_METRICS_H_
#define CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_METRICS_H_
#include <string>
#include <vector>
namespace base {
class TimeDelta;
}
namespace device {
class BluetoothUUID;
}
namespace content {
struct BluetoothScanFilter;
// General Metrics
// Enumaration of each Web Bluetooth API entry point.
enum class UMAWebBluetoothFunction {
REQUEST_DEVICE = 0,
CONNECT_GATT = 1,
GET_PRIMARY_SERVICE = 2,
GET_CHARACTERISTIC = 3,
CHARACTERISTIC_READ_VALUE = 4,
CHARACTERISTIC_WRITE_VALUE = 5,
// NOTE: Add new actions immediately above this line. Make sure to update
// the enum list in tools/metrics/histograms/histograms.xml accordingly.
COUNT
};
// There should be a call to this function for every call to the Web Bluetooth
// API.
void RecordWebBluetoothFunctionCall(UMAWebBluetoothFunction function);
// requestDevice() Metrics
enum class UMARequestDeviceOutcome {
SUCCESS = 0,
NO_BLUETOOTH_ADAPTER = 1,
NO_RENDER_FRAME = 2,
OBSOLETE_DISCOVERY_START_FAILED = 3,
OBSOLETE_DISCOVERY_STOP_FAILED = 4,
OBSOLETE_NO_MATCHING_DEVICES_FOUND = 5,
BLUETOOTH_ADAPTER_NOT_PRESENT = 6,
OBSOLETE_BLUETOOTH_ADAPTER_OFF = 7,
CHOSEN_DEVICE_VANISHED = 8,
BLUETOOTH_CHOOSER_CANCELLED = 9,
// NOTE: Add new requestDevice() outcomes immediately above this line. Make
// sure to update the enum list in
// tools/metrics/histograms/histograms.xml accordingly.
COUNT
};
// There should be a call to this function before every
// Send(BluetoothMsg_RequestDeviceSuccess...) or
// Send(BluetoothMsg_RequestDeviceError...).
void RecordRequestDeviceOutcome(UMARequestDeviceOutcome outcome);
// Records stats about the arguments used when calling requestDevice.
// - The number of filters used.
// - The size of each filter.
// - UUID of the services used in filters.
// - Number of optional services used.
// - UUID of the optional services.
// - Size of the union of all services.
void RecordRequestDeviceArguments(
const std::vector<content::BluetoothScanFilter>& filters,
const std::vector<device::BluetoothUUID>& optional_services);
// connectGATT() Metrics
enum class UMAConnectGATTOutcome {
SUCCESS = 0,
NO_DEVICE = 1,
UNKNOWN = 2,
IN_PROGRESS = 3,
FAILED = 4,
AUTH_FAILED = 5,
AUTH_CANCELED = 6,
AUTH_REJECTED = 7,
AUTH_TIMEOUT = 8,
UNSUPPORTED_DEVICE = 9,
// Note: Add new ConnectGATT outcomes immediately above this line. Make sure
// to update the enum list in tools/metrics/histograms/histograms.xml
// accordingly.
COUNT
};
// There should be a call to this function before every
// Send(BluetoothMsg_ConnectGATTSuccess) and
// Send(BluetoothMsg_ConnectGATTError).
void RecordConnectGATTOutcome(UMAConnectGATTOutcome outcome);
// Records how long it took for the connection to succeed.
void RecordConnectGATTTimeSuccess(const base::TimeDelta& duration);
// Records how long it took for the connection to fail.
void RecordConnectGATTTimeFailed(const base::TimeDelta& duration);
// getPrimaryService() Metrics
enum class UMAGetPrimaryServiceOutcome {
SUCCESS = 0,
NO_DEVICE = 1,
NOT_FOUND = 2,
// Note: Add new GetPrimaryService outcomes immediately above this line.
// Make sure to update the enum list in
// tools/metrics/histograms/histograms.xml accordingly.
COUNT
};
// Record the service uuid used when calling getPrimaryService.
void RecordGetPrimaryServiceService(const device::BluetoothUUID& service);
// There should be a call to this function for every call to
// Send(BluetoothMsg_GetPrimaryServiceSuccess) and
// Send(BluetoothMsg_GetPrimaryServiceError).
void RecordGetPrimaryServiceOutcome(UMAGetPrimaryServiceOutcome outcome);
// getCharacteristic() Metrics
enum class UMAGetCharacteristicOutcome {
SUCCESS = 0,
NO_DEVICE = 1,
NO_SERVICE = 2,
NOT_FOUND = 3,
// Note: Add new outcomes immediately above this line.
// Make sure to update the enum list in
// tools/metrisc/histogram/histograms.xml accordingly.
COUNT
};
// There should be a call to this function for every call to
// Send(BluetoothMsg_GetCharacteristicSuccess) and
// Send(BluetoothMsg_GetCharacteristicError).
void RecordGetCharacteristicOutcome(UMAGetCharacteristicOutcome outcome);
// Records the UUID of the characteristic used when calling getCharacteristic.
void RecordGetCharacteristicCharacteristic(const std::string& characteristic);
// GATT Operations Metrics
// These are the possible outcomes when performing GATT operations i.e.
// characteristic.readValue/writeValue descriptor.readValue/writeValue.
enum UMAGATTOperationOutcome {
SUCCESS = 0,
NO_DEVICE = 1,
NO_SERVICE = 2,
NO_CHARACTERISTIC = 3,
NO_DESCRIPTOR = 4,
UNKNOWN = 5,
FAILED = 6,
IN_PROGRESS = 7,
INVALID_LENGTH = 8,
NOT_PERMITTED = 9,
NOT_AUTHORIZED = 10,
NOT_PAIRED = 11,
NOT_SUPPORTED = 12,
// Note: Add new GATT Outcomes immediately above this line.
// Make sure to update the enum list in
// tools/metrics/histograms/histograms.xml accordingly.
COUNT
};
enum class UMAGATTOperation {
CHARACTERISTIC_READ,
CHARACTERISTIC_WRITE,
// Note: Add new GATT Operations immediately above this line.
COUNT
};
// Records the outcome of a GATT operation.
// There should be a call to this function whenever the corresponding operation
// doesn't have a call to Record[Operation]Outcome.
void RecordGATTOperationOutcome(UMAGATTOperation operation,
UMAGATTOperationOutcome outcome);
// Characteristic.readValue() Metrics
// There should be a call to this function for every call to
// Send(BluetoothMsg_ReadCharacteristicValueSuccess) and
// Send(BluetoothMsg_ReadCharacteristicValueError).
void RecordCharacteristicReadValueOutcome(UMAGATTOperationOutcome error);
// Characteristic.writeValue() Metrics
// There should be a call to this function for every call to
// Send(BluetoothMsg_WriteCharacteristicValueSuccess) and
// Send(BluetoothMsg_WriteCharacteristicValueError).
void RecordCharacteristicWriteValueOutcome(UMAGATTOperationOutcome error);
} // namespace content
#endif // CONTENT_BROWSER_BLUETOOTH_BLUETOOTH_METRICS_H_
|