| Index: content/browser/media/media_internals.cc
|
| diff --git a/content/browser/media/media_internals.cc b/content/browser/media/media_internals.cc
|
| index 5256064e05b867641e6ec3d07d3bdea5927d07fd..d57e57db9ba1dcadc5a33b48189a010c92abace1 100644
|
| --- a/content/browser/media/media_internals.cc
|
| +++ b/content/browser/media/media_internals.cc
|
| @@ -17,6 +17,7 @@
|
| #include "content/public/browser/web_ui.h"
|
| #include "media/audio/audio_parameters.h"
|
| #include "media/base/media_log_event.h"
|
| +#include "media/filters/decrypting_video_decoder.h"
|
| #include "media/filters/gpu_video_decoder.h"
|
|
|
| namespace {
|
| @@ -198,18 +199,23 @@ class MediaInternals::MediaInternalsUMAHandler : public NotificationObserver {
|
| media::PipelineStatus last_pipeline_status;
|
| bool has_audio;
|
| bool has_video;
|
| + bool video_dds;
|
| std::string audio_codec_name;
|
| std::string video_codec_name;
|
| std::string video_decoder;
|
| PipelineInfo()
|
| : last_pipeline_status(media::PIPELINE_OK),
|
| has_audio(false),
|
| - has_video(false) {}
|
| + has_video(false),
|
| + video_dds(false) {}
|
| };
|
|
|
| // Helper function to report PipelineStatus associated with a player to UMA.
|
| void ReportUMAForPipelineStatus(const PipelineInfo& player_info);
|
|
|
| + // Helper to generate PipelineStatus UMA name for AudioVideo streams.
|
| + std::string GetUMANameForAVStream(const PipelineInfo& player_info);
|
| +
|
| // Key is playerid
|
| typedef std::map<int, PipelineInfo> PlayerInfoMap;
|
|
|
| @@ -286,6 +292,9 @@ void MediaInternals::MediaInternalsUMAHandler::SavePlayerState(
|
| event.params.GetString("video_decoder",
|
| &player_info[event.id].video_decoder);
|
| }
|
| + if (event.params.HasKey("video_dds")) {
|
| + event.params.GetBoolean("video_dds", &player_info[event.id].video_dds);
|
| + }
|
| break;
|
| default:
|
| break;
|
| @@ -293,33 +302,47 @@ void MediaInternals::MediaInternalsUMAHandler::SavePlayerState(
|
| return;
|
| }
|
|
|
| +std::string MediaInternals::MediaInternalsUMAHandler::GetUMANameForAVStream(
|
| + const PipelineInfo& player_info) {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| + static const char kPipelineUmaPrefix[] = "Media.PipelineStatus.AudioVideo.";
|
| + std::string uma_name = kPipelineUmaPrefix;
|
| + if (player_info.video_codec_name == "vp8") {
|
| + uma_name += "VP8.";
|
| + } else if (player_info.video_codec_name == "vp9") {
|
| + uma_name += "VP9.";
|
| + } else if (player_info.video_codec_name == "h264") {
|
| + uma_name += "H264.";
|
| + } else {
|
| + return uma_name + "Other";
|
| + }
|
| +
|
| + if (player_info.video_decoder ==
|
| + media::DecryptingVideoDecoder::kDecoderName) {
|
| + return uma_name + "DVD";
|
| + }
|
| +
|
| + if (player_info.video_dds) {
|
| + uma_name += "DDS.";
|
| + }
|
| +
|
| + if (player_info.video_decoder == media::GpuVideoDecoder::kDecoderName) {
|
| + uma_name += "HW";
|
| + } else {
|
| + uma_name += "SW";
|
| + }
|
| + return uma_name;
|
| +}
|
| +
|
| void MediaInternals::MediaInternalsUMAHandler::ReportUMAForPipelineStatus(
|
| const PipelineInfo& player_info) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
|
| if (player_info.has_video && player_info.has_audio) {
|
| - if (player_info.video_codec_name == "vp8") {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioVideo.VP8.SW",
|
| - player_info.last_pipeline_status,
|
| - media::PIPELINE_STATUS_MAX + 1);
|
| - } else if (player_info.video_codec_name == "vp9") {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioVideo.VP9.SW",
|
| - player_info.last_pipeline_status,
|
| - media::PIPELINE_STATUS_MAX + 1);
|
| - } else if (player_info.video_codec_name == "h264") {
|
| - if (player_info.video_decoder == media::GpuVideoDecoder::kDecoderName) {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioVideo.H264.HW",
|
| - player_info.last_pipeline_status,
|
| - media::PIPELINE_STATUS_MAX + 1);
|
| - } else {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioVideo.H264.SW",
|
| - player_info.last_pipeline_status,
|
| - media::PIPELINE_STATUS_MAX + 1);
|
| - }
|
| - } else {
|
| - UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioVideo.Other",
|
| - player_info.last_pipeline_status,
|
| - media::PIPELINE_STATUS_MAX + 1);
|
| - }
|
| + base::LinearHistogram::FactoryGet(
|
| + GetUMANameForAVStream(player_info), 1, media::PIPELINE_STATUS_MAX,
|
| + media::PIPELINE_STATUS_MAX + 1,
|
| + base::HistogramBase::kUmaTargetedHistogramFlag)
|
| + ->Add(player_info.last_pipeline_status);
|
| } else if (player_info.has_audio) {
|
| UMA_HISTOGRAM_ENUMERATION("Media.PipelineStatus.AudioOnly",
|
| player_info.last_pipeline_status,
|
|
|