Commit 666489e8 authored by Emircan Uysaler's avatar Emircan Uysaler Committed by Commit Bot

Add histogram count for getDisplayMedia()

Bug: 326740
Change-Id: I08e30219e436c6be1216b6b94e9d7c5ed5b611d0
Reviewed-on: https://chromium-review.googlesource.com/1179253Reviewed-by: default avatarHenrik Boström <hbos@chromium.org>
Reviewed-by: default avatarChristian Fremerey <chfremer@chromium.org>
Commit-Queue: Emircan Uysaler <emircan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#584622}
parent 2d16b3b5
...@@ -33,6 +33,21 @@ namespace { ...@@ -33,6 +33,21 @@ namespace {
static int g_next_request_id = 0; static int g_next_request_id = 0;
// The histogram counts the number of calls to the JS API
// getUserMedia or getDisplayMedia().
void UpdateAPICount(blink::WebUserMediaRequest::MediaType media_type) {
blink::WebRTCAPIName api_name = blink::WebRTCAPIName::kGetUserMedia;
switch (media_type) {
case blink::WebUserMediaRequest::MediaType::kUserMedia:
api_name = blink::WebRTCAPIName::kGetUserMedia;
break;
case blink::WebUserMediaRequest::MediaType::kDisplayMedia:
api_name = blink::WebRTCAPIName::kGetDisplayMedia;
break;
}
UpdateWebRTCMethodCount(api_name);
}
} // namespace } // namespace
UserMediaClientImpl::Request::Request(std::unique_ptr<UserMediaRequest> request) UserMediaClientImpl::Request::Request(std::unique_ptr<UserMediaRequest> request)
...@@ -124,10 +139,6 @@ UserMediaClientImpl::~UserMediaClientImpl() { ...@@ -124,10 +139,6 @@ UserMediaClientImpl::~UserMediaClientImpl() {
void UserMediaClientImpl::RequestUserMedia( void UserMediaClientImpl::RequestUserMedia(
const blink::WebUserMediaRequest& web_request) { const blink::WebUserMediaRequest& web_request) {
// Save histogram data so we can see how much GetUserMedia is used.
// The histogram counts the number of calls to the JS API
// webGetUserMedia.
UpdateWebRTCMethodCount(blink::WebRTCAPIName::kGetUserMedia);
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
DCHECK(!web_request.IsNull()); DCHECK(!web_request.IsNull());
DCHECK(web_request.Audio() || web_request.Video()); DCHECK(web_request.Audio() || web_request.Video());
...@@ -138,6 +149,9 @@ void UserMediaClientImpl::RequestUserMedia( ...@@ -138,6 +149,9 @@ void UserMediaClientImpl::RequestUserMedia(
static_cast<blink::WebFrame*>( static_cast<blink::WebFrame*>(
web_request.OwnerDocument().GetFrame())); web_request.OwnerDocument().GetFrame()));
// Save histogram data so we can see how much GetUserMedia is used.
UpdateAPICount(web_request.MediaRequestType());
if (RenderThreadImpl::current()) { if (RenderThreadImpl::current()) {
RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia( RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia(
web_request); web_request);
......
...@@ -20,38 +20,37 @@ class MockPerSessionWebRTCAPIMetrics : public PerSessionWebRTCAPIMetrics { ...@@ -20,38 +20,37 @@ class MockPerSessionWebRTCAPIMetrics : public PerSessionWebRTCAPIMetrics {
MOCK_METHOD1(LogUsage, void(blink::WebRTCAPIName)); MOCK_METHOD1(LogUsage, void(blink::WebRTCAPIName));
}; };
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetUserMedia) { class PerSessionWebRTCAPIMetricsTest
MockPerSessionWebRTCAPIMetrics metrics; : public testing::Test,
EXPECT_CALL(metrics, LogUsage(_)).Times(1); public testing::WithParamInterface<blink::WebRTCAPIName> {
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kGetUserMedia); public:
} PerSessionWebRTCAPIMetricsTest() = default;
~PerSessionWebRTCAPIMetricsTest() override = default;
TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetUserMedia) { protected:
MockPerSessionWebRTCAPIMetrics metrics; MockPerSessionWebRTCAPIMetrics metrics;
metrics.IncrementStreamCounter(); };
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kGetUserMedia)).Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kGetUserMedia);
}
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetMediaDevices) { TEST_P(PerSessionWebRTCAPIMetricsTest, NoCallOngoing) {
MockPerSessionWebRTCAPIMetrics metrics; blink::WebRTCAPIName api_name = GetParam();
EXPECT_CALL(metrics, LogUsage(_)).Times(1); EXPECT_CALL(metrics, LogUsage(api_name)).Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kEnumerateDevices); metrics.LogUsageOnlyOnce(api_name);
} }
TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetMediaDevices) { TEST_P(PerSessionWebRTCAPIMetricsTest, CallOngoing) {
MockPerSessionWebRTCAPIMetrics metrics; blink::WebRTCAPIName api_name = GetParam();
metrics.IncrementStreamCounter(); metrics.IncrementStreamCounter();
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kEnumerateDevices)) EXPECT_CALL(metrics, LogUsage(api_name)).Times(1);
.Times(1); metrics.LogUsageOnlyOnce(api_name);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kEnumerateDevices);
} }
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingRTCPeerConnection) { INSTANTIATE_TEST_CASE_P(
MockPerSessionWebRTCAPIMetrics metrics; PerSessionWebRTCAPIMetricsTest,
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kRTCPeerConnection)); PerSessionWebRTCAPIMetricsTest,
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kRTCPeerConnection); ::testing::ValuesIn({blink::WebRTCAPIName::kGetUserMedia,
} blink::WebRTCAPIName::kGetDisplayMedia,
blink::WebRTCAPIName::kEnumerateDevices,
blink::WebRTCAPIName::kRTCPeerConnection}));
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingMultiplePC) { TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingMultiplePC) {
MockPerSessionWebRTCAPIMetrics metrics; MockPerSessionWebRTCAPIMetrics metrics;
......
...@@ -19,6 +19,7 @@ enum class WebRTCAPIName { ...@@ -19,6 +19,7 @@ enum class WebRTCAPIName {
kMediaStreamRecorder, kMediaStreamRecorder,
kCanvasCaptureStream, kCanvasCaptureStream,
kVideoCaptureStream, kVideoCaptureStream,
kGetDisplayMedia,
kInvalidName kInvalidName
}; };
......
...@@ -50273,6 +50273,7 @@ Full version information for the fingerprint enum values: ...@@ -50273,6 +50273,7 @@ Full version information for the fingerprint enum values:
<int value="5" label="MediaStreamRecorder"/> <int value="5" label="MediaStreamRecorder"/>
<int value="6" label="CanvasCaptureStream"/> <int value="6" label="CanvasCaptureStream"/>
<int value="7" label="VideoCaptureStream"/> <int value="7" label="VideoCaptureStream"/>
<int value="8" label="GetDisplayMedia"/>
</enum> </enum>
<enum name="WebRtcAudioCodecs"> <enum name="WebRtcAudioCodecs">
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment