xref: /aosp_15_r20/external/webrtc/api/uma_metrics.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright 2014 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker // This file contains enums related to Chrome UMA histograms. See
12*d9f75844SAndroid Build Coastguard Worker // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#requirements
13*d9f75844SAndroid Build Coastguard Worker // for requirements when adding or changing metrics.
14*d9f75844SAndroid Build Coastguard Worker 
15*d9f75844SAndroid Build Coastguard Worker #ifndef API_UMA_METRICS_H_
16*d9f75844SAndroid Build Coastguard Worker #define API_UMA_METRICS_H_
17*d9f75844SAndroid Build Coastguard Worker 
18*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
19*d9f75844SAndroid Build Coastguard Worker 
20*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
21*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
22*d9f75844SAndroid Build Coastguard Worker enum PeerConnectionAddressFamilyCounter {
23*d9f75844SAndroid Build Coastguard Worker   kPeerConnection_IPv4 = 0,
24*d9f75844SAndroid Build Coastguard Worker   kPeerConnection_IPv6 = 1,
25*d9f75844SAndroid Build Coastguard Worker   kBestConnections_IPv4 = 2,
26*d9f75844SAndroid Build Coastguard Worker   kBestConnections_IPv6 = 3,
27*d9f75844SAndroid Build Coastguard Worker   kPeerConnectionAddressFamilyCounter_Max
28*d9f75844SAndroid Build Coastguard Worker };
29*d9f75844SAndroid Build Coastguard Worker 
30*d9f75844SAndroid Build Coastguard Worker // This enum defines types for UMA samples, which will have a range.
31*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
32*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
33*d9f75844SAndroid Build Coastguard Worker enum PeerConnectionMetricsName {
34*d9f75844SAndroid Build Coastguard Worker   kNetworkInterfaces_IPv4 = 0,  // Number of IPv4 interfaces.
35*d9f75844SAndroid Build Coastguard Worker   kNetworkInterfaces_IPv6 = 1,  // Number of IPv6 interfaces.
36*d9f75844SAndroid Build Coastguard Worker   kTimeToConnect = 2,           // In milliseconds.
37*d9f75844SAndroid Build Coastguard Worker   kLocalCandidates_IPv4 = 3,    // Number of IPv4 local candidates.
38*d9f75844SAndroid Build Coastguard Worker   kLocalCandidates_IPv6 = 4,    // Number of IPv6 local candidates.
39*d9f75844SAndroid Build Coastguard Worker   kPeerConnectionMetricsName_Max
40*d9f75844SAndroid Build Coastguard Worker };
41*d9f75844SAndroid Build Coastguard Worker 
42*d9f75844SAndroid Build Coastguard Worker // The IceCandidatePairType has the format of
43*d9f75844SAndroid Build Coastguard Worker // <local_candidate_type>_<remote_candidate_type>. It is recorded based on the
44*d9f75844SAndroid Build Coastguard Worker // type of candidate pair used when the PeerConnection first goes to a completed
45*d9f75844SAndroid Build Coastguard Worker // state. When BUNDLE is enabled, only the first transport gets recorded.
46*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
47*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
48*d9f75844SAndroid Build Coastguard Worker enum IceCandidatePairType {
49*d9f75844SAndroid Build Coastguard Worker   // HostHost is deprecated. It was replaced with the set of types at the bottom
50*d9f75844SAndroid Build Coastguard Worker   // to report private or public host IP address.
51*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostHost = 0,
52*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostSrflx = 1,
53*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostRelay = 2,
54*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPrflx = 3,
55*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairSrflxHost = 4,
56*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairSrflxSrflx = 5,
57*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairSrflxRelay = 6,
58*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairSrflxPrflx = 7,
59*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairRelayHost = 8,
60*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairRelaySrflx = 9,
61*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairRelayRelay = 10,
62*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairRelayPrflx = 11,
63*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairPrflxHost = 12,
64*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairPrflxSrflx = 13,
65*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairPrflxRelay = 14,
66*d9f75844SAndroid Build Coastguard Worker 
67*d9f75844SAndroid Build Coastguard Worker   // The following 9 types tell whether local and remote hosts have hostname,
68*d9f75844SAndroid Build Coastguard Worker   // private or public IP addresses.
69*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPrivateHostPrivate = 15,
70*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPrivateHostPublic = 16,
71*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPublicHostPrivate = 17,
72*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPublicHostPublic = 18,
73*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostNameHostName = 19,
74*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostNameHostPrivate = 20,
75*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostNameHostPublic = 21,
76*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPrivateHostName = 22,
77*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairHostPublicHostName = 23,
78*d9f75844SAndroid Build Coastguard Worker   kIceCandidatePairMax
79*d9f75844SAndroid Build Coastguard Worker };
80*d9f75844SAndroid Build Coastguard Worker 
81*d9f75844SAndroid Build Coastguard Worker // The difference between PeerConnectionEnumCounter and
82*d9f75844SAndroid Build Coastguard Worker // PeerConnectionMetricsName is that the "EnumCounter" is only counting the
83*d9f75844SAndroid Build Coastguard Worker // occurrences of events, while "Name" has a value associated with it which is
84*d9f75844SAndroid Build Coastguard Worker // used to form a histogram.
85*d9f75844SAndroid Build Coastguard Worker 
86*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
87*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
88*d9f75844SAndroid Build Coastguard Worker enum KeyExchangeProtocolMedia {
89*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeDtlsAudio = 0,
90*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeDtlsVideo = 1,
91*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeDtlsData = 2,
92*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeSdesAudio = 3,
93*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeSdesVideo = 4,
94*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeSdesData = 5,
95*d9f75844SAndroid Build Coastguard Worker   kEnumCounterKeyProtocolMediaTypeMax
96*d9f75844SAndroid Build Coastguard Worker };
97*d9f75844SAndroid Build Coastguard Worker 
98*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
99*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
100*d9f75844SAndroid Build Coastguard Worker enum SdpSemanticRequested {
101*d9f75844SAndroid Build Coastguard Worker   kSdpSemanticRequestDefault = 0,
102*d9f75844SAndroid Build Coastguard Worker   kSdpSemanticRequestPlanB = 1,
103*d9f75844SAndroid Build Coastguard Worker   kSdpSemanticRequestUnifiedPlan = 2,
104*d9f75844SAndroid Build Coastguard Worker   kSdpSemanticRequestMax
105*d9f75844SAndroid Build Coastguard Worker };
106*d9f75844SAndroid Build Coastguard Worker 
107*d9f75844SAndroid Build Coastguard Worker // Metric for counting the outcome of adding an ICE candidate
108*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
109*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
110*d9f75844SAndroid Build Coastguard Worker enum AddIceCandidateResult {
111*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateSuccess = 0,
112*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailClosed = 1,
113*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailNoRemoteDescription = 2,
114*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailNullCandidate = 3,
115*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailNotValid = 4,
116*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailNotReady = 5,
117*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailInAddition = 6,
118*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateFailNotUsable = 7,
119*d9f75844SAndroid Build Coastguard Worker   kAddIceCandidateMax
120*d9f75844SAndroid Build Coastguard Worker };
121*d9f75844SAndroid Build Coastguard Worker 
122*d9f75844SAndroid Build Coastguard Worker // Metric for recording which api surface was used to enable simulcast.
123*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
124*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
125*d9f75844SAndroid Build Coastguard Worker enum SimulcastApiVersion {
126*d9f75844SAndroid Build Coastguard Worker   kSimulcastApiVersionNone = 0,
127*d9f75844SAndroid Build Coastguard Worker   kSimulcastApiVersionLegacy = 1,
128*d9f75844SAndroid Build Coastguard Worker   kSimulcastApiVersionSpecCompliant = 2,
129*d9f75844SAndroid Build Coastguard Worker   kSimulcastApiVersionMax
130*d9f75844SAndroid Build Coastguard Worker };
131*d9f75844SAndroid Build Coastguard Worker 
132*d9f75844SAndroid Build Coastguard Worker // Metrics for reporting usage of BUNDLE.
133*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
134*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
135*d9f75844SAndroid Build Coastguard Worker enum BundleUsage {
136*d9f75844SAndroid Build Coastguard Worker   // There are no m-lines in the SDP, only a session description.
137*d9f75844SAndroid Build Coastguard Worker   kBundleUsageEmpty = 0,
138*d9f75844SAndroid Build Coastguard Worker   // Only a data channel is negotiated but BUNDLE is not negotiated.
139*d9f75844SAndroid Build Coastguard Worker   kBundleUsageNoBundleDatachannelOnly = 1,
140*d9f75844SAndroid Build Coastguard Worker   // BUNDLE is not negotiated and there is at most one m-line per media type,
141*d9f75844SAndroid Build Coastguard Worker   kBundleUsageNoBundleSimple = 2,
142*d9f75844SAndroid Build Coastguard Worker   // BUNDLE is not negotiated and there are multiple m-lines per media type,
143*d9f75844SAndroid Build Coastguard Worker   kBundleUsageNoBundleComplex = 3,
144*d9f75844SAndroid Build Coastguard Worker   // Only a data channel is negotiated and BUNDLE is negotiated.
145*d9f75844SAndroid Build Coastguard Worker   kBundleUsageBundleDatachannelOnly = 4,
146*d9f75844SAndroid Build Coastguard Worker   // BUNDLE is negotiated but there is at most one m-line per media type,
147*d9f75844SAndroid Build Coastguard Worker   kBundleUsageBundleSimple = 5,
148*d9f75844SAndroid Build Coastguard Worker   // BUNDLE is negotiated and there are multiple m-lines per media type,
149*d9f75844SAndroid Build Coastguard Worker   kBundleUsageBundleComplex = 6,
150*d9f75844SAndroid Build Coastguard Worker   // Legacy plan-b metrics.
151*d9f75844SAndroid Build Coastguard Worker   kBundleUsageNoBundlePlanB = 7,
152*d9f75844SAndroid Build Coastguard Worker   kBundleUsageBundlePlanB = 8,
153*d9f75844SAndroid Build Coastguard Worker   kBundleUsageMax
154*d9f75844SAndroid Build Coastguard Worker };
155*d9f75844SAndroid Build Coastguard Worker 
156*d9f75844SAndroid Build Coastguard Worker // Metrics for reporting configured BUNDLE policy, mapping directly to
157*d9f75844SAndroid Build Coastguard Worker // https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum
158*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
159*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
160*d9f75844SAndroid Build Coastguard Worker enum BundlePolicyUsage {
161*d9f75844SAndroid Build Coastguard Worker   kBundlePolicyUsageBalanced = 0,
162*d9f75844SAndroid Build Coastguard Worker   kBundlePolicyUsageMaxBundle = 1,
163*d9f75844SAndroid Build Coastguard Worker   kBundlePolicyUsageMaxCompat = 2,
164*d9f75844SAndroid Build Coastguard Worker   kBundlePolicyUsageMax
165*d9f75844SAndroid Build Coastguard Worker };
166*d9f75844SAndroid Build Coastguard Worker 
167*d9f75844SAndroid Build Coastguard Worker // Metrics for provisional answers as described in
168*d9f75844SAndroid Build Coastguard Worker // https://datatracker.ietf.org/doc/html/rfc8829#section-4.1.10.1
169*d9f75844SAndroid Build Coastguard Worker // These values are persisted to logs. Entries should not be renumbered and
170*d9f75844SAndroid Build Coastguard Worker // numeric values should never be reused.
171*d9f75844SAndroid Build Coastguard Worker enum ProvisionalAnswerUsage {
172*d9f75844SAndroid Build Coastguard Worker   kProvisionalAnswerNotUsed = 0,
173*d9f75844SAndroid Build Coastguard Worker   kProvisionalAnswerLocal = 1,
174*d9f75844SAndroid Build Coastguard Worker   kProvisionalAnswerRemote = 2,
175*d9f75844SAndroid Build Coastguard Worker   kProvisionalAnswerMax
176*d9f75844SAndroid Build Coastguard Worker };
177*d9f75844SAndroid Build Coastguard Worker 
178*d9f75844SAndroid Build Coastguard Worker // When adding new metrics please consider using the style described in
179*d9f75844SAndroid Build Coastguard Worker // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#usage
180*d9f75844SAndroid Build Coastguard Worker // instead of the legacy enums used above.
181*d9f75844SAndroid Build Coastguard Worker 
182*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
183*d9f75844SAndroid Build Coastguard Worker 
184*d9f75844SAndroid Build Coastguard Worker #endif  // API_UMA_METRICS_H_
185