Commit dbf29d6f authored by Christian Fremerey's avatar Christian Fremerey Committed by Commit Bot

[Video Capture, UMA] Distinguish media stream type specific frame drops

There are certain frame drop reasons that can occur for more than one
media stream type. This CL distinguishes the UMA counts for those by
media stream type.

Bug: 878964
Change-Id: I2b698577afe66012f1e885d0f5dc0724832781e1
Reviewed-on: https://chromium-review.googlesource.com/1214077
Commit-Queue: Christian Fremerey <chfremer@chromium.org>
Reviewed-by: default avatarMark Pearson <mpearson@chromium.org>
Reviewed-by: default avatarEmircan Uysaler <emircan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#590302}
parent 1f15e0cc
......@@ -47,17 +47,66 @@ static const int kInfiniteRatio = 99999;
base::UmaHistogramSparse( \
name, (height) ? ((width)*100) / (height) : kInfiniteRatio);
void LogVideoFrameDrop(media::VideoCaptureFrameDropReason reason) {
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.FrameDrop", reason,
static_cast<int>(media::VideoCaptureFrameDropReason::kMaxValue) + 1);
void LogVideoFrameDrop(media::VideoCaptureFrameDropReason reason,
MediaStreamType stream_type) {
const int kEnumCount =
static_cast<int>(media::VideoCaptureFrameDropReason::kMaxValue) + 1;
UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.FrameDrop", reason, kEnumCount);
switch (stream_type) {
case MEDIA_DEVICE_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.FrameDrop.DeviceCapture",
reason, kEnumCount);
break;
case MEDIA_GUM_TAB_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.FrameDrop.GumTabCapture",
reason, kEnumCount);
break;
case MEDIA_GUM_DESKTOP_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.FrameDrop.GumDesktopCapture", reason, kEnumCount);
break;
case MEDIA_DISPLAY_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.FrameDrop.DisplayCapture",
reason, kEnumCount);
break;
default:
// Do nothing
return;
}
}
void LogMaxConsecutiveVideoFrameDropCountExceeded(
media::VideoCaptureFrameDropReason reason) {
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.MaxFrameDropExceeded", reason,
static_cast<int>(media::VideoCaptureFrameDropReason::kMaxValue) + 1);
media::VideoCaptureFrameDropReason reason,
MediaStreamType stream_type) {
const int kEnumCount =
static_cast<int>(media::VideoCaptureFrameDropReason::kMaxValue) + 1;
UMA_HISTOGRAM_ENUMERATION("Media.VideoCapture.MaxFrameDropExceeded", reason,
kEnumCount);
switch (stream_type) {
case MEDIA_DEVICE_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.MaxFrameDropExceeded.DeviceCapture", reason,
kEnumCount);
break;
case MEDIA_GUM_TAB_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.MaxFrameDropExceeded.GumTabCapture", reason,
kEnumCount);
break;
case MEDIA_GUM_DESKTOP_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.MaxFrameDropExceeded.GumDesktopCapture", reason,
kEnumCount);
break;
case MEDIA_DISPLAY_VIDEO_CAPTURE:
UMA_HISTOGRAM_ENUMERATION(
"Media.VideoCapture.MaxFrameDropExceeded.DisplayCapture", reason,
kEnumCount);
break;
default:
// Do nothing
return;
}
}
void CallOnError(media::VideoCaptureError error,
......@@ -540,7 +589,7 @@ void VideoCaptureController::OnFrameDropped(
if (++frame_drop_log_state_.drop_count >
kMaxConsecutiveFrameDropForSameReasonCount) {
frame_drop_log_state_.max_log_count_exceeded = true;
LogMaxConsecutiveVideoFrameDropCountExceeded(reason);
LogMaxConsecutiveVideoFrameDropCountExceeded(reason, stream_type_);
std::ostringstream string_stream;
string_stream << "Too many consecutive frames dropped with reason code "
<< static_cast<int>(reason)
......@@ -553,7 +602,7 @@ void VideoCaptureController::OnFrameDropped(
frame_drop_log_state_ = FrameDropLogState(reason);
}
LogVideoFrameDrop(reason);
LogVideoFrameDrop(reason, stream_type_);
std::ostringstream string_stream;
string_stream << "Frame dropped with reason code "
<< static_cast<int>(reason);
......
......@@ -847,11 +847,11 @@ TEST_F(VideoCaptureControllerTest, DroppedFramesGetLoggedInUMA) {
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
2);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::
kDeviceClientFailedToReserveBufferFromBufferPool,
1);
......@@ -870,7 +870,7 @@ TEST_F(VideoCaptureControllerTest,
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
}
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
VideoCaptureController::kMaxConsecutiveFrameDropForSameReasonCount);
......@@ -879,12 +879,12 @@ TEST_F(VideoCaptureControllerTest,
controller_->OnFrameDropped(
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
VideoCaptureController::kMaxConsecutiveFrameDropForSameReasonCount);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.MaxFrameDropExceeded",
"Media.VideoCapture.MaxFrameDropExceeded.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
1);
}
......@@ -910,7 +910,7 @@ TEST_F(VideoCaptureControllerTest,
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
}
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
2 * VideoCaptureController::kMaxConsecutiveFrameDropForSameReasonCount -
1);
......@@ -934,7 +934,7 @@ TEST_F(VideoCaptureControllerTest, DeliveredFrameReenablesDroppedFrameLogging) {
controller_->OnFrameDropped(
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
VideoCaptureController::kMaxConsecutiveFrameDropForSameReasonCount + 1);
}
......@@ -960,11 +960,11 @@ TEST_F(VideoCaptureControllerTest,
controller_->OnFrameDropped(
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::kDeviceClientFrameHasInvalidFormat,
VideoCaptureController::kMaxConsecutiveFrameDropForSameReasonCount + 1);
histogram_tester.ExpectBucketCount(
"Media.VideoCapture.FrameDrop",
"Media.VideoCapture.FrameDrop.DeviceCapture",
media::VideoCaptureFrameDropReason::
kDeviceClientFailedToReserveBufferFromBufferPool,
1);
......
......@@ -131178,6 +131178,15 @@ uploading your change for review.
<affected-histogram name="WebRTC.Video.AdaptChangesPerMinute"/>
</histogram_suffixes>
<histogram_suffixes name="VideoCaptureFrameDrop" separator=".">
<suffix name="DeviceCapture"/>
<suffix name="DisplayCapture"/>
<suffix name="GumDesktopCapture"/>
<suffix name="GumTabCapture"/>
<affected-histogram name="Media.VideoCapture.FrameDrop"/>
<affected-histogram name="Media.VideoCapture.MaxFrameDropExceeded"/>
</histogram_suffixes>
<histogram_suffixes name="VideoDecodeStatsDBOperations" separator=".">
<suffix name="Destroy" label="Success status for destroying the DB"/>
<suffix name="Initialize" label="Success status for initializing the DB."/>
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