Chromium Code Reviews
|
| 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 |