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

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: Fix nit. 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
13 COMPILE_ASSERT(CdmPromise::NUM_RESULT_CODES == MediaKeys::NUM_EXCEPTIONS + 1,
14 ResultCodeForUMA_not_synced);
15
12 CdmPromise::CdmPromise() : is_pending_(true) { 16 CdmPromise::CdmPromise() : is_pending_(true) {
13 } 17 }
14 18
15 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb) 19 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb)
16 : reject_cb_(reject_cb), is_pending_(true) { 20 : reject_cb_(reject_cb), is_pending_(true) {
17 DCHECK(!reject_cb_.is_null()); 21 DCHECK(!reject_cb_.is_null());
18 } 22 }
19 23
24 CdmPromise::CdmPromise(PromiseRejectedCB reject_cb, const std::string& uma_name)
25 : reject_cb_(reject_cb), is_pending_(true), uma_name_(uma_name) {
26 DCHECK(!reject_cb_.is_null());
27 }
28
20 CdmPromise::~CdmPromise() { 29 CdmPromise::~CdmPromise() {
21 DCHECK(!is_pending_); 30 DCHECK(!is_pending_);
22 } 31 }
23 32
33 static CdmPromise::ResultCodeForUMA ConvertExceptionToUMAResult(
34 MediaKeys::Exception exception_code) {
35 switch (exception_code) {
36 case MediaKeys::NOT_SUPPORTED_ERROR:
37 return CdmPromise::NOT_SUPPORTED_ERROR;
38 case MediaKeys::INVALID_STATE_ERROR:
39 return CdmPromise::INVALID_STATE_ERROR;
40 case MediaKeys::INVALID_ACCESS_ERROR:
41 return CdmPromise::INVALID_ACCESS_ERROR;
42 case MediaKeys::QUOTA_EXCEEDED_ERROR:
43 return CdmPromise::QUOTA_EXCEEDED_ERROR;
44 case MediaKeys::UNKNOWN_ERROR:
45 return CdmPromise::UNKNOWN_ERROR;
46 case MediaKeys::CLIENT_ERROR:
47 return CdmPromise::CLIENT_ERROR;
48 case MediaKeys::OUTPUT_ERROR:
49 return CdmPromise::OUTPUT_ERROR;
50 default:
Ilya Sherman 2014/08/11 21:53:48 Please omit the default case, so that the compiler
sandersd (OOO until July 31) 2014/08/12 16:05:51 Done.
51 NOTREACHED();
52 return CdmPromise::UNKNOWN_ERROR;
Ilya Sherman 2014/08/11 21:53:48 Note that you'll still need this default return st
sandersd (OOO until July 31) 2014/08/12 16:05:51 Done.
53 }
54 }
55
24 void CdmPromise::reject(MediaKeys::Exception exception_code, 56 void CdmPromise::reject(MediaKeys::Exception exception_code,
25 uint32 system_code, 57 uint32 system_code,
26 const std::string& error_message) { 58 const std::string& error_message) {
27 DCHECK(is_pending_); 59 DCHECK(is_pending_);
28 is_pending_ = false; 60 is_pending_ = false;
61 if (!uma_name_.empty()) {
62 ResultCodeForUMA result_code = ConvertExceptionToUMAResult(exception_code);
63 UMA_HISTOGRAM_ENUMERATION(uma_name_, result_code, NUM_RESULT_CODES);
Ilya Sherman 2014/08/11 21:53:48 The name passed to any of the UMA_HISTOGRAM_ macro
sandersd (OOO until July 31) 2014/08/12 16:05:51 What do you mean by this?
Ilya Sherman 2014/08/12 18:00:33 The UMA_HISTOGRAM_ENUMERATION macro expands out to
sandersd (OOO until July 31) 2014/08/13 17:27:06 Since this is not currently performance sensitive,
64 }
29 reject_cb_.Run(exception_code, system_code, error_message); 65 reject_cb_.Run(exception_code, system_code, error_message);
30 } 66 }
31 67
32 template <typename T> 68 template <typename T>
33 CdmPromiseTemplate<T>::CdmPromiseTemplate( 69 CdmPromiseTemplate<T>::CdmPromiseTemplate(
34 base::Callback<void(const T&)> resolve_cb, 70 base::Callback<void(const T&)> resolve_cb,
35 PromiseRejectedCB reject_cb) 71 PromiseRejectedCB reject_cb)
36 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 72 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
37 DCHECK(!resolve_cb_.is_null()); 73 DCHECK(!resolve_cb_.is_null());
38 } 74 }
39 75
40 template <typename T> 76 template <typename T>
77 CdmPromiseTemplate<T>::CdmPromiseTemplate(
78 base::Callback<void(const T&)> resolve_cb,
79 PromiseRejectedCB reject_cb,
80 const std::string& uma_name)
81 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
82 DCHECK(!resolve_cb_.is_null());
83 }
84
85 template <typename T>
41 CdmPromiseTemplate<T>::~CdmPromiseTemplate() { 86 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
42 DCHECK(!is_pending_); 87 DCHECK(!is_pending_);
43 } 88 }
44 89
45 template <typename T> 90 template <typename T>
46 void CdmPromiseTemplate<T>::resolve(const T& result) { 91 void CdmPromiseTemplate<T>::resolve(const T& result) {
47 DCHECK(is_pending_); 92 DCHECK(is_pending_);
48 is_pending_ = false; 93 is_pending_ = false;
94 if (!uma_name_.empty())
95 UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
Ilya Sherman 2014/08/11 21:53:48 Ditto.
sandersd (OOO until July 31) 2014/08/13 17:27:06 Done.
49 resolve_cb_.Run(result); 96 resolve_cb_.Run(result);
50 } 97 }
51 98
52 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb, 99 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
53 PromiseRejectedCB reject_cb) 100 PromiseRejectedCB reject_cb)
54 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 101 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
55 DCHECK(!resolve_cb_.is_null()); 102 DCHECK(!resolve_cb_.is_null());
56 } 103 }
57 104
105 CdmPromiseTemplate<void>::CdmPromiseTemplate(base::Callback<void()> resolve_cb,
106 PromiseRejectedCB reject_cb,
107 const std::string& uma_name)
108 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
109 DCHECK(!resolve_cb_.is_null());
110 DCHECK(!uma_name_.empty());
111 }
112
58 CdmPromiseTemplate<void>::CdmPromiseTemplate() { 113 CdmPromiseTemplate<void>::CdmPromiseTemplate() {
59 } 114 }
60 115
61 CdmPromiseTemplate<void>::~CdmPromiseTemplate() { 116 CdmPromiseTemplate<void>::~CdmPromiseTemplate() {
62 DCHECK(!is_pending_); 117 DCHECK(!is_pending_);
63 } 118 }
64 119
65 void CdmPromiseTemplate<void>::resolve() { 120 void CdmPromiseTemplate<void>::resolve() {
66 DCHECK(is_pending_); 121 DCHECK(is_pending_);
67 is_pending_ = false; 122 is_pending_ = false;
123 if (!uma_name_.empty())
124 UMA_HISTOGRAM_ENUMERATION(uma_name_, SUCCESS, NUM_RESULT_CODES);
Ilya Sherman 2014/08/11 21:53:48 Ditto.
sandersd (OOO until July 31) 2014/08/13 17:27:06 Done.
68 resolve_cb_.Run(); 125 resolve_cb_.Run();
69 } 126 }
70 127
71 // Explicit template instantiation for the Promises needed. 128 // Explicit template instantiation for the Promises needed.
72 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>; 129 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>;
73 130
74 } // namespace media 131 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698