diff options
author | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-20 00:46:58 +0000 |
---|---|---|
committer | fischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-20 00:46:58 +0000 |
commit | cb4ef9672c6ca2be63363ad0f9709cab532b904e (patch) | |
tree | 81ce43fa4aea02953732532c26304e9a267af20a | |
parent | d288be96a6da163266757ac055c24a95b510e5cb (diff) | |
download | chromium_src-cb4ef9672c6ca2be63363ad0f9709cab532b904e.zip chromium_src-cb4ef9672c6ca2be63363ad0f9709cab532b904e.tar.gz chromium_src-cb4ef9672c6ca2be63363ad0f9709cab532b904e.tar.bz2 |
Add UMA reporting for GpuVideoDecoder::Initialize status.
Review URL: https://chromiumcodereview.appspot.com/10582026
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@143102 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | media/base/media_log.cc | 2 | ||||
-rw-r--r-- | media/base/pipeline_status.cc | 24 | ||||
-rw-r--r-- | media/base/pipeline_status.h | 8 | ||||
-rw-r--r-- | media/filters/gpu_video_decoder.cc | 8 | ||||
-rw-r--r-- | media/media.gyp | 1 | ||||
-rw-r--r-- | webkit/media/webmediaplayer_impl.cc | 6 |
6 files changed, 46 insertions, 3 deletions
diff --git a/media/base/media_log.cc b/media/base/media_log.cc index 6d215b2..d52c24b 100644 --- a/media/base/media_log.cc +++ b/media/base/media_log.cc @@ -128,6 +128,8 @@ const char* MediaLog::PipelineStatusToString(PipelineStatus status) { return "demuxer: no supported streams"; case DECODER_ERROR_NOT_SUPPORTED: return "decoder: not supported"; + case PIPELINE_STATUS_MAX: + NOTREACHED(); } NOTREACHED(); return NULL; diff --git a/media/base/pipeline_status.cc b/media/base/pipeline_status.cc new file mode 100644 index 0000000..6c08383 --- /dev/null +++ b/media/base/pipeline_status.cc @@ -0,0 +1,24 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "media/base/pipeline_status.h" + +#include "base/bind.h" +#include "base/metrics/histogram.h" + +namespace media { + +static void ReportAndRun(const std::string& name, + const PipelineStatusCB& cb, + PipelineStatus status) { + UMA_HISTOGRAM_ENUMERATION(name, status, PIPELINE_STATUS_MAX); + cb.Run(status); +} + +PipelineStatusCB CreateUMAReportingPipelineCB(const std::string& name, + const PipelineStatusCB& cb) { + return base::Bind(&ReportAndRun, name, cb); +} + +} // namespace media diff --git a/media/base/pipeline_status.h b/media/base/pipeline_status.h index 842b18d..8f1a677 100644 --- a/media/base/pipeline_status.h +++ b/media/base/pipeline_status.h @@ -7,6 +7,8 @@ #include "base/callback.h" +#include <string> + namespace media { // Status states for pipeline. All codes except PIPELINE_OK indicate errors. @@ -29,10 +31,16 @@ enum PipelineStatus { DEMUXER_ERROR_NO_SUPPORTED_STREAMS, // Decoder related errors. DECODER_ERROR_NOT_SUPPORTED, + PIPELINE_STATUS_MAX, // Must be greater than all other values logged. }; typedef base::Callback<void(PipelineStatus)> PipelineStatusCB; +// Wrap & return a callback around |cb| which reports its argument to UMA under +// the requested |name|. +PipelineStatusCB CreateUMAReportingPipelineCB(const std::string& name, + const PipelineStatusCB& cb); + // TODO(scherkus): this should be moved alongside host interface definitions. struct PipelineStatistics { PipelineStatistics() diff --git a/media/filters/gpu_video_decoder.cc b/media/filters/gpu_video_decoder.cc index fa97743..7415db8 100644 --- a/media/filters/gpu_video_decoder.cc +++ b/media/filters/gpu_video_decoder.cc @@ -12,6 +12,7 @@ #include "media/base/demuxer_stream.h" #include "media/base/filter_host.h" #include "media/base/pipeline.h" +#include "media/base/pipeline_status.h" #include "media/base/video_decoder_config.h" #include "media/ffmpeg/ffmpeg_common.h" @@ -113,15 +114,18 @@ void GpuVideoDecoder::Stop(const base::Closure& closure) { } void GpuVideoDecoder::Initialize(const scoped_refptr<DemuxerStream>& stream, - const PipelineStatusCB& status_cb, + const PipelineStatusCB& orig_status_cb, const StatisticsCB& statistics_cb) { if (!gvd_loop_proxy_->BelongsToCurrentThread()) { gvd_loop_proxy_->PostTask(FROM_HERE, base::Bind( &GpuVideoDecoder::Initialize, - this, stream, status_cb, statistics_cb)); + this, stream, orig_status_cb, statistics_cb)); return; } + PipelineStatusCB status_cb = CreateUMAReportingPipelineCB( + "Media.GpuVideoDecoderInitializeStatus", orig_status_cb); + DCHECK(!demuxer_stream_); if (!stream) { status_cb.Run(PIPELINE_ERROR_DECODE); diff --git a/media/media.gyp b/media/media.gyp index 0d60e6b..86df60d 100644 --- a/media/media.gyp +++ b/media/media.gyp @@ -177,6 +177,7 @@ 'base/message_loop_factory.h', 'base/pipeline.cc', 'base/pipeline.h', + 'base/pipeline_status.cc', 'base/pipeline_status.h', 'base/ranges.h', 'base/seekable_buffer.cc', diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index 891398f..321ca72 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -827,7 +827,7 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) { DCHECK_EQ(main_loop_, MessageLoop::current()); switch (error) { case media::PIPELINE_OK: - LOG(DFATAL) << "PIPELINE_OK isn't an error!"; + NOTREACHED() << "PIPELINE_OK isn't an error!"; break; case media::PIPELINE_ERROR_NETWORK: @@ -859,6 +859,10 @@ void WebMediaPlayerImpl::OnPipelineError(PipelineStatus error) { // Webkit (see http://crbug.com/124486). SetNetworkState(WebMediaPlayer::NetworkStateDecodeError); break; + + case media::PIPELINE_STATUS_MAX: + NOTREACHED() << "PIPELINE_STATUS_MAX isn't a real error!"; + break; } // Repaint to trigger UI update. |