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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/base/cdm_promise.h" 5 #include "media/base/cdm_promise.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h"
9 10
10 namespace media { 11 namespace media {
11 12
12 CdmPromise::CdmPromise() : is_pending_(true) { 13 CdmPromise::CdmPromise() : is_pending_(true) {
13 } 14 }
14 15
15 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb) 16 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
16 : reject_cb_(reject_cb), is_pending_(true) { 17 : reject_cb_(reject_cb), is_pending_(true) {
17 DCHECK(!reject_cb_.is_null()); 18 DCHECK(!reject_cb_.is_null());
18 } 19 }
19 20
21 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name)
22 : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) {
23 DCHECK(!reject_cb_.is_null());
24 }
25
20 CdmPromise::~CdmPromise() { 26 CdmPromise::~CdmPromise() {
21 DCHECK(!is_pending_); 27 DCHECK(!is_pending_);
22 } 28 }
23 29
30 static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
31 MediaKeys::Exception exception_code) {
32 switch (exception_code) {
33 case MediaKeys::NOT_SUPPORTED_ERROR:
34 return CdmPromise::NOT_SUPPORTED_ERROR;
35 case MediaKeys::INVALID_STATE_ERROR:
36 return CdmPromise::INVALID_STATE_ERROR;
37 case MediaKeys::INVALID_ACCESS_ERROR:
38 return CdmPromise::INVALID_ACCESS_ERROR;
39 case MediaKeys::QUOTA_EXCEEDED_ERROR:
40 return CdmPromise::QUOTA_EXCEEDED_ERROR;
41 case MediaKeys::UNKNOWN_ERROR:
42 return CdmPromise::UNKNOWN_ERROR;
43 case MediaKeys::CLIENT_ERROR:
44 return CdmPromise::CLIENT_ERROR;
45 case MediaKeys::OUTPUT_ERROR:
46 return CdmPromise::OUTPUT_ERROR;
47 }
48 NOTREACHED();
49 return CdmPromise::UNKNOWN_ERROR;
50 }
51
24 void CdmPromise::reject(MediaKeys::Exception exception_code, 52 void CdmPromise::reject(MediaKeys::Exception exception_code,
25 uint32 system_code, 53 uint32 system_code,
26 const std::string& error_message) { 54 const std::string& error_message) {
27 DCHECK(is_pending_); 55 DCHECK(is_pending_);
28 is_pending_ = false; 56 is_pending_ = false;
57 if (!uma_name_.empty()) {
58 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
59 UMA_HISTOGRAM_ENUMERATION(uma_name_, result_code, NUM_RESULT_CODES);
60 }
29 reject_cb_.Run(exception_code, system_code, error_message); 61 reject_cb_.Run(exception_code, system_code, error_message);
30 } 62 }
31 63
32 template <typename T> 64 template <typename T>
33 CdmPromiseTemplate<T>::CdmPromiseTemplate( 65 CdmPromiseTemplate<T>::CdmPromiseTemplate(
34 base::Callback<void(const T&)> resolve_cb, 66 base::Callback<void(const T&)> resolve_cb,
35 PromiseRejectedCB reject_cb) 67 PromiseRejectedCB reject_cb)
36 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 68 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
37 DCHECK(!resolve_cb_.is_null()); 69 DCHECK(!resolve_cb_.is_null());
38 } 70 }
39 71
40 template <typename T> 72 template <typename T>
73 CdmPromiseTemplate<T>::CdmPromiseTemplate(
74 base::Callback<void(const T&)> resolve_cb,
75 PromiseRejectedCB reject_cb,
76 const std::string& uma_name)
77 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
78 DCHECK(!resolve_cb_.is_null());
79 }
80
81 template <typename T>
41 CdmPromiseTemplate<T>::~CdmPromiseTemplate() { 82 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
42 DCHECK(!is_pending_); 83 DCHECK(!is_pending_);
43 } 84 }
44 85
45 template <typename T> 86 template <typename T>
46 void CdmPromiseTemplate<T>::resolve(const T& result) { 87 void CdmPromiseTemplate<T>::resolve(const T& result) {
47 DCHECK(is_pending_); 88 DCHECK(is_pending_);
48 is_pending_ = false; 89 is_pending_ = false;
90 if (!uma_name_.empty())
91 UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
49 resolve_cb_.Run(result); 92 resolve_cb_.Run(result);
50 } 93 }
51 94
52 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 95 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
53 PromiseRejectedCB reject_cb) 96 PromiseRejectedCB reject_cb)
54 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 97 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
55 DCHECK(!resolve_cb_.is_null()); 98 DCHECK(!resolve_cb_.is_null());
56 } 99 }
57 100
101 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
102 PromiseRejectedCB reject_cb,
103 const std::string& uma_name)
104 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
105 DCHECK(!resolve_cb_.is_null());
106 DCHECK(!uma_name_.empty());
107 }
108
58 CdmPromiseTemplate<void>::CdmPromiseTemplate() { 109 CdmPromiseTemplate<void>::CdmPromiseTemplate() {
59 } 110 }
60 111
61 CdmPromiseTemplate<void>::~CdmPromiseTemplate() { 112 CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
62 DCHECK(!is_pending_); 113 DCHECK(!is_pending_);
63 } 114 }
64 115
65 void CdmPromiseTemplate<void>::resolve() { 116 void CdmPromiseTemplate<void>::resolve() {
66 DCHECK(is_pending_); 117 DCHECK(is_pending_);
67 is_pending_ = false; 118 is_pending_ = false;
119 if (!uma_name_.empty())
120 UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
68 resolve_cb_.Run(); 121 resolve_cb_.Run();
69 } 122 }
70 123
71 // Explicit template instantiation for the Promises needed. 124 // Explicit template instantiation for the Promises needed.
72 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>; 125 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>;
73 126
74 } // namespace media 127 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698