Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1022)

Unified Diff: media/base/cdm_promise.cc

Issue 452643002: Add UMA reporting to CdmPromise. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments. Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/base/cdm_promise.cc
diff --git a/media/base/cdm_promise.cc b/media/base/cdm_promise.cc
index ec5e913dbb8aae93c90aa30a24835aaa1a3cc3e8..2bb70edbe734bf1809da238c945d0918256ec309 100644
--- a/media/base/cdm_promise.cc
+++ b/media/base/cdm_promise.cc
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
namespace media {
@@ -17,15 +18,46 @@ CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
DCHECK(!reject_cb_.is_null());
}
+CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name)
+ : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) {
+ DCHECK(!reject_cb_.is_null());
+}
+
CdmPromise::~CdmPromise() {
DCHECK(!is_pending_);
}
+static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
+ MediaKeys::Exception exception_code) {
+ switch (exception_code) {
+ case MediaKeys::NOT_SUPPORTED_ERROR:
+ return CdmPromise::NOT_SUPPORTED_ERROR;
+ case MediaKeys::INVALID_STATE_ERROR:
+ return CdmPromise::INVALID_STATE_ERROR;
+ case MediaKeys::INVALID_ACCESS_ERROR:
+ return CdmPromise::INVALID_ACCESS_ERROR;
+ case MediaKeys::QUOTA_EXCEEDED_ERROR:
+ return CdmPromise::QUOTA_EXCEEDED_ERROR;
+ case MediaKeys::UNKNOWN_ERROR:
+ return CdmPromise::UNKNOWN_ERROR;
+ case MediaKeys::CLIENT_ERROR:
+ return CdmPromise::CLIENT_ERROR;
+ case MediaKeys::OUTPUT_ERROR:
+ return CdmPromise::OUTPUT_ERROR;
+ }
+ NOTREACHED();
+ return CdmPromise::UNKNOWN_ERROR;
+}
+
void CdmPromise::reject(MediaKeys::Exception exception_code,
uint32 system_code,
const std::string& error_message) {
DCHECK(is_pending_);
is_pending_ = false;
+ if (!uma_name_.empty()) {
+ ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
+ UMA_HISTOGRAM_ENUMERATION(uma_name_, result_code, NUM_RESULT_CODES);
+ }
reject_cb_.Run(exception_code, system_code, error_message);
}
@@ -38,6 +70,15 @@ CdmPromiseTemplate<T>::CdmPromiseTemplate(
}
template <typename T>
+CdmPromiseTemplate<T>::CdmPromiseTemplate(
+ base::Callback<void(const T&)> resolve_cb,
+ PromiseRejectedCB reject_cb,
+ const std::string& uma_name)
+ : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
+ DCHECK(!resolve_cb_.is_null());
+}
+
+template <typename T>
CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
DCHECK(!is_pending_);
}
@@ -46,6 +87,8 @@ template <typename T>
void CdmPromiseTemplate<T>::resolve(const T& result) {
DCHECK(is_pending_);
is_pending_ = false;
+ if (!uma_name_.empty())
+ UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
resolve_cb_.Run(result);
}
@@ -55,6 +98,14 @@ CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
DCHECK(!resolve_cb_.is_null());
}
+CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
+ PromiseRejectedCB reject_cb,
+ const std::string& uma_name)
+ : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
+ DCHECK(!resolve_cb_.is_null());
+ DCHECK(!uma_name_.empty());
+}
+
CdmPromiseTemplate<void>::CdmPromiseTemplate() {
}
@@ -65,6 +116,8 @@ CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
void CdmPromiseTemplate<void>::resolve() {
DCHECK(is_pending_);
is_pending_ = false;
+ if (!uma_name_.empty())
+ UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
resolve_cb_.Run();
}

Powered by Google App Engine
This is Rietveld 408576698