summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-20 00:46:58 +0000
committerfischman@chromium.org <fischman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-20 00:46:58 +0000
commitcb4ef9672c6ca2be63363ad0f9709cab532b904e (patch)
tree81ce43fa4aea02953732532c26304e9a267af20a
parentd288be96a6da163266757ac055c24a95b510e5cb (diff)
downloadchromium_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.cc2
-rw-r--r--media/base/pipeline_status.cc24
-rw-r--r--media/base/pipeline_status.h8
-rw-r--r--media/filters/gpu_video_decoder.cc8
-rw-r--r--media/media.gyp1
-rw-r--r--webkit/media/webmediaplayer_impl.cc6
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.