|  | /* | 
|  | *  Copyright 2014 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | // This file contains enums related to Chrome UMA histograms. See | 
|  | // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#requirements | 
|  | // for requirements when adding or changing metrics. | 
|  |  | 
|  | #ifndef API_UMA_METRICS_H_ | 
|  | #define API_UMA_METRICS_H_ | 
|  |  | 
|  | namespace webrtc { | 
|  |  | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum PeerConnectionAddressFamilyCounter { | 
|  | kPeerConnection_IPv4 = 0, | 
|  | kPeerConnection_IPv6 = 1, | 
|  | kBestConnections_IPv4 = 2, | 
|  | kBestConnections_IPv6 = 3, | 
|  | kPeerConnectionAddressFamilyCounter_Max | 
|  | }; | 
|  |  | 
|  | // This enum defines types for UMA samples, which will have a range. | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum PeerConnectionMetricsName { | 
|  | kNetworkInterfaces_IPv4 = 0,  // Number of IPv4 interfaces. | 
|  | kNetworkInterfaces_IPv6 = 1,  // Number of IPv6 interfaces. | 
|  | kTimeToConnect = 2,           // In milliseconds. | 
|  | kLocalCandidates_IPv4 = 3,    // Number of IPv4 local candidates. | 
|  | kLocalCandidates_IPv6 = 4,    // Number of IPv6 local candidates. | 
|  | kPeerConnectionMetricsName_Max | 
|  | }; | 
|  |  | 
|  | // The IceCandidatePairType has the format of | 
|  | // <local_candidate_type>_<remote_candidate_type>. It is recorded based on the | 
|  | // type of candidate pair used when the PeerConnection first goes to a completed | 
|  | // state. When BUNDLE is enabled, only the first transport gets recorded. | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum IceCandidatePairType { | 
|  | // HostHost is deprecated. It was replaced with the set of types at the bottom | 
|  | // to report private or public host IP address. | 
|  | kIceCandidatePairHostHost = 0, | 
|  | kIceCandidatePairHostSrflx = 1, | 
|  | kIceCandidatePairHostRelay = 2, | 
|  | kIceCandidatePairHostPrflx = 3, | 
|  | kIceCandidatePairSrflxHost = 4, | 
|  | kIceCandidatePairSrflxSrflx = 5, | 
|  | kIceCandidatePairSrflxRelay = 6, | 
|  | kIceCandidatePairSrflxPrflx = 7, | 
|  | kIceCandidatePairRelayHost = 8, | 
|  | kIceCandidatePairRelaySrflx = 9, | 
|  | kIceCandidatePairRelayRelay = 10, | 
|  | kIceCandidatePairRelayPrflx = 11, | 
|  | kIceCandidatePairPrflxHost = 12, | 
|  | kIceCandidatePairPrflxSrflx = 13, | 
|  | kIceCandidatePairPrflxRelay = 14, | 
|  |  | 
|  | // The following 9 types tell whether local and remote hosts have hostname, | 
|  | // private or public IP addresses. | 
|  | kIceCandidatePairHostPrivateHostPrivate = 15, | 
|  | kIceCandidatePairHostPrivateHostPublic = 16, | 
|  | kIceCandidatePairHostPublicHostPrivate = 17, | 
|  | kIceCandidatePairHostPublicHostPublic = 18, | 
|  | kIceCandidatePairHostNameHostName = 19, | 
|  | kIceCandidatePairHostNameHostPrivate = 20, | 
|  | kIceCandidatePairHostNameHostPublic = 21, | 
|  | kIceCandidatePairHostPrivateHostName = 22, | 
|  | kIceCandidatePairHostPublicHostName = 23, | 
|  | kIceCandidatePairMax | 
|  | }; | 
|  |  | 
|  | // The difference between PeerConnectionEnumCounter and | 
|  | // PeerConnectionMetricsName is that the "EnumCounter" is only counting the | 
|  | // occurrences of events, while "Name" has a value associated with it which is | 
|  | // used to form a histogram. | 
|  |  | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum KeyExchangeProtocolMedia { | 
|  | kEnumCounterKeyProtocolMediaTypeDtlsAudio = 0, | 
|  | kEnumCounterKeyProtocolMediaTypeDtlsVideo = 1, | 
|  | kEnumCounterKeyProtocolMediaTypeDtlsData = 2, | 
|  | kEnumCounterKeyProtocolMediaTypeSdesAudio = 3, | 
|  | kEnumCounterKeyProtocolMediaTypeSdesVideo = 4, | 
|  | kEnumCounterKeyProtocolMediaTypeSdesData = 5, | 
|  | kEnumCounterKeyProtocolMediaTypeMax | 
|  | }; | 
|  |  | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum SdpSemanticRequested { | 
|  | kSdpSemanticRequestDefault = 0, | 
|  | kSdpSemanticRequestPlanB = 1, | 
|  | kSdpSemanticRequestUnifiedPlan = 2, | 
|  | kSdpSemanticRequestMax | 
|  | }; | 
|  |  | 
|  | // Metric for counting the outcome of adding an ICE candidate | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum AddIceCandidateResult { | 
|  | kAddIceCandidateSuccess = 0, | 
|  | kAddIceCandidateFailClosed = 1, | 
|  | kAddIceCandidateFailNoRemoteDescription = 2, | 
|  | kAddIceCandidateFailNullCandidate = 3, | 
|  | kAddIceCandidateFailNotValid = 4, | 
|  | kAddIceCandidateFailNotReady = 5, | 
|  | kAddIceCandidateFailInAddition = 6, | 
|  | kAddIceCandidateFailNotUsable = 7, | 
|  | kAddIceCandidateMax | 
|  | }; | 
|  |  | 
|  | // Metrics for reporting usage of BUNDLE. | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum BundleUsage { | 
|  | // There are no m-lines in the SDP, only a session description. | 
|  | kBundleUsageEmpty = 0, | 
|  | // Only a data channel is negotiated but BUNDLE is not negotiated. | 
|  | kBundleUsageNoBundleDatachannelOnly = 1, | 
|  | // BUNDLE is not negotiated and there is at most one m-line per media type, | 
|  | kBundleUsageNoBundleSimple = 2, | 
|  | // BUNDLE is not negotiated and there are multiple m-lines per media type, | 
|  | kBundleUsageNoBundleComplex = 3, | 
|  | // Only a data channel is negotiated and BUNDLE is negotiated. | 
|  | kBundleUsageBundleDatachannelOnly = 4, | 
|  | // BUNDLE is negotiated but there is at most one m-line per media type, | 
|  | kBundleUsageBundleSimple = 5, | 
|  | // BUNDLE is negotiated and there are multiple m-lines per media type, | 
|  | kBundleUsageBundleComplex = 6, | 
|  | // Legacy plan-b metrics. | 
|  | kBundleUsageNoBundlePlanB = 7, | 
|  | kBundleUsageBundlePlanB = 8, | 
|  | kBundleUsageMax | 
|  | }; | 
|  |  | 
|  | // Metrics for reporting configured BUNDLE policy, mapping directly to | 
|  | // https://w3c.github.io/webrtc-pc/#rtcbundlepolicy-enum | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum BundlePolicyUsage { | 
|  | kBundlePolicyUsageBalanced = 0, | 
|  | kBundlePolicyUsageMaxBundle = 1, | 
|  | kBundlePolicyUsageMaxCompat = 2, | 
|  | kBundlePolicyUsageMax | 
|  | }; | 
|  |  | 
|  | // Metrics for provisional answers as described in | 
|  | // https://datatracker.ietf.org/doc/html/rfc8829#section-4.1.10.1 | 
|  | // These values are persisted to logs. Entries should not be renumbered and | 
|  | // numeric values should never be reused. | 
|  | enum ProvisionalAnswerUsage { | 
|  | kProvisionalAnswerNotUsed = 0, | 
|  | kProvisionalAnswerLocal = 1, | 
|  | kProvisionalAnswerRemote = 2, | 
|  | kProvisionalAnswerMax | 
|  | }; | 
|  |  | 
|  | // Metrics for RTCRtpMuxPolicy. The only defined value is | 
|  | // https://w3c.github.io/webrtc-pc/#rtcrtcpmuxpolicy-enum | 
|  | // "require" but there is a legacy option "negotiate" which | 
|  | // was removed from the spec. | 
|  | enum RtcpMuxPolicyUsage { | 
|  | kRtcpMuxPolicyUsageRequire = 0, | 
|  | kRtcpMuxPolicyUsageNegotiate = 1, | 
|  | kRtcpMuxPolicyUsageMax | 
|  | }; | 
|  |  | 
|  | // When adding new metrics please consider using the style described in | 
|  | // https://chromium.googlesource.com/chromium/src.git/+/HEAD/tools/metrics/histograms/README.md#usage | 
|  | // instead of the legacy enums used above. | 
|  |  | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // API_UMA_METRICS_H_ |