blob: 4de1ce492a31c9148cde1f1633082dbd3647c0b7 [file] [log] [blame]
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +00001/*
kjellanderb24317b2016-02-10 07:54:43 -08002 * Copyright 2014 The WebRTC project authors. All Rights Reserved.
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +00003 *
kjellanderb24317b2016-02-10 07:54:43 -08004 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +00009 */
10
11// This file contains enums related to IPv4/IPv6 metrics.
12
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020013#ifndef API_UMAMETRICS_H_
14#define API_UMAMETRICS_H_
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000015
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020016#include "rtc_base/refcount.h"
skvlad1d3c7e02017-01-11 17:50:30 -080017
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000018namespace webrtc {
19
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070020// Used to specify which enum counter type we're incrementing in
21// MetricsObserverInterface::IncrementEnumCounter.
22enum PeerConnectionEnumCounterType {
23 kEnumCounterAddressFamily,
24 // For the next 2 counters, we track them separately based on the "first hop"
25 // protocol used by the local candidate. "First hop" means the local candidate
26 // type in the case of non-TURN candidates, and the protocol used to connect
27 // to the TURN server in the case of TURN candidates.
28 kEnumCounterIceCandidatePairTypeUdp,
29 kEnumCounterIceCandidatePairTypeTcp,
Guo-wei Shieh456696a2015-09-30 21:48:54 -070030
31 kEnumCounterAudioSrtpCipher,
32 kEnumCounterAudioSslCipher,
33 kEnumCounterVideoSrtpCipher,
34 kEnumCounterVideoSslCipher,
35 kEnumCounterDataSrtpCipher,
36 kEnumCounterDataSslCipher,
zhihuangd82eee02016-08-26 11:25:05 -070037 kEnumCounterDtlsHandshakeError,
Honghai Zhangd93f50c2016-10-05 11:47:22 -070038 kEnumCounterIceRegathering,
39 kEnumCounterIceRestart,
Harald Alvestrand194939b2018-01-24 16:04:13 +010040 kEnumCounterKeyProtocol,
Harald Alvestrand5dbb5862018-02-13 23:48:00 +010041 kEnumCounterSdpSemanticRequested,
42 kEnumCounterSdpSemanticNegotiated,
Harald Alvestrandf9d0f1d2018-03-02 14:15:26 +010043 kEnumCounterKeyProtocolMediaType,
Steve Anton8e20f172018-03-06 10:55:04 -080044 kEnumCounterSdpFormatReceived,
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070045 kPeerConnectionEnumCounterMax
46};
47
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000048// Currently this contains information related to WebRTC network/transport
49// information.
50
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070051// The difference between PeerConnectionEnumCounter and
52// PeerConnectionMetricsName is that the "EnumCounter" is only counting the
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000053// occurrences of events, while "Name" has a value associated with it which is
54// used to form a histogram.
55
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000056// This enum is backed by Chromium's histograms.xml,
57// chromium/src/tools/metrics/histograms/histograms.xml
58// Existing values cannot be re-ordered and new enums must be added
59// before kBoundary.
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070060enum PeerConnectionAddressFamilyCounter {
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000061 kPeerConnection_IPv4,
62 kPeerConnection_IPv6,
63 kBestConnections_IPv4,
64 kBestConnections_IPv6,
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070065 kPeerConnectionAddressFamilyCounter_Max,
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000066};
67
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000068// TODO(guoweis): Keep previous name here until all references are renamed.
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070069#define kBoundary kPeerConnectionAddressFamilyCounter_Max
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000070
71// TODO(guoweis): Keep previous name here until all references are renamed.
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070072typedef PeerConnectionAddressFamilyCounter PeerConnectionUMAMetricsCounter;
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000073
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000074// This enum defines types for UMA samples, which will have a range.
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000075enum PeerConnectionMetricsName {
76 kNetworkInterfaces_IPv4, // Number of IPv4 interfaces.
77 kNetworkInterfaces_IPv6, // Number of IPv6 interfaces.
78 kTimeToConnect, // In milliseconds.
79 kLocalCandidates_IPv4, // Number of IPv4 local candidates.
80 kLocalCandidates_IPv6, // Number of IPv6 local candidates.
81 kPeerConnectionMetricsName_Max
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +000082};
83
guoweis@webrtc.org7169afd2014-12-04 17:59:29 +000084// TODO(guoweis): Keep previous name here until all references are renamed.
85typedef PeerConnectionMetricsName PeerConnectionUMAMetricsName;
86
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070087// The IceCandidatePairType has the format of
88// <local_candidate_type>_<remote_candidate_type>. It is recorded based on the
89// type of candidate pair used when the PeerConnection first goes to a completed
90// state. When BUNDLE is enabled, only the first transport gets recorded.
91enum IceCandidatePairType {
Guo-wei Shieh3cc834a2015-09-04 15:52:14 -070092 // HostHost is deprecated. It was replaced with the set of types at the bottom
93 // to report private or public host IP address.
Guo-wei Shieh3d564c12015-08-19 16:51:15 -070094 kIceCandidatePairHostHost,
95 kIceCandidatePairHostSrflx,
96 kIceCandidatePairHostRelay,
97 kIceCandidatePairHostPrflx,
98 kIceCandidatePairSrflxHost,
99 kIceCandidatePairSrflxSrflx,
100 kIceCandidatePairSrflxRelay,
101 kIceCandidatePairSrflxPrflx,
102 kIceCandidatePairRelayHost,
103 kIceCandidatePairRelaySrflx,
104 kIceCandidatePairRelayRelay,
105 kIceCandidatePairRelayPrflx,
106 kIceCandidatePairPrflxHost,
107 kIceCandidatePairPrflxSrflx,
108 kIceCandidatePairPrflxRelay,
Guo-wei Shieh3cc834a2015-09-04 15:52:14 -0700109
110 // The following 4 types tell whether local and remote hosts have private or
111 // public IP addresses.
112 kIceCandidatePairHostPrivateHostPrivate,
113 kIceCandidatePairHostPrivateHostPublic,
114 kIceCandidatePairHostPublicHostPrivate,
115 kIceCandidatePairHostPublicHostPublic,
Guo-wei Shieh3d564c12015-08-19 16:51:15 -0700116 kIceCandidatePairMax
117};
118
Harald Alvestrand194939b2018-01-24 16:04:13 +0100119enum KeyExchangeProtocolType {
120 kEnumCounterKeyProtocolDtls,
121 kEnumCounterKeyProtocolSdes,
122 kEnumCounterKeyProtocolMax
123};
124
Harald Alvestrandf9d0f1d2018-03-02 14:15:26 +0100125enum KeyExchangeProtocolMedia {
126 kEnumCounterKeyProtocolMediaTypeDtlsAudio,
127 kEnumCounterKeyProtocolMediaTypeDtlsVideo,
128 kEnumCounterKeyProtocolMediaTypeDtlsData,
129 kEnumCounterKeyProtocolMediaTypeSdesAudio,
130 kEnumCounterKeyProtocolMediaTypeSdesVideo,
131 kEnumCounterKeyProtocolMediaTypeSdesData,
132 kEnumCounterKeyProtocolMediaTypeMax
133};
134
Harald Alvestrand5dbb5862018-02-13 23:48:00 +0100135enum SdpSemanticRequested {
136 kSdpSemanticRequestDefault,
137 kSdpSemanticRequestPlanB,
138 kSdpSemanticRequestUnifiedPlan,
139 kSdpSemanticRequestMax
140};
141
142enum SdpSemanticNegotiated {
143 kSdpSemanticNegotiatedNone,
144 kSdpSemanticNegotiatedPlanB,
145 kSdpSemanticNegotiatedUnifiedPlan,
146 kSdpSemanticNegotiatedMixed,
147 kSdpSemanticNegotiatedMax
148};
149
Steve Anton8e20f172018-03-06 10:55:04 -0800150// Metric which records the format of the received SDP for tracking how much the
151// difference between Plan B and Unified Plan affect users.
152enum SdpFormatReceived {
153 // No audio or video tracks. This is worth special casing since it seems to be
154 // the most common scenario (data-channel only).
155 kSdpFormatReceivedNoTracks,
156 // No more than one audio and one video track. Should be compatible with both
157 // Plan B and Unified Plan endpoints.
158 kSdpFormatReceivedSimple,
159 // More than one audio track or more than one video track in the Plan B format
160 // (e.g., one audio media section with multiple streams).
161 kSdpFormatReceivedComplexPlanB,
162 // More than one audio track or more than one video track in the Unified Plan
163 // format (e.g., two audio media sections).
164 kSdpFormatReceivedComplexUnifiedPlan,
165 kSdpFormatReceivedMax
166};
167
skvlad1d3c7e02017-01-11 17:50:30 -0800168class MetricsObserverInterface : public rtc::RefCountInterface {
169 public:
skvlad1d3c7e02017-01-11 17:50:30 -0800170 // |type| is the type of the enum counter to be incremented. |counter|
171 // is the particular counter in that type. |counter_max| is the next sequence
172 // number after the highest counter.
173 virtual void IncrementEnumCounter(PeerConnectionEnumCounterType type,
174 int counter,
175 int counter_max) {}
176
177 // This is used to handle sparse counters like SSL cipher suites.
178 // TODO(guoweis): Remove the implementation once the dependency's interface
179 // definition is updated.
180 virtual void IncrementSparseEnumCounter(PeerConnectionEnumCounterType type,
Steve Antonf2737d22017-10-31 16:27:34 -0700181 int counter);
skvlad1d3c7e02017-01-11 17:50:30 -0800182
183 virtual void AddHistogramSample(PeerConnectionMetricsName type,
184 int value) = 0;
skvlad1d3c7e02017-01-11 17:50:30 -0800185};
186
187typedef MetricsObserverInterface UMAObserver;
188
buildbot@webrtc.org1567b8c2014-05-08 19:54:16 +0000189} // namespace webrtc
190
Mirko Bonadei92ea95e2017-09-15 06:47:31 +0200191#endif // API_UMAMETRICS_H_