|
OLD | NEW |
---|---|
(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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_histograms); | |
117 EXPECT_EQ(0u, registered_histograms.size()); | |
118 | |
119 // Register the Histogram. | |
120 EXPECT_EQ(histogram, | |
121 StatisticsRecorder::RegisterOrDeleteDuplicate(histogram)); | |
122 StatisticsRecorder::GetHistograms(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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(®istered_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 | |
OLD | NEW |