| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 // Test of Histogram class | 5 // Test of Histogram class |
| 6 | 6 |
| 7 #include <climits> | 7 #include <climits> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 "DuplicatedHistogram", 1, 101, 102, HistogramBase::kNoFlags); | 83 "DuplicatedHistogram", 1, 101, 102, HistogramBase::kNoFlags); |
| 84 | 84 |
| 85 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); | 85 scoped_ptr<HistogramSamples> samples = histogram->SnapshotSamples(); |
| 86 EXPECT_EQ(2, samples->TotalCount()); | 86 EXPECT_EQ(2, samples->TotalCount()); |
| 87 EXPECT_EQ(2, samples->GetCount(10)); | 87 EXPECT_EQ(2, samples->GetCount(10)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 TEST_F(HistogramTest, ExponentialRangesTest) { | 90 TEST_F(HistogramTest, ExponentialRangesTest) { |
| 91 // Check that we got a nice exponential when there was enough rooom. | 91 // Check that we got a nice exponential when there was enough rooom. |
| 92 BucketRanges ranges(9); | 92 BucketRanges ranges(9); |
| 93 Histogram::InitializeBucketRanges(1, 64, 8, &ranges); | 93 Histogram::InitializeBucketRanges(1, 64, &ranges); |
| 94 EXPECT_EQ(0, ranges.range(0)); | 94 EXPECT_EQ(0, ranges.range(0)); |
| 95 int power_of_2 = 1; | 95 int power_of_2 = 1; |
| 96 for (int i = 1; i < 8; i++) { | 96 for (int i = 1; i < 8; i++) { |
| 97 EXPECT_EQ(power_of_2, ranges.range(i)); | 97 EXPECT_EQ(power_of_2, ranges.range(i)); |
| 98 power_of_2 *= 2; | 98 power_of_2 *= 2; |
| 99 } | 99 } |
| 100 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); | 100 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); |
| 101 | 101 |
| 102 // Check the corresponding Histogram will use the correct ranges. | 102 // Check the corresponding Histogram will use the correct ranges. |
| 103 Histogram* histogram = static_cast<Histogram*>( | 103 Histogram* histogram = static_cast<Histogram*>( |
| 104 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); | 104 Histogram::FactoryGet("Histogram", 1, 64, 8, HistogramBase::kNoFlags)); |
| 105 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); | 105 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); |
| 106 | 106 |
| 107 // When bucket count is limited, exponential ranges will partially look like | 107 // When bucket count is limited, exponential ranges will partially look like |
| 108 // linear. | 108 // linear. |
| 109 BucketRanges ranges2(16); | 109 BucketRanges ranges2(16); |
| 110 Histogram::InitializeBucketRanges(1, 32, 15, &ranges2); | 110 Histogram::InitializeBucketRanges(1, 32, &ranges2); |
| 111 | 111 |
| 112 EXPECT_EQ(0, ranges2.range(0)); | 112 EXPECT_EQ(0, ranges2.range(0)); |
| 113 EXPECT_EQ(1, ranges2.range(1)); | 113 EXPECT_EQ(1, ranges2.range(1)); |
| 114 EXPECT_EQ(2, ranges2.range(2)); | 114 EXPECT_EQ(2, ranges2.range(2)); |
| 115 EXPECT_EQ(3, ranges2.range(3)); | 115 EXPECT_EQ(3, ranges2.range(3)); |
| 116 EXPECT_EQ(4, ranges2.range(4)); | 116 EXPECT_EQ(4, ranges2.range(4)); |
| 117 EXPECT_EQ(5, ranges2.range(5)); | 117 EXPECT_EQ(5, ranges2.range(5)); |
| 118 EXPECT_EQ(6, ranges2.range(6)); | 118 EXPECT_EQ(6, ranges2.range(6)); |
| 119 EXPECT_EQ(7, ranges2.range(7)); | 119 EXPECT_EQ(7, ranges2.range(7)); |
| 120 EXPECT_EQ(9, ranges2.range(8)); | 120 EXPECT_EQ(9, ranges2.range(8)); |
| 121 EXPECT_EQ(11, ranges2.range(9)); | 121 EXPECT_EQ(11, ranges2.range(9)); |
| 122 EXPECT_EQ(14, ranges2.range(10)); | 122 EXPECT_EQ(14, ranges2.range(10)); |
| 123 EXPECT_EQ(17, ranges2.range(11)); | 123 EXPECT_EQ(17, ranges2.range(11)); |
| 124 EXPECT_EQ(21, ranges2.range(12)); | 124 EXPECT_EQ(21, ranges2.range(12)); |
| 125 EXPECT_EQ(26, ranges2.range(13)); | 125 EXPECT_EQ(26, ranges2.range(13)); |
| 126 EXPECT_EQ(32, ranges2.range(14)); | 126 EXPECT_EQ(32, ranges2.range(14)); |
| 127 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(15)); | 127 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(15)); |
| 128 | 128 |
| 129 // Check the corresponding Histogram will use the correct ranges. | 129 // Check the corresponding Histogram will use the correct ranges. |
| 130 Histogram* histogram2 = static_cast<Histogram*>( | 130 Histogram* histogram2 = static_cast<Histogram*>( |
| 131 Histogram::FactoryGet("Histogram2", 1, 32, 15, HistogramBase::kNoFlags)); | 131 Histogram::FactoryGet("Histogram2", 1, 32, 15, HistogramBase::kNoFlags)); |
| 132 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); | 132 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); |
| 133 } | 133 } |
| 134 | 134 |
| 135 TEST_F(HistogramTest, LinearRangesTest) { | 135 TEST_F(HistogramTest, LinearRangesTest) { |
| 136 BucketRanges ranges(9); | 136 BucketRanges ranges(9); |
| 137 LinearHistogram::InitializeBucketRanges(1, 7, 8, &ranges); | 137 LinearHistogram::InitializeBucketRanges(1, 7, &ranges); |
| 138 // Gets a nice linear set of bucket ranges. | 138 // Gets a nice linear set of bucket ranges. |
| 139 for (int i = 0; i < 8; i++) | 139 for (int i = 0; i < 8; i++) |
| 140 EXPECT_EQ(i, ranges.range(i)); | 140 EXPECT_EQ(i, ranges.range(i)); |
| 141 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); | 141 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges.range(8)); |
| 142 | 142 |
| 143 // The correspoding LinearHistogram should use the correct ranges. | 143 // The correspoding LinearHistogram should use the correct ranges. |
| 144 Histogram* histogram = static_cast<Histogram*>( | 144 Histogram* histogram = static_cast<Histogram*>( |
| 145 LinearHistogram::FactoryGet("Linear", 1, 7, 8, HistogramBase::kNoFlags)); | 145 LinearHistogram::FactoryGet("Linear", 1, 7, 8, HistogramBase::kNoFlags)); |
| 146 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); | 146 EXPECT_TRUE(ranges.Equals(histogram->bucket_ranges())); |
| 147 | 147 |
| 148 // Linear ranges are not divisible. | 148 // Linear ranges are not divisible. |
| 149 BucketRanges ranges2(6); | 149 BucketRanges ranges2(6); |
| 150 LinearHistogram::InitializeBucketRanges(1, 6, 5, &ranges2); | 150 LinearHistogram::InitializeBucketRanges(1, 6, &ranges2); |
| 151 EXPECT_EQ(0, ranges2.range(0)); | 151 EXPECT_EQ(0, ranges2.range(0)); |
| 152 EXPECT_EQ(1, ranges2.range(1)); | 152 EXPECT_EQ(1, ranges2.range(1)); |
| 153 EXPECT_EQ(3, ranges2.range(2)); | 153 EXPECT_EQ(3, ranges2.range(2)); |
| 154 EXPECT_EQ(4, ranges2.range(3)); | 154 EXPECT_EQ(4, ranges2.range(3)); |
| 155 EXPECT_EQ(6, ranges2.range(4)); | 155 EXPECT_EQ(6, ranges2.range(4)); |
| 156 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(5)); | 156 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges2.range(5)); |
| 157 // The correspoding LinearHistogram should use the correct ranges. | 157 // The correspoding LinearHistogram should use the correct ranges. |
| 158 Histogram* histogram2 = static_cast<Histogram*>( | 158 Histogram* histogram2 = static_cast<Histogram*>( |
| 159 LinearHistogram::FactoryGet("Linear2", 1, 6, 5, HistogramBase::kNoFlags)); | 159 LinearHistogram::FactoryGet("Linear2", 1, 6, 5, HistogramBase::kNoFlags)); |
| 160 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); | 160 EXPECT_TRUE(ranges2.Equals(histogram2->bucket_ranges())); |
| (...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 // CustomHistogram needs at least 1 valid range. | 484 // CustomHistogram needs at least 1 valid range. |
| 485 custom_ranges.clear(); | 485 custom_ranges.clear(); |
| 486 custom_ranges.push_back(0); | 486 custom_ranges.push_back(0); |
| 487 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, | 487 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, |
| 488 HistogramBase::kNoFlags), | 488 HistogramBase::kNoFlags), |
| 489 ""); | 489 ""); |
| 490 } | 490 } |
| 491 #endif | 491 #endif |
| 492 | 492 |
| 493 } // namespace base | 493 } // namespace base |
| OLD | NEW |