Index: content/renderer/media/rtc_video_decoder.cc |
diff --git a/content/renderer/media/rtc_video_decoder.cc b/content/renderer/media/rtc_video_decoder.cc |
index adce1f61b7e6dcb84bba726ce4050a797da031d0..70f8add2d00495cfc9ab6bba0d8aca05c19896e4 100644 |
--- a/content/renderer/media/rtc_video_decoder.cc |
+++ b/content/renderer/media/rtc_video_decoder.cc |
@@ -8,6 +8,7 @@ |
#include "base/logging.h" |
#include "base/memory/ref_counted.h" |
#include "base/message_loop/message_loop_proxy.h" |
+#include "base/metrics/histogram.h" |
#include "base/safe_numerics.h" |
#include "base/stl_util.h" |
#include "base/task_runner_util.h" |
@@ -155,13 +156,13 @@ int32_t RTCVideoDecoder::InitDecode(const webrtc::VideoCodec* codecSettings, |
DCHECK_EQ(codecSettings->codecType, webrtc::kVideoCodecVP8); |
if (codecSettings->codecSpecific.VP8.feedbackModeOn) { |
LOG(ERROR) << "Feedback mode not supported"; |
- return WEBRTC_VIDEO_CODEC_ERROR; |
+ return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_ERROR); |
} |
base::AutoLock auto_lock(lock_); |
if (state_ == UNINITIALIZED || state_ == DECODE_ERROR) { |
LOG(ERROR) << "VDA is not initialized. state=" << state_; |
- return WEBRTC_VIDEO_CODEC_UNINITIALIZED; |
+ return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_UNINITIALIZED); |
} |
// Create some shared memory if the queue is empty. |
if (available_shm_segments_.size() == 0) { |
@@ -171,7 +172,7 @@ int32_t RTCVideoDecoder::InitDecode(const webrtc::VideoCodec* codecSettings, |
kMaxInFlightDecodes, |
kSharedMemorySegmentBytes)); |
} |
- return WEBRTC_VIDEO_CODEC_OK; |
+ return RecordInitDecodeUMA(WEBRTC_VIDEO_CODEC_OK); |
} |
int32_t RTCVideoDecoder::Decode( |
@@ -461,6 +462,9 @@ void RTCVideoDecoder::NotifyError(media::VideoDecodeAccelerator::Error error) { |
return; |
LOG(ERROR) << "VDA Error:" << error; |
+ UMA_HISTOGRAM_ENUMERATION("Media.RTCVideoDecoderError", |
+ error, |
+ media::VideoDecodeAccelerator::LARGEST_ERROR_ENUM); |
DestroyVDA(); |
base::AutoLock auto_lock(lock_); |
@@ -747,4 +751,12 @@ void RTCVideoDecoder::GetBufferData(int32 bitstream_buffer_id, |
NOTREACHED() << "Missing bitstream buffer id: " << bitstream_buffer_id; |
} |
+int32_t RTCVideoDecoder::RecordInitDecodeUMA(int32_t status) { |
+ // Logging boolean is enough to know if HW decoding has been used. Also, |
+ // InitDecode is less likely to return an error so enum is not used here. |
+ bool sample = (status == WEBRTC_VIDEO_CODEC_OK) ? true : false; |
+ UMA_HISTOGRAM_BOOLEAN("Media.RTCVideoDecoderInitDecodeStatus", sample); |
+ return status; |
+} |
+ |
} // namespace content |