From f9d0f1d215e627fb187721ce666becda2d16aceb Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Fri, 2 Mar 2018 14:15:26 +0100 Subject: [PATCH] UMA counters for SDES x media type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These counters will register whether the media sections used with SDES are for audio, video or data. Bug: chromium:804275 Change-Id: I1da3bb6625af755c0897bf4cd349655cb283fbb6 Reviewed-on: https://webrtc-review.googlesource.com/59400 Reviewed-by: Fredrik Solenberg Reviewed-by: Henrik Boström Commit-Queue: Harald Alvestrand Cr-Commit-Position: refs/heads/master@{#22287} --- api/umametrics.h | 11 +++++++++++ pc/peerconnection.cc | 47 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 10 deletions(-) diff --git a/api/umametrics.h b/api/umametrics.h index 71a3d5e590..a2d055da7f 100644 --- a/api/umametrics.h +++ b/api/umametrics.h @@ -40,6 +40,7 @@ enum PeerConnectionEnumCounterType { kEnumCounterKeyProtocol, kEnumCounterSdpSemanticRequested, kEnumCounterSdpSemanticNegotiated, + kEnumCounterKeyProtocolMediaType, kPeerConnectionEnumCounterMax }; @@ -120,6 +121,16 @@ enum KeyExchangeProtocolType { kEnumCounterKeyProtocolMax }; +enum KeyExchangeProtocolMedia { + kEnumCounterKeyProtocolMediaTypeDtlsAudio, + kEnumCounterKeyProtocolMediaTypeDtlsVideo, + kEnumCounterKeyProtocolMediaTypeDtlsData, + kEnumCounterKeyProtocolMediaTypeSdesAudio, + kEnumCounterKeyProtocolMediaTypeSdesVideo, + kEnumCounterKeyProtocolMediaTypeSdesData, + kEnumCounterKeyProtocolMediaTypeMax +}; + enum SdpSemanticRequested { kSdpSemanticRequestDefault, kSdpSemanticRequestPlanB, diff --git a/pc/peerconnection.cc b/pc/peerconnection.cc index 44adeabfbd..74fe030008 100644 --- a/pc/peerconnection.cc +++ b/pc/peerconnection.cc @@ -382,6 +382,39 @@ bool MediaSectionsHaveSameCount(const SessionDescription& desc1, return desc1.contents().size() == desc2.contents().size(); } +void NoteKeyProtocolAndMedia( + KeyExchangeProtocolType protocol_type, + cricket::MediaType media_type, + rtc::scoped_refptr uma_observer) { + if (!uma_observer) + return; + uma_observer->IncrementEnumCounter(webrtc::kEnumCounterKeyProtocol, + protocol_type, + webrtc::kEnumCounterKeyProtocolMax); + static const std::map, + KeyExchangeProtocolMedia> + proto_media_counter_map = { + {{kEnumCounterKeyProtocolDtls, cricket::MEDIA_TYPE_AUDIO}, + kEnumCounterKeyProtocolMediaTypeDtlsAudio}, + {{kEnumCounterKeyProtocolDtls, cricket::MEDIA_TYPE_VIDEO}, + kEnumCounterKeyProtocolMediaTypeDtlsVideo}, + {{kEnumCounterKeyProtocolDtls, cricket::MEDIA_TYPE_DATA}, + kEnumCounterKeyProtocolMediaTypeDtlsData}, + {{kEnumCounterKeyProtocolSdes, cricket::MEDIA_TYPE_AUDIO}, + kEnumCounterKeyProtocolMediaTypeSdesAudio}, + {{kEnumCounterKeyProtocolSdes, cricket::MEDIA_TYPE_VIDEO}, + kEnumCounterKeyProtocolMediaTypeSdesVideo}, + {{kEnumCounterKeyProtocolSdes, cricket::MEDIA_TYPE_DATA}, + kEnumCounterKeyProtocolMediaTypeSdesData}}; + + auto it = proto_media_counter_map.find({protocol_type, media_type}); + if (it != proto_media_counter_map.end()) { + uma_observer->IncrementEnumCounter(webrtc::kEnumCounterKeyProtocolMediaType, + it->second, + kEnumCounterKeyProtocolMediaTypeMax); + } +} + // Checks that each non-rejected content has SDES crypto keys or a DTLS // fingerprint, unless it's in a BUNDLE group, in which case only the // BUNDLE-tag section (first media section/description in the BUNDLE group) @@ -422,22 +455,16 @@ RTCError VerifyCrypto(const SessionDescription* desc, return RTCError(RTCErrorType::INVALID_PARAMETER, kSdpWithoutDtlsFingerprint); } - if (uma_observer) { - uma_observer->IncrementEnumCounter(webrtc::kEnumCounterKeyProtocol, - webrtc::kEnumCounterKeyProtocolDtls, - webrtc::kEnumCounterKeyProtocolMax); - } + NoteKeyProtocolAndMedia(webrtc::kEnumCounterKeyProtocolDtls, + media->type(), uma_observer); } else { if (media->cryptos().empty()) { RTC_LOG(LS_WARNING) << "Session description must have SDES when DTLS disabled."; return RTCError(RTCErrorType::INVALID_PARAMETER, kSdpWithoutSdesCrypto); } - if (uma_observer) { - uma_observer->IncrementEnumCounter(webrtc::kEnumCounterKeyProtocol, - webrtc::kEnumCounterKeyProtocolSdes, - webrtc::kEnumCounterKeyProtocolMax); - } + NoteKeyProtocolAndMedia(webrtc::kEnumCounterKeyProtocolSdes, + media->type(), uma_observer); } } return RTCError::OK();