UMA counters for SDES x media type
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 <solenberg@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#22287}
diff --git a/api/umametrics.h b/api/umametrics.h
index 71a3d5e..a2d055d 100644
--- a/api/umametrics.h
+++ b/api/umametrics.h
@@ -40,6 +40,7 @@
kEnumCounterKeyProtocol,
kEnumCounterSdpSemanticRequested,
kEnumCounterSdpSemanticNegotiated,
+ kEnumCounterKeyProtocolMediaType,
kPeerConnectionEnumCounterMax
};
@@ -120,6 +121,16 @@
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 44adeab..74fe030 100644
--- a/pc/peerconnection.cc
+++ b/pc/peerconnection.cc
@@ -382,6 +382,39 @@
return desc1.contents().size() == desc2.contents().size();
}
+void NoteKeyProtocolAndMedia(
+ KeyExchangeProtocolType protocol_type,
+ cricket::MediaType media_type,
+ rtc::scoped_refptr<webrtc::UMAObserver> uma_observer) {
+ if (!uma_observer)
+ return;
+ uma_observer->IncrementEnumCounter(webrtc::kEnumCounterKeyProtocol,
+ protocol_type,
+ webrtc::kEnumCounterKeyProtocolMax);
+ static const std::map<std::pair<KeyExchangeProtocolType, cricket::MediaType>,
+ 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 @@
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();