OLD | NEW |
1 // | 1 // |
2 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. | 2 // Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. |
3 // | 3 // |
4 // Use of this source code is governed by a BSD-style license | 4 // Use of this source code is governed by a BSD-style license |
5 // that can be found in the LICENSE file in the root of the source | 5 // that can be found in the LICENSE file in the root of the source |
6 // tree. An additional intellectual property rights grant can be found | 6 // tree. An additional intellectual property rights grant can be found |
7 // in the file PATENTS. All contributing project authors may | 7 // in the file PATENTS. All contributing project authors may |
8 // be found in the AUTHORS file in the root of the source tree. | 8 // be found in the AUTHORS file in the root of the source tree. |
9 // | 9 // |
10 | 10 |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 RTC_HISTOGRAM_ENUMERATION(name, sample, 2) | 103 RTC_HISTOGRAM_ENUMERATION(name, sample, 2) |
104 | 104 |
105 // Histogram for enumerators (evenly spaced buckets). | 105 // Histogram for enumerators (evenly spaced buckets). |
106 // |boundary| should be above the max enumerator sample. | 106 // |boundary| should be above the max enumerator sample. |
107 #define RTC_HISTOGRAM_ENUMERATION(name, sample, boundary) \ | 107 #define RTC_HISTOGRAM_ENUMERATION(name, sample, boundary) \ |
108 RTC_HISTOGRAM_COMMON_BLOCK(name, sample, \ | 108 RTC_HISTOGRAM_COMMON_BLOCK(name, sample, \ |
109 webrtc::metrics::HistogramFactoryGetEnumeration(name, boundary)) | 109 webrtc::metrics::HistogramFactoryGetEnumeration(name, boundary)) |
110 | 110 |
111 // The name of the histogram should not vary. | 111 // The name of the histogram should not vary. |
112 // TODO(asapersson): Consider changing string to const char*. | 112 // TODO(asapersson): Consider changing string to const char*. |
113 #define RTC_HISTOGRAM_COMMON_BLOCK(constant_name, sample, \ | 113 #define RTC_HISTOGRAM_COMMON_BLOCK(constant_name, sample, \ |
114 factory_get_invocation) \ | 114 factory_get_invocation) \ |
115 do { \ | 115 do { \ |
116 static webrtc::metrics::Histogram* atomic_histogram_pointer = nullptr; \ | 116 static webrtc::metrics::Histogram* atomic_histogram_pointer = nullptr; \ |
117 webrtc::metrics::Histogram* histogram_pointer = \ | 117 webrtc::metrics::Histogram* histogram_pointer = \ |
118 rtc::AtomicOps::AcquireLoadPtr(&atomic_histogram_pointer); \ | 118 rtc::AtomicOps::AcquireLoadPtr(&atomic_histogram_pointer); \ |
119 if (!histogram_pointer) { \ | 119 if (!histogram_pointer) { \ |
120 histogram_pointer = factory_get_invocation; \ | 120 histogram_pointer = factory_get_invocation; \ |
121 webrtc::metrics::Histogram* prev_pointer = \ | 121 webrtc::metrics::Histogram* prev_pointer = \ |
122 rtc::AtomicOps::CompareAndSwapPtr( \ | 122 rtc::AtomicOps::CompareAndSwapPtr( \ |
123 &atomic_histogram_pointer, \ | 123 &atomic_histogram_pointer, \ |
124 static_cast<webrtc::metrics::Histogram*>(nullptr), \ | 124 static_cast<webrtc::metrics::Histogram*>(nullptr), \ |
125 histogram_pointer); \ | 125 histogram_pointer); \ |
126 RTC_DCHECK(prev_pointer == nullptr || \ | 126 RTC_DCHECK(prev_pointer == nullptr || \ |
127 prev_pointer == histogram_pointer); \ | 127 prev_pointer == histogram_pointer); \ |
128 } \ | 128 } \ |
129 webrtc::metrics::HistogramAdd(histogram_pointer, constant_name, sample); \ | 129 if (histogram_pointer) { \ |
| 130 RTC_DCHECK_EQ(constant_name, \ |
| 131 webrtc::metrics::GetHistogramName(histogram_pointer)) \ |
| 132 << "The name should not vary."; \ |
| 133 webrtc::metrics::HistogramAdd(histogram_pointer, sample); \ |
| 134 } \ |
130 } while (0) | 135 } while (0) |
131 | 136 |
132 // Deprecated. | 137 // Deprecated. |
133 // The histogram is constructed/found for each call. | 138 // The histogram is constructed/found for each call. |
134 // May be used for histograms with infrequent updates. | 139 // May be used for histograms with infrequent updates.` |
135 #define RTC_HISTOGRAM_COMMON_BLOCK_SLOW(name, sample, factory_get_invocation) \ | 140 #define RTC_HISTOGRAM_COMMON_BLOCK_SLOW(name, sample, factory_get_invocation) \ |
136 do { \ | 141 do { \ |
137 webrtc::metrics::Histogram* histogram_pointer = factory_get_invocation; \ | 142 webrtc::metrics::Histogram* histogram_pointer = factory_get_invocation; \ |
138 webrtc::metrics::HistogramAdd(histogram_pointer, name, sample); \ | 143 if (histogram_pointer) { \ |
| 144 webrtc::metrics::HistogramAdd(histogram_pointer, sample); \ |
| 145 } \ |
139 } while (0) | 146 } while (0) |
140 | 147 |
141 | |
142 // Helper macros. | 148 // Helper macros. |
143 // Macros for calling a histogram with varying name (e.g. when using a metric | 149 // Macros for calling a histogram with varying name (e.g. when using a metric |
144 // in different modes such as real-time vs screenshare). | 150 // in different modes such as real-time vs screenshare). |
145 #define RTC_HISTOGRAMS_COUNTS_100(index, name, sample) \ | 151 #define RTC_HISTOGRAMS_COUNTS_100(index, name, sample) \ |
146 RTC_HISTOGRAMS_COMMON(index, name, sample, \ | 152 RTC_HISTOGRAMS_COMMON(index, name, sample, \ |
147 RTC_HISTOGRAM_COUNTS(name, sample, 1, 100, 50)) | 153 RTC_HISTOGRAM_COUNTS(name, sample, 1, 100, 50)) |
148 | 154 |
149 #define RTC_HISTOGRAMS_COUNTS_200(index, name, sample) \ | 155 #define RTC_HISTOGRAMS_COUNTS_200(index, name, sample) \ |
150 RTC_HISTOGRAMS_COMMON(index, name, sample, \ | 156 RTC_HISTOGRAMS_COMMON(index, name, sample, \ |
151 RTC_HISTOGRAM_COUNTS(name, sample, 1, 200, 50)) | 157 RTC_HISTOGRAM_COUNTS(name, sample, 1, 200, 50)) |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
205 | 211 |
206 // Get histogram for counters. | 212 // Get histogram for counters. |
207 Histogram* HistogramFactoryGetCounts( | 213 Histogram* HistogramFactoryGetCounts( |
208 const std::string& name, int min, int max, int bucket_count); | 214 const std::string& name, int min, int max, int bucket_count); |
209 | 215 |
210 // Get histogram for enumerators. | 216 // Get histogram for enumerators. |
211 // |boundary| should be above the max enumerator sample. | 217 // |boundary| should be above the max enumerator sample. |
212 Histogram* HistogramFactoryGetEnumeration( | 218 Histogram* HistogramFactoryGetEnumeration( |
213 const std::string& name, int boundary); | 219 const std::string& name, int boundary); |
214 | 220 |
| 221 // Returns name of the histogram. |
| 222 const std::string& GetHistogramName(Histogram* histogram_pointer); |
| 223 |
215 // Function for adding a |sample| to a histogram. | 224 // Function for adding a |sample| to a histogram. |
216 // |name| can be used to verify that it matches the histogram name. | 225 void HistogramAdd(Histogram* histogram_pointer, int sample); |
217 void HistogramAdd( | |
218 Histogram* histogram_pointer, const std::string& name, int sample); | |
219 | 226 |
220 } // namespace metrics | 227 } // namespace metrics |
221 } // namespace webrtc | 228 } // namespace webrtc |
222 | 229 |
223 #endif // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_METRICS_H_ | 230 #endif // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_METRICS_H_ |
224 | 231 |
OLD | NEW |