| /* | |
| * 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 [[deprecated]] = 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 | |
| }; | |
| // Metrics for RTCRtpHeaderEncryptionPolicy (which enables cryptex). | |
| // https://w3c.github.io/webrtc-extensions/#rtp-header-extension-encryption | |
| enum CryptexPolicyUsage { | |
| kCryptexPolicyUsageDisabled = 0, // Non-spec. | |
| kCryptexPolicyUsageNegotiate = 1, | |
| // Policy was `negotiate` and it was negotiated at session level. | |
| kCryptexPolicyUsageNegotiated = 2, | |
| kCryptexPolicyUsageRequire = 3, | |
| kCryptexPolicyUsageMax | |
| }; | |
| // Metrics for SDP munging. | |
| // These values are persisted to logs. Entries should not be renumbered and | |
| // numeric values should never be reused. Keep in (loose) sync with | |
| // SdpMungingType from Chromium's | |
| // tools/metrics/histograms/metadata/web_rtc/enums.xml | |
| enum SdpMungingType { | |
| kNoModification = 0, | |
| kUnknownModification = 1, | |
| kWithoutCreateAnswer = 2, | |
| kWithoutCreateOffer = 3, | |
| kNumberOfContents = 4, | |
| kCurrentDescriptionFailedToParse = 5, // This is an internal error. | |
| // Transport-related munging. | |
| kIceOptions = 20, | |
| kIcePwd = 21, | |
| kIceUfrag = 22, | |
| kIceMode = 23, | |
| kDtlsSetup = 24, | |
| kMid = 25, | |
| kPayloadTypes = 26, | |
| kSsrcs = 27, | |
| kIceOptionsRenomination = 28, | |
| kDirection = 29, | |
| kRtcpMux = 30, | |
| kIceOptionsTrickle = 31, | |
| kIceCandidateCount = 32, | |
| kBundle = 33, | |
| kBandwidth = 34, | |
| kSframe = 35, | |
| kMsidStream = 36, | |
| kMsidTrack = 37, | |
| kIceOptionsRemoved = 38, | |
| kRejected = 39, | |
| // RTP header extension munging. | |
| kRtpHeaderExtensionRemoved = 40, | |
| kRtpHeaderExtensionAdded = 41, | |
| kRtpHeaderExtensionModified = 42, | |
| kCryptex = 43, | |
| kRtcpXrRcvrRtt = 44, | |
| // Audio-related munging. | |
| kAudioCodecsRemoved = 60, | |
| kAudioCodecsAdded = 61, | |
| kAudioCodecsReordered = 62, | |
| kAudioCodecsAddedMultiOpus = 63, | |
| kAudioCodecsAddedL16 = 64, | |
| kAudioCodecsRtcpFbAudioNack = 65, | |
| kAudioCodecsFmtpOpusFec = 66, | |
| kAudioCodecsFmtpOpusCbr = 67, | |
| kAudioCodecsFmtpOpusStereo = 68, | |
| kAudioCodecsFmtpOpusDtx = 69, | |
| kAudioCodecsFmtp = 70, | |
| kAudioCodecsRtcpFb = 71, | |
| kAudioCodecsRtcpFbRrtr = 72, | |
| kAudioCodecsRtcpReducedSize = 73, | |
| // Video-related munging. | |
| kVideoCodecsRemoved = 80, | |
| kVideoCodecsAdded = 81, | |
| kVideoCodecsReordered = 82, | |
| kVideoCodecsLegacySimulcast = 83, | |
| kVideoCodecsFmtpH264SpsPpsIdrInKeyframe = 84, | |
| kVideoCodecsFmtp = 85, | |
| kVideoCodecsRtcpFb = 86, | |
| kVideoCodecsAddedWithRawPacketization = 87, | |
| kVideoCodecsModifiedWithRawPacketization = 88, | |
| kVideoCodecsRtcpReducedSize = 89, | |
| // DataChannel-related munging. | |
| kDataChannelSctpInit = 100, | |
| kDataChannelMaxMessageSize = 101, | |
| kDataChannelSctpPort = 102, | |
| // Overflow area. | |
| kIceOptionsSped = 110, | |
| kMaxValue, | |
| }; | |
| // The outcome of setting the local description, whether SDP munging is detected | |
| // and if the should be accepted or rejected. Keep in sync with | |
| // SdpMungingOutcome from tools/metrics/histograms/metadata/web_rtc/enums.xml | |
| enum class SdpMungingOutcome { | |
| kAccepted = 0, | |
| kRejected = 1, | |
| kMaxValue = kRejected, | |
| }; | |
| // These values are persisted to logs. Entries should not be renumbered and | |
| // numeric values should never be reused. | |
| enum SdpBandwidthCategory { | |
| kSdpBandwidthParseFailure = 0, | |
| kSdpBandwidthNegativeOne = 1, | |
| kSdpBandwidthZero = 2, | |
| kSdpBandwidthSmall = 3, // 1 to INT_MAX/1000 | |
| kSdpBandwidthLarge = 4, // INT_MAX/1000 + 1 to INT_MAX | |
| kSdpBandwidthNegative = 5, | |
| kSdpBandwidthMax | |
| }; | |
| // 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_ |