OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // Histogram is an object that aggregates statistics, and can summarize them in | 5 // Histogram is an object that aggregates statistics, and can summarize them in |
6 // various forms, including ASCII graphical, HTML, and numerically (as a | 6 // various forms, including ASCII graphical, HTML, and numerically (as a |
7 // vector of numbers corresponding to each of the aggregating buckets). | 7 // vector of numbers corresponding to each of the aggregating buckets). |
8 | 8 |
9 // It supports calls to accumulate either time intervals (which are processed | 9 // It supports calls to accumulate either time intervals (which are processed |
10 // as integral number of milliseconds), or arbitrary integral units. | 10 // as integral number of milliseconds), or arbitrary integral units. |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
53 #define HISTOGRAM_COUNTS(name, sample) do { \ | 53 #define HISTOGRAM_COUNTS(name, sample) do { \ |
54 static Histogram counter((name), 1, 1000000, 50); \ | 54 static Histogram counter((name), 1, 1000000, 50); \ |
55 counter.Add(sample); \ | 55 counter.Add(sample); \ |
56 } while (0) | 56 } while (0) |
57 | 57 |
58 #define HISTOGRAM_COUNTS_100(name, sample) do { \ | 58 #define HISTOGRAM_COUNTS_100(name, sample) do { \ |
59 static Histogram counter((name), 1, 100, 50); \ | 59 static Histogram counter((name), 1, 100, 50); \ |
60 counter.Add(sample); \ | 60 counter.Add(sample); \ |
61 } while (0) | 61 } while (0) |
62 | 62 |
| 63 #define HISTOGRAM_PERCENTAGE(name, under_one_hundred) do { \ |
| 64 static LinearHistogram counter((name), 1, 100, 101); \ |
| 65 counter.Add(under_one_hundred); \ |
| 66 } while (0) |
| 67 |
63 // For folks that need real specific times, use this, but you'll only get | 68 // For folks that need real specific times, use this, but you'll only get |
64 // samples that are in the range (overly large samples are discarded). | 69 // samples that are in the range (overly large samples are discarded). |
65 #define HISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) do { \ | 70 #define HISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) do { \ |
66 static Histogram counter((name), min, max, bucket_count); \ | 71 static Histogram counter((name), min, max, bucket_count); \ |
67 if ((sample) < (max)) counter.AddTime(sample); \ | 72 if ((sample) < (max)) counter.AddTime(sample); \ |
68 } while (0) | 73 } while (0) |
69 | 74 |
70 //------------------------------------------------------------------------------ | 75 //------------------------------------------------------------------------------ |
71 // This macro set is for a histogram that can support both addition and removal | 76 // This macro set is for a histogram that can support both addition and removal |
72 // of samples. It should be used to render the accumulated asset allocation | 77 // of samples. It should be used to render the accumulated asset allocation |
(...skipping 18 matching lines...) Expand all Loading... |
91 } while (0) | 96 } while (0) |
92 | 97 |
93 //------------------------------------------------------------------------------ | 98 //------------------------------------------------------------------------------ |
94 // Define Debug vs non-debug flavors of macros. | 99 // Define Debug vs non-debug flavors of macros. |
95 #ifndef NDEBUG | 100 #ifndef NDEBUG |
96 | 101 |
97 #define DHISTOGRAM_TIMES(name, sample) HISTOGRAM_TIMES(name, sample) | 102 #define DHISTOGRAM_TIMES(name, sample) HISTOGRAM_TIMES(name, sample) |
98 #define DHISTOGRAM_COUNTS(name, sample) HISTOGRAM_COUNTS(name, sample) | 103 #define DHISTOGRAM_COUNTS(name, sample) HISTOGRAM_COUNTS(name, sample) |
99 #define DASSET_HISTOGRAM_COUNTS(name, sample) ASSET_HISTOGRAM_COUNTS(name, \ | 104 #define DASSET_HISTOGRAM_COUNTS(name, sample) ASSET_HISTOGRAM_COUNTS(name, \ |
100 sample) | 105 sample) |
| 106 #define DHISTOGRAM_PERCENTAGE(name, under_one_hundred) HISTOGRAM_PERCENTAGE(\ |
| 107 name, under_one_hundred) |
101 #define DHISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) \ | 108 #define DHISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) \ |
102 HISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) | 109 HISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) |
103 | 110 |
104 #else // NDEBUG | 111 #else // NDEBUG |
105 | 112 |
106 #define DHISTOGRAM_TIMES(name, sample) do {} while (0) | 113 #define DHISTOGRAM_TIMES(name, sample) do {} while (0) |
107 #define DHISTOGRAM_COUNTS(name, sample) do {} while (0) | 114 #define DHISTOGRAM_COUNTS(name, sample) do {} while (0) |
108 #define DASSET_HISTOGRAM_COUNTS(name, sample) do {} while (0) | 115 #define DASSET_HISTOGRAM_COUNTS(name, sample) do {} while (0) |
| 116 #define DHISTOGRAM_PERCENTAGE(name, under_one_hundred) do {} while (0) |
109 #define DHISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) \ | 117 #define DHISTOGRAM_CLIPPED_TIMES(name, sample, min, max, bucket_count) \ |
110 do {} while (0) | 118 do {} while (0) |
111 | 119 |
112 #endif // NDEBUG | 120 #endif // NDEBUG |
113 | 121 |
114 //------------------------------------------------------------------------------ | 122 //------------------------------------------------------------------------------ |
115 // The following macros provide typical usage scenarios for callers that wish | 123 // The following macros provide typical usage scenarios for callers that wish |
116 // to record histogram data, and have the data submitted/uploaded via UMA. | 124 // to record histogram data, and have the data submitted/uploaded via UMA. |
117 // Not all systems support such UMA, but if they do, the following macros | 125 // Not all systems support such UMA, but if they do, the following macros |
118 // should work with the service. | 126 // should work with the service. |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 counter.SetFlags(kUmaTargetedHistogramFlag); \ | 177 counter.SetFlags(kUmaTargetedHistogramFlag); \ |
170 counter.Add(sample); \ | 178 counter.Add(sample); \ |
171 } while (0) | 179 } while (0) |
172 | 180 |
173 #define UMA_HISTOGRAM_MEMORY_MB(name, sample) do { \ | 181 #define UMA_HISTOGRAM_MEMORY_MB(name, sample) do { \ |
174 static Histogram counter((name), 1, 1000, 50); \ | 182 static Histogram counter((name), 1, 1000, 50); \ |
175 counter.SetFlags(kUmaTargetedHistogramFlag); \ | 183 counter.SetFlags(kUmaTargetedHistogramFlag); \ |
176 counter.Add(sample); \ | 184 counter.Add(sample); \ |
177 } while (0) | 185 } while (0) |
178 | 186 |
| 187 #define UMA_HISTOGRAM_PERCENTAGE(name, under_one_hundred) do { \ |
| 188 static LinearHistogram counter((name), 1, 100, 101); \ |
| 189 counter.SetFlags(kUmaTargetedHistogramFlag); \ |
| 190 counter.Add(under_one_hundred); \ |
| 191 } while (0) |
| 192 |
179 //------------------------------------------------------------------------------ | 193 //------------------------------------------------------------------------------ |
180 | 194 |
181 class Histogram : public StatsRate { | 195 class Histogram : public StatsRate { |
182 public: | 196 public: |
183 typedef int Sample; // Used for samples (and ranges of samples). | 197 typedef int Sample; // Used for samples (and ranges of samples). |
184 typedef int Count; // Used to count samples in a bucket. | 198 typedef int Count; // Used to count samples in a bucket. |
185 static const Sample kSampleType_MAX = INT_MAX; | 199 static const Sample kSampleType_MAX = INT_MAX; |
186 | 200 |
187 typedef std::vector<Count> Counts; | 201 typedef std::vector<Count> Counts; |
188 typedef std::vector<Sample> Ranges; | 202 typedef std::vector<Sample> Ranges; |
(...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 // lock protects access to the above map. | 535 // lock protects access to the above map. |
522 static Lock* lock_; | 536 static Lock* lock_; |
523 | 537 |
524 // Dump all known histograms to log. | 538 // Dump all known histograms to log. |
525 static bool dump_on_exit_; | 539 static bool dump_on_exit_; |
526 | 540 |
527 DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder); | 541 DISALLOW_COPY_AND_ASSIGN(StatisticsRecorder); |
528 }; | 542 }; |
529 | 543 |
530 #endif // BASE_HISTOGRAM_H__ | 544 #endif // BASE_HISTOGRAM_H__ |
OLD | NEW |