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

Side by Side Diff: base/metrics/statistics_recorder_unittest.cc

Issue 10834011: Refactor of Histogram related code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 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 | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <vector>
6
7 #include "base/memory/scoped_ptr.h"
8 #include "base/metrics/histogram.h"
9 #include "base/metrics/statistics_recorder.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace base {
13
14 class StatisticsRecorderTest : public testing::Test {
15 protected:
16 virtual void SetUp() {
17 // Each test will have a clean state (no Histogram / BucketRanges
18 // registered).
19 InitializeStatisticsRecorder();
20 }
21
22 virtual void TearDown() {
23 UninitializeStatisticsRecorder();
24 }
25
26 void InitializeStatisticsRecorder() {
27 statistics_recorder_ = new StatisticsRecorder();
28 }
29
30 void UninitializeStatisticsRecorder() {
31 delete statistics_recorder_;
32 statistics_recorder_ = NULL;
33 }
34
35 void DeleteHistogram(Histogram* histogram) {
36 delete histogram;
37 }
38
39 StatisticsRecorder* statistics_recorder_;
40 };
41
42 TEST_F(StatisticsRecorderTest, NotInitialized) {
43 UninitializeStatisticsRecorder();
44
45 ASSERT_FALSE(StatisticsRecorder::IsActive());
46
47 StatisticsRecorder::Histograms registered_histograms;
48 std::vector<const BucketRanges*> registered_ranges;
49
50 // We can still create histograms, but it's not registered.
51 // TODO(kaiwang): Do not depend on Histogram FactoryGet implementation.
52 Histogram* histogram(
53 Histogram::FactoryGet("StatisticsRecorderTest_NotInitialized",
54 1, 1000, 10, Histogram::kNoFlags));
55 StatisticsRecorder::GetHistograms(&registered_histograms);
56 EXPECT_EQ(0u, registered_histograms.size());
57
58 // RegisterOrDeleteDuplicateRanges is a no-op.
59 BucketRanges* ranges = new BucketRanges(3);;
60 ranges->ResetChecksum();
61 EXPECT_EQ(ranges,
62 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges));
63 StatisticsRecorder::GetBucketRanges(&registered_ranges);
64 EXPECT_EQ(0u, registered_ranges.size());
65
66 DeleteHistogram(histogram);
67 }
68
69 TEST_F(StatisticsRecorderTest, RegisterBucketRanges) {
70 std::vector<const BucketRanges*> registered_ranges;
71
72 BucketRanges* ranges1 = new BucketRanges(3);;
73 ranges1->ResetChecksum();
74 BucketRanges* ranges2 = new BucketRanges(4);;
75 ranges2->ResetChecksum();
76
77 // Register new ranges.
78 EXPECT_EQ(ranges1,
79 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
80 EXPECT_EQ(ranges2,
81 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges2));
82 StatisticsRecorder::GetBucketRanges(&registered_ranges);
83 ASSERT_EQ(2u, registered_ranges.size());
84
85 // Register some ranges again.
86 EXPECT_EQ(ranges1,
87 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
88 registered_ranges.clear();
89 StatisticsRecorder::GetBucketRanges(&registered_ranges);
90 ASSERT_EQ(2u, registered_ranges.size());
91 // Make sure the ranges is still the one we know.
92 ASSERT_EQ(3u, ranges1->size());
93 EXPECT_EQ(0, ranges1->range(0));
94 EXPECT_EQ(0, ranges1->range(1));
95 EXPECT_EQ(0, ranges1->range(2));
96
97 // Register ranges with same values.
98 BucketRanges* ranges3 = new BucketRanges(3);;
99 ranges3->ResetChecksum();
100 EXPECT_EQ(ranges1, // returning ranges1
101 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges3));
102 registered_ranges.clear();
103 StatisticsRecorder::GetBucketRanges(&registered_ranges);
104 ASSERT_EQ(2u, registered_ranges.size());
105 }
106
107 TEST_F(StatisticsRecorderTest, RegisterHistogram) {
108 // Create a Histogram that was not registered.
109 // TODO(kaiwang): Do not depend on Histogram FactoryGet implementation.
110 UninitializeStatisticsRecorder();
111 Histogram* histogram = Histogram::FactoryGet(
112 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
113
114 // Clean StatisticsRecorder.
115 InitializeStatisticsRecorder();
116 StatisticsRecorder::Histograms registered_histograms;
117 StatisticsRecorder::GetHistograms(&registered_histograms);
118 EXPECT_EQ(0u, registered_histograms.size());
119
120 // Register the Histogram.
121 EXPECT_EQ(histogram,
122 StatisticsRecorder::RegisterOrDeleteDuplicate(histogram));
123 StatisticsRecorder::GetHistograms(&registered_histograms);
124 EXPECT_EQ(1u, registered_histograms.size());
125
126 // Register the same Histogram again.
127 EXPECT_EQ(histogram,
128 StatisticsRecorder::RegisterOrDeleteDuplicate(histogram));
129 registered_histograms.clear();
130 StatisticsRecorder::GetHistograms(&registered_histograms);
131 EXPECT_EQ(1u, registered_histograms.size());
132 }
133
134 TEST_F(StatisticsRecorderTest, FindHistogram) {
135 Histogram* histogram1 = Histogram::FactoryGet(
136 "TestHistogram1", 1, 1000, 10, Histogram::kNoFlags);
137 Histogram* histogram2 = Histogram::FactoryGet(
138 "TestHistogram2", 1, 1000, 10, Histogram::kNoFlags);
139
140 EXPECT_EQ(histogram1, StatisticsRecorder::FindHistogram("TestHistogram1"));
141 EXPECT_EQ(histogram2, StatisticsRecorder::FindHistogram("TestHistogram2"));
142 EXPECT_TRUE(StatisticsRecorder::FindHistogram("TestHistogram") == NULL);
143 }
144
145 TEST_F(StatisticsRecorderTest, GetSnapshot) {
146 Histogram::FactoryGet("TestHistogram1", 1, 1000, 10, Histogram::kNoFlags);
147 Histogram::FactoryGet("TestHistogram2", 1, 1000, 10, Histogram::kNoFlags);
148 Histogram::FactoryGet("TestHistogram3", 1, 1000, 10, Histogram::kNoFlags);
149
150 StatisticsRecorder::Histograms snapshot;
151 StatisticsRecorder::GetSnapshot("Test", &snapshot);
152 EXPECT_EQ(3u, snapshot.size());
153
154 snapshot.clear();
155 StatisticsRecorder::GetSnapshot("1", &snapshot);
156 EXPECT_EQ(1u, snapshot.size());
157
158 snapshot.clear();
159 StatisticsRecorder::GetSnapshot("hello", &snapshot);
160 EXPECT_EQ(0u, snapshot.size());
161 }
162
163 TEST_F(StatisticsRecorderTest, RegisterHistogramWithFactoryGet) {
164 StatisticsRecorder::Histograms registered_histograms;
165
166 StatisticsRecorder::GetHistograms(&registered_histograms);
167 ASSERT_EQ(0u, registered_histograms.size());
168
169 // Create a Histogram.
170 Histogram* histogram = Histogram::FactoryGet(
171 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
172 registered_histograms.clear();
173 StatisticsRecorder::GetHistograms(&registered_histograms);
174 EXPECT_EQ(1u, registered_histograms.size());
175
176 // Get an existing histogram.
177 Histogram* histogram2 = Histogram::FactoryGet(
178 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
179 registered_histograms.clear();
180 StatisticsRecorder::GetHistograms(&registered_histograms);
181 EXPECT_EQ(1u, registered_histograms.size());
182 EXPECT_EQ(histogram, histogram2);
183
184 // Create a LinearHistogram.
185 histogram = LinearHistogram::FactoryGet(
186 "TestLinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
187 registered_histograms.clear();
188 StatisticsRecorder::GetHistograms(&registered_histograms);
189 EXPECT_EQ(2u, registered_histograms.size());
190
191 // Create a BooleanHistogram.
192 histogram = BooleanHistogram::FactoryGet(
193 "TestBooleanHistogram", Histogram::kNoFlags);
194 registered_histograms.clear();
195 StatisticsRecorder::GetHistograms(&registered_histograms);
196 EXPECT_EQ(3u, registered_histograms.size());
197
198 // Create a CustomHistogram.
199 std::vector<int> custom_ranges;
200 custom_ranges.push_back(1);
201 custom_ranges.push_back(5);
202 histogram = CustomHistogram::FactoryGet(
203 "TestCustomHistogram", custom_ranges, Histogram::kNoFlags);
204 registered_histograms.clear();
205 StatisticsRecorder::GetHistograms(&registered_histograms);
206 EXPECT_EQ(4u, registered_histograms.size());
207 }
208
209 TEST_F(StatisticsRecorderTest, RegisterHistogramWithMacros) {
210 StatisticsRecorder::Histograms registered_histograms;
211
212 Histogram* histogram = Histogram::FactoryGet(
213 "TestHistogramCounts", 1, 1000000, 50, Histogram::kNoFlags);
214
215 // The histogram we got from macro is the same as from FactoryGet.
216 HISTOGRAM_COUNTS("TestHistogramCounts", 30);
217 registered_histograms.clear();
218 StatisticsRecorder::GetHistograms(&registered_histograms);
219 ASSERT_EQ(1u, registered_histograms.size());
220 EXPECT_EQ(histogram, registered_histograms[0]);
221
222 HISTOGRAM_TIMES("TestHistogramTimes", TimeDelta::FromDays(1));
223 HISTOGRAM_ENUMERATION("TestHistogramEnumeration", 20, 200);
224
225 registered_histograms.clear();
226 StatisticsRecorder::GetHistograms(&registered_histograms);
227 EXPECT_EQ(3u, registered_histograms.size());
228
229 // Debugging only macros.
230 DHISTOGRAM_TIMES("TestHistogramDebugTimes", TimeDelta::FromDays(1));
231 DHISTOGRAM_COUNTS("TestHistogramDebugCounts", 30);
232 registered_histograms.clear();
233 StatisticsRecorder::GetHistograms(&registered_histograms);
234 #ifndef NDEBUG
235 EXPECT_EQ(5u, registered_histograms.size());
236 #else
237 EXPECT_EQ(3u, registered_histograms.size());
238 #endif
239 }
240
241 TEST_F(StatisticsRecorderTest, BucketRangesSharing) {
242 Histogram* histogram1(Histogram::FactoryGet(
243 "Histogram", 1, 64, 8, Histogram::kNoFlags));
244 Histogram* histogram2(Histogram::FactoryGet(
245 "Histogram2", 1, 64, 8, Histogram::kNoFlags));
246 Histogram* histogram3(Histogram::FactoryGet(
247 "Histogram3", 1, 64, 16, Histogram::kNoFlags));
248
249 const BucketRanges* bucket_ranges1 = histogram1->bucket_ranges();
250 const BucketRanges* bucket_ranges2 = histogram2->bucket_ranges();
251 const BucketRanges* bucket_ranges3 = histogram3->bucket_ranges();
252 EXPECT_EQ(bucket_ranges1, bucket_ranges2);
253 EXPECT_FALSE(bucket_ranges1->Equals(bucket_ranges3));
254 }
255
256 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698