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}
This commit is contained in:
Harald Alvestrand
2018-03-02 14:15:26 +01:00
committed by Commit Bot
parent 0133d46847
commit f9d0f1d215
2 changed files with 48 additions and 10 deletions

View File

@ -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,

View File

@ -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<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 @@ 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();