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

Unified Diff: media/blink/cdm_session_adapter.cc

Issue 1241263002: media: Add UMA and trace events for CDM creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 5 years, 5 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
« no previous file with comments | « media/blink/cdm_session_adapter.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/blink/cdm_session_adapter.cc
diff --git a/media/blink/cdm_session_adapter.cc b/media/blink/cdm_session_adapter.cc
index 46147694d0d0eb0421cb9bb187b2c489c676c7dd..d4d97bb7f6f1b2a6d35b64098fa1e4faf0d42d18 100644
--- a/media/blink/cdm_session_adapter.cc
+++ b/media/blink/cdm_session_adapter.cc
@@ -6,7 +6,9 @@
#include "base/bind.h"
#include "base/logging.h"
+#include "base/metrics/histogram.h"
#include "base/stl_util.h"
+#include "base/trace_event/trace_event.h"
#include "media/base/cdm_factory.h"
#include "media/base/cdm_key_information.h"
#include "media/base/cdm_promise.h"
@@ -19,9 +21,10 @@ namespace media {
const char kMediaEME[] = "Media.EME.";
const char kDot[] = ".";
+const char kTimeToCreateCdmUMAName[] = "CreateCdmTime";
-CdmSessionAdapter::CdmSessionAdapter() : weak_ptr_factory_(this) {
-}
+CdmSessionAdapter::CdmSessionAdapter()
+ : trace_id_(0), weak_ptr_factory_(this) {}
CdmSessionAdapter::~CdmSessionAdapter() {}
@@ -31,6 +34,11 @@ void CdmSessionAdapter::CreateCdm(
const GURL& security_origin,
const CdmConfig& cdm_config,
blink::WebContentDecryptionModuleResult result) {
+ TRACE_EVENT_ASYNC_BEGIN0("media", "CdmSessionAdapter::CreateCdm",
+ ++trace_id_);
+
+ base::TimeTicks start_time = base::TimeTicks::Now();
+
// Note: WebContentDecryptionModuleImpl::Create() calls this method without
// holding a reference to the CdmSessionAdapter. Bind OnCdmCreated() with
// |this| instead of |weak_this| to prevent |this| from being destructed.
@@ -42,7 +50,8 @@ void CdmSessionAdapter::CreateCdm(
base::Bind(&CdmSessionAdapter::OnLegacySessionError, weak_this),
base::Bind(&CdmSessionAdapter::OnSessionKeysChange, weak_this),
base::Bind(&CdmSessionAdapter::OnSessionExpirationUpdate, weak_this),
- base::Bind(&CdmSessionAdapter::OnCdmCreated, this, key_system, result));
+ base::Bind(&CdmSessionAdapter::OnCdmCreated, this, key_system, start_time,
+ result));
}
void CdmSessionAdapter::SetServerCertificate(
@@ -111,15 +120,23 @@ const std::string& CdmSessionAdapter::GetKeySystem() const {
}
const std::string& CdmSessionAdapter::GetKeySystemUMAPrefix() const {
+ DCHECK(!key_system_uma_prefix_.empty());
return key_system_uma_prefix_;
}
void CdmSessionAdapter::OnCdmCreated(
const std::string& key_system,
+ base::TimeTicks start_time,
blink::WebContentDecryptionModuleResult result,
scoped_ptr<MediaKeys> cdm,
const std::string& error_message) {
DVLOG(2) << __FUNCTION__;
+ DCHECK(!cdm_);
+
+ TRACE_EVENT_ASYNC_END2("media", "CdmSessionAdapter::CreateCdm", trace_id_,
+ "success", (cdm ? "true" : "false"), "error_message",
+ error_message);
+
if (!cdm) {
result.completeWithError(
blink::WebContentDecryptionModuleExceptionNotSupportedError, 0,
@@ -130,6 +147,10 @@ void CdmSessionAdapter::OnCdmCreated(
key_system_ = key_system;
key_system_uma_prefix_ =
kMediaEME + GetKeySystemNameForUMA(key_system) + kDot;
+
+ // Only report time for successful CDM creation.
+ ReportTimeToCreateCdmUMA(base::TimeTicks::Now() - start_time);
+
cdm_ = cdm.Pass();
result.completeWithContentDecryptionModule(
@@ -195,4 +216,14 @@ WebContentDecryptionModuleSessionImpl* CdmSessionAdapter::GetSession(
return (session != sessions_.end()) ? session->second.get() : NULL;
}
+void CdmSessionAdapter::ReportTimeToCreateCdmUMA(base::TimeDelta time) const {
+ // Note: This leaks memory, which is expected behavior.
+ base::HistogramBase* histogram = base::Histogram::FactoryTimeGet(
+ GetKeySystemUMAPrefix() + kTimeToCreateCdmUMAName,
+ base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10),
+ 50, base::HistogramBase::kUmaTargetedHistogramFlag);
+
+ histogram->AddTime(time);
+}
+
} // namespace media
« no previous file with comments | « media/blink/cdm_session_adapter.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698