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

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: 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 ConvertException(
ddorwin 2014/08/08 03:35:40 ..ToUMAResult
sandersd (OOO until July 31) 2014/08/08 17:22:24 Done.
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 default:
48 NOTREACHED();
49 return CdmPromise::UNKNOWN_ERROR;
ddorwin 2014/08/08 03:35:40 Maybe we should have a UMA value (1) for unexpecte
sandersd (OOO until July 31) 2014/08/08 17:22:24 I'm a little reluctant to add a debugging feature
50 }
51 }
52
24 void CdmPromise::reject(MediaKeys::Exception exception_code, 53 void CdmPromise::reject(MediaKeys::Exception exception_code,
25 uint32 system_code, 54 uint32 system_code,
26 const std::string& error_message) { 55 const std::string& error_message) {
27 DCHECK(is_pending_); 56 DCHECK(is_pending_);
28 is_pending_ = false; 57 is_pending_ = false;
58 if (!uma_name_.empty()) {
59 ResultCodeForUMA result_code = ConvertException(exception_code);
60 UMA_HISTOGRAM_ENUMERATION(uma_name_, result_code, NUM_RESULT_CODES);
61 }
29 reject_cb_.Run(exception_code, system_code, error_message); 62 reject_cb_.Run(exception_code, system_code, error_message);
30 } 63 }
31 64
32 template <typename T> 65 template <typename T>
33 CdmPromiseTemplate<T>::CdmPromiseTemplate( 66 CdmPromiseTemplate<T>::CdmPromiseTemplate(
34 base::Callback<void(const T&)> resolve_cb, 67 base::Callback<void(const T&)> resolve_cb,
35 PromiseRejectedCB reject_cb) 68 PromiseRejectedCB reject_cb)
36 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 69 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
37 DCHECK(!resolve_cb_.is_null()); 70 DCHECK(!resolve_cb_.is_null());
38 } 71 }
39 72
40 template <typename T> 73 template <typename T>
74 CdmPromiseTemplate<T>::CdmPromiseTemplate(
75 base::Callback<void(const T&)> resolve_cb,
76 PromiseRejectedCB reject_cb,
77 const std::string& uma_name)
78 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
79 DCHECK(!resolve_cb_.is_null());
80 }
81
82 template <typename T>
41 CdmPromiseTemplate<T>::~CdmPromiseTemplate() { 83 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
42 DCHECK(!is_pending_); 84 DCHECK(!is_pending_);
43 } 85 }
44 86
45 template <typename T> 87 template <typename T>
46 void CdmPromiseTemplate<T>::resolve(const T& result) { 88 void CdmPromiseTemplate<T>::resolve(const T& result) {
47 DCHECK(is_pending_); 89 DCHECK(is_pending_);
48 is_pending_ = false; 90 is_pending_ = false;
91 if (!uma_name_.empty())
92 UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
49 resolve_cb_.Run(result); 93 resolve_cb_.Run(result);
50 } 94 }
51 95
52 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 96 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
53 PromiseRejectedCB reject_cb) 97 PromiseRejectedCB reject_cb)
54 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 98 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
55 DCHECK(!resolve_cb_.is_null()); 99 DCHECK(!resolve_cb_.is_null());
56 } 100 }
57 101
102 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
103 PromiseRejectedCB reject_cb,
104 const std::string& uma_name)
105 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
106 DCHECK(!resolve_cb_.is_null());
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