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 {
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
UserMediaClientImpl::Request::Request(std::unique_ptr<UserMediaRequest> request)
......@@ -124,10 +139,6 @@ UserMediaClientImpl::~UserMediaClientImpl() {
void UserMediaClientImpl::RequestUserMedia(
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(!web_request.IsNull());
DCHECK(web_request.Audio() || web_request.Video());
......@@ -138,6 +149,9 @@ void UserMediaClientImpl::RequestUserMedia(
static_cast<blink::WebFrame*>(
web_request.OwnerDocument().GetFrame()));
// Save histogram data so we can see how much GetUserMedia is used.
UpdateAPICount(web_request.MediaRequestType());
if (RenderThreadImpl::current()) {
RenderThreadImpl::current()->peer_connection_tracker()->TrackGetUserMedia(
web_request);
......
......@@ -20,38 +20,37 @@ class MockPerSessionWebRTCAPIMetrics : public PerSessionWebRTCAPIMetrics {
MOCK_METHOD1(LogUsage, void(blink::WebRTCAPIName));
};
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetUserMedia) {
MockPerSessionWebRTCAPIMetrics metrics;
EXPECT_CALL(metrics, LogUsage(_)).Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kGetUserMedia);
}
class PerSessionWebRTCAPIMetricsTest
: public testing::Test,
public testing::WithParamInterface<blink::WebRTCAPIName> {
public:
PerSessionWebRTCAPIMetricsTest() = default;
~PerSessionWebRTCAPIMetricsTest() override = default;
TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetUserMedia) {
protected:
MockPerSessionWebRTCAPIMetrics metrics;
metrics.IncrementStreamCounter();
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kGetUserMedia)).Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kGetUserMedia);
}
};
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingGetMediaDevices) {
MockPerSessionWebRTCAPIMetrics metrics;
EXPECT_CALL(metrics, LogUsage(_)).Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kEnumerateDevices);
TEST_P(PerSessionWebRTCAPIMetricsTest, NoCallOngoing) {
blink::WebRTCAPIName api_name = GetParam();
EXPECT_CALL(metrics, LogUsage(api_name)).Times(1);
metrics.LogUsageOnlyOnce(api_name);
}
TEST(PerSessionWebRTCAPIMetrics, CallOngoingGetMediaDevices) {
MockPerSessionWebRTCAPIMetrics metrics;
TEST_P(PerSessionWebRTCAPIMetricsTest, CallOngoing) {
blink::WebRTCAPIName api_name = GetParam();
metrics.IncrementStreamCounter();
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kEnumerateDevices))
.Times(1);
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kEnumerateDevices);
EXPECT_CALL(metrics, LogUsage(api_name)).Times(1);
metrics.LogUsageOnlyOnce(api_name);
}
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingRTCPeerConnection) {
MockPerSessionWebRTCAPIMetrics metrics;
EXPECT_CALL(metrics, LogUsage(blink::WebRTCAPIName::kRTCPeerConnection));
metrics.LogUsageOnlyOnce(blink::WebRTCAPIName::kRTCPeerConnection);
}
INSTANTIATE_TEST_CASE_P(
PerSessionWebRTCAPIMetricsTest,
PerSessionWebRTCAPIMetricsTest,
::testing::ValuesIn({blink::WebRTCAPIName::kGetUserMedia,
blink::WebRTCAPIName::kGetDisplayMedia,
blink::WebRTCAPIName::kEnumerateDevices,
blink::WebRTCAPIName::kRTCPeerConnection}));
TEST(PerSessionWebRTCAPIMetrics, NoCallOngoingMultiplePC) {
MockPerSessionWebRTCAPIMetrics metrics;
......
......@@ -19,6 +19,7 @@ enum class WebRTCAPIName {
kMediaStreamRecorder,
kCanvasCaptureStream,
kVideoCaptureStream,
kGetDisplayMedia,
kInvalidName
};
......
......@@ -50273,6 +50273,7 @@ Full version information for the fingerprint enum values:
<int value="5" label="MediaStreamRecorder"/>
<int value="6" label="CanvasCaptureStream"/>
<int value="7" label="VideoCaptureStream"/>
<int value="8" label="GetDisplayMedia"/>
</enum>
<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