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

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: Don't use UMA_HISTOGRAM_ENUMERATION. 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
« no previous file with comments | « media/base/cdm_promise.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 base::LinearHistogram::FactoryGet(
60 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
61 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(result_code);
62 }
29 reject_cb_.Run(exception_code, system_code, error_message); 63 reject_cb_.Run(exception_code, system_code, error_message);
30 } 64 }
31 65
32 template <typename T> 66 template <typename T>
33 CdmPromiseTemplate<T>::CdmPromiseTemplate( 67 CdmPromiseTemplate<T>::CdmPromiseTemplate(
34 base::Callback<void(const T&)> resolve_cb, 68 base::Callback<void(const T&)> resolve_cb,
35 PromiseRejectedCB reject_cb) 69 PromiseRejectedCB reject_cb)
36 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) { 70 : CdmPromise(reject_cb), resolve_cb_(resolve_cb) {
37 DCHECK(!resolve_cb_.is_null()); 71 DCHECK(!resolve_cb_.is_null());
38 } 72 }
39 73
40 template <typename T> 74 template <typename T>
75 CdmPromiseTemplate<T>::CdmPromiseTemplate(
76 base::Callback<void(const T&)> resolve_cb,
77 PromiseRejectedCB reject_cb,
78 const std::string& uma_name)
79 : CdmPromise(reject_cb, uma_name), resolve_cb_(resolve_cb) {
80 DCHECK(!resolve_cb_.is_null());
81 }
82
83 template <typename T>
41 CdmPromiseTemplate<T>::~CdmPromiseTemplate() { 84 CdmPromiseTemplate<T>::~CdmPromiseTemplate() {
42 DCHECK(!is_pending_); 85 DCHECK(!is_pending_);
43 } 86 }
44 87
45 template <typename T> 88 template <typename T>
46 void CdmPromiseTemplate<T>::resolve(const T& result) { 89 void CdmPromiseTemplate<T>::resolve(const T& result) {
47 DCHECK(is_pending_); 90 DCHECK(is_pending_);
48 is_pending_ = false; 91 is_pending_ = false;
92 if (!uma_name_.empty())
Ilya Sherman 2014/08/13 20:06:50 nit: Please add curly braces, here and below.
sandersd (OOO until July 31) 2014/08/13 20:09:51 Done.
93 base::LinearHistogram::FactoryGet(
94 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
95 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
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 base::LinearHistogram::FactoryGet(
125 uma_name_, 1, NUM_RESULT_CODES, NUM_RESULT_CODES + 1,
126 base::HistogramBase::kUmaTargetedHistogramFlag)->Add(SUCCESS);
68 resolve_cb_.Run(); 127 resolve_cb_.Run();
69 } 128 }
70 129
71 // Explicit template instantiation for the Promises needed. 130 // Explicit template instantiation for the Promises needed.
72 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>; 131 template class MEDIA_EXPORT CdmPromiseTemplate<std::string>;
73 132
74 } // namespace media 133 } // namespace media
OLDNEW
« no previous file with comments | « media/base/cdm_promise.h ('k') | tools/metrics/histograms/histograms.xml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698