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

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 StatisticsRecorder* statistics_recorder_;
36 };
37
38 TEST_F(StatisticsRecorderTest, NotInitialized) {
39 UninitializeStatisticsRecorder();
40
41 ASSERT_FALSE(StatisticsRecorder::IsActive());
42
43 StatisticsRecorder::Histograms registered_histograms;
44 std::vector<const BucketRanges*> registered_ranges;
45
46 // We can still create histograms, but it's not registered.
47 // TODO(kaiwang): Do not depend on Histogram FactoryGet implementation.
48 scoped_ptr<Histogram> histogram(
49 Histogram::FactoryGet("StatisticsRecorderTest_NotInitialized",
50 1, 1000, 10, Histogram::kNoFlags));
51 StatisticsRecorder::GetHistograms(&registered_histograms);
52 EXPECT_EQ(0u, registered_histograms.size());
53
54 // RegisterOrDeleteDuplicateRanges is a no-op.
55 BucketRanges* ranges = new BucketRanges(3);;
56 ranges->ResetChecksum();
57 EXPECT_EQ(
58 static_cast<const BucketRanges*>(ranges),
jar (doing other things) 2012/08/01 00:26:10 nit: you can push 58 back onto 57, and then align
kaiwang 2012/08/01 04:13:21 Done.
59 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges));
60 StatisticsRecorder::GetBucketRanges(&registered_ranges);
61 EXPECT_EQ(0u, registered_ranges.size());
62 }
63
64 TEST_F(StatisticsRecorderTest, RegisterBucketRanges) {
65 std::vector<const BucketRanges*> registered_ranges;
66
67 BucketRanges* ranges1 = new BucketRanges(3);;
68 ranges1->ResetChecksum();
69 BucketRanges* ranges2 = new BucketRanges(4);;
70 ranges2->ResetChecksum();
71
72 // Register new ranges.
73 EXPECT_EQ(
74 static_cast<const BucketRanges*>(ranges1),
75 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
76 EXPECT_EQ(
77 static_cast<const BucketRanges*>(ranges2),
78 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges2));
79 StatisticsRecorder::GetBucketRanges(&registered_ranges);
80 ASSERT_EQ(2u, registered_ranges.size());
81
82 // Register some ranges again.
83 EXPECT_EQ(
84 static_cast<const BucketRanges*>(ranges1),
85 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges1));
86 registered_ranges.clear();
87 StatisticsRecorder::GetBucketRanges(&registered_ranges);
88 ASSERT_EQ(2u, registered_ranges.size());
89 // Make sure the ranges is still the one we know.
90 EXPECT_EQ(3u, ranges1->size());
jar (doing other things) 2012/08/01 00:26:10 Assert
kaiwang 2012/08/01 04:13:21 Done.
91 EXPECT_EQ(0, ranges1->range(0));
92 EXPECT_EQ(0, ranges1->range(1));
93 EXPECT_EQ(0, ranges1->range(2));
94
95 // Register ranges with same values.
96 BucketRanges* ranges3 = new BucketRanges(3);;
97 ranges3->ResetChecksum();
98 EXPECT_EQ(
99 static_cast<const BucketRanges*>(ranges1), // returning ranges1
jar (doing other things) 2012/08/01 00:26:10 nit: probably don't need cast to compare pointers.
kaiwang 2012/08/01 04:13:21 Done.
100 StatisticsRecorder::RegisterOrDeleteDuplicateRanges(ranges3));
101 registered_ranges.clear();
102 StatisticsRecorder::GetBucketRanges(&registered_ranges);
103 ASSERT_EQ(2u, registered_ranges.size());
104 }
105
106 TEST_F(StatisticsRecorderTest, RegisterHistogram) {
107 // Create a Histogram that was not registered.
108 // TODO(kaiwang): Do not depend on Histogram FactoryGet implementation.
109 UninitializeStatisticsRecorder();
110 Histogram* histogram = Histogram::FactoryGet(
111 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
112
113 // Clean StatisticsRecorder.
114 InitializeStatisticsRecorder();
115 StatisticsRecorder::Histograms registered_histograms;
116 StatisticsRecorder::GetHistograms(&registered_histograms);
117 EXPECT_EQ(0u, registered_histograms.size());
118
119 // Register the Histogram.
120 EXPECT_EQ(histogram,
121 StatisticsRecorder::RegisterOrDeleteDuplicate(histogram));
122 StatisticsRecorder::GetHistograms(&registered_histograms);
123 EXPECT_EQ(1u, registered_histograms.size());
124
125 // Register the same Histogram again.
126 EXPECT_EQ(histogram,
127 StatisticsRecorder::RegisterOrDeleteDuplicate(histogram));
128 registered_histograms.clear();
129 StatisticsRecorder::GetHistograms(&registered_histograms);
130 EXPECT_EQ(1u, registered_histograms.size());
131 }
132
133 TEST_F(StatisticsRecorderTest, FindHistogram) {
134 Histogram* histogram1 = Histogram::FactoryGet(
135 "TestHistogram1", 1, 1000, 10, Histogram::kNoFlags);
136 Histogram* histogram2 = Histogram::FactoryGet(
137 "TestHistogram2", 1, 1000, 10, Histogram::kNoFlags);
138
139 EXPECT_EQ(histogram1, StatisticsRecorder::FindHistogram("TestHistogram1"));
140 EXPECT_EQ(histogram2, StatisticsRecorder::FindHistogram("TestHistogram2"));
141 EXPECT_TRUE(StatisticsRecorder::FindHistogram("TestHistogram") == NULL);
142 }
143
144 TEST_F(StatisticsRecorderTest, GetSnapshot) {
145 Histogram::FactoryGet("TestHistogram1", 1, 1000, 10, Histogram::kNoFlags);
146 Histogram::FactoryGet("TestHistogram2", 1, 1000, 10, Histogram::kNoFlags);
147 Histogram::FactoryGet("TestHistogram3", 1, 1000, 10, Histogram::kNoFlags);
148
149 StatisticsRecorder::Histograms snapshot;
150 StatisticsRecorder::GetSnapshot("Test", &snapshot);
151 EXPECT_EQ(3u, snapshot.size());
152
153 snapshot.clear();
154 StatisticsRecorder::GetSnapshot("1", &snapshot);
155 EXPECT_EQ(1u, snapshot.size());
156
157 snapshot.clear();
158 StatisticsRecorder::GetSnapshot("hello", &snapshot);
159 EXPECT_EQ(0u, snapshot.size());
160 }
161
162 TEST_F(StatisticsRecorderTest, RegisterHistogramWithFactoryGet) {
163 StatisticsRecorder::Histograms registered_histograms;
164
165 StatisticsRecorder::GetHistograms(&registered_histograms);
166 ASSERT_EQ(0u, registered_histograms.size());
167
168 // Create a Histogram.
169 Histogram* histogram = Histogram::FactoryGet(
170 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
171 registered_histograms.clear();
172 StatisticsRecorder::GetHistograms(&registered_histograms);
173 EXPECT_EQ(1u, registered_histograms.size());
174
175 // Create a LinearHistogram.
176 histogram = LinearHistogram::FactoryGet(
177 "TestLinearHistogram", 1, 1000, 10, Histogram::kNoFlags);
178 registered_histograms.clear();
179 StatisticsRecorder::GetHistograms(&registered_histograms);
180 EXPECT_EQ(2u, registered_histograms.size());
181
182 // Create a BooleanHistogram.
183 histogram = BooleanHistogram::FactoryGet(
184 "TestBooleanHistogram", Histogram::kNoFlags);
185 registered_histograms.clear();
186 StatisticsRecorder::GetHistograms(&registered_histograms);
187 EXPECT_EQ(3u, registered_histograms.size());
188
189 // Create a CustomHistogram.
190 std::vector<int> custom_ranges;
191 custom_ranges.push_back(1);
192 custom_ranges.push_back(5);
193 histogram = CustomHistogram::FactoryGet(
194 "TestCustomHistogram", custom_ranges, Histogram::kNoFlags);
195 registered_histograms.clear();
196 StatisticsRecorder::GetHistograms(&registered_histograms);
197 EXPECT_EQ(4u, registered_histograms.size());
198
199 // Get an existing histogram.
200 histogram = Histogram::FactoryGet(
jar (doing other things) 2012/08/01 00:26:10 Suggest using a separate variable, and verifying y
kaiwang 2012/08/01 04:13:21 Done.
201 "TestHistogram", 1, 1000, 10, Histogram::kNoFlags);
202 registered_histograms.clear();
203 StatisticsRecorder::GetHistograms(&registered_histograms);
204 EXPECT_EQ(4u, registered_histograms.size());
205 }
206
207 TEST_F(StatisticsRecorderTest, RegisterHistogramWithMacros) {
208 StatisticsRecorder::Histograms registered_histograms;
jar (doing other things) 2012/08/01 00:26:10 Perhaps another comprare macro to a FactoryGet for
kaiwang 2012/08/01 04:13:21 Done.
209
210 HISTOGRAM_TIMES("TestHistogramTimes", TimeDelta::FromDays(1));
211 HISTOGRAM_COUNTS("TestHistogramCounts", 30);
212 HISTOGRAM_ENUMERATION("TestHistogramEnumeration", 20, 200);
213
214 StatisticsRecorder::GetHistograms(&registered_histograms);
215 EXPECT_EQ(3u, registered_histograms.size());
216
217 // Debugging only macros.
218 DHISTOGRAM_TIMES("TestHistogramDebugTimes", TimeDelta::FromDays(1));
219 DHISTOGRAM_COUNTS("TestHistogramDebugCounts", 30);
220 registered_histograms.clear();
221 StatisticsRecorder::GetHistograms(&registered_histograms);
222 #ifndef NDEBUG
223 EXPECT_EQ(5u, registered_histograms.size());
224 #else
225 EXPECT_EQ(3u, registered_histograms.size());
226 #endif
227 }
228
229 TEST_F(StatisticsRecorderTest, BucketRangesSharing) {
230 Histogram* histogram1(Histogram::FactoryGet(
231 "Histogram", 1, 64, 8, Histogram::kNoFlags));
232 Histogram* histogram2(Histogram::FactoryGet(
233 "Histogram2", 1, 64, 8, Histogram::kNoFlags));
234 Histogram* histogram3(Histogram::FactoryGet(
235 "Histogram3", 1, 64, 16, Histogram::kNoFlags));
236
237 const BucketRanges* bucket_ranges1 = histogram1->bucket_ranges();
238 const BucketRanges* bucket_ranges2 = histogram2->bucket_ranges();
239 const BucketRanges* bucket_ranges3 = histogram3->bucket_ranges();
240 EXPECT_EQ(bucket_ranges1, bucket_ranges2);
241 EXPECT_FALSE(bucket_ranges1->Equals(bucket_ranges3));
242 }
243
244 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698