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 #include "base/metrics/histogram.h" | 5 #include "base/metrics/histogram.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
11 #include <climits> | 11 #include <climits> |
12 #include <memory> | 12 #include <memory> |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/logging.h" | 16 #include "base/logging.h" |
17 #include "base/metrics/bucket_ranges.h" | 17 #include "base/metrics/bucket_ranges.h" |
18 #include "base/metrics/histogram_macros.h" | 18 #include "base/metrics/histogram_macros.h" |
19 #include "base/metrics/persistent_histogram_allocator.h" | 19 #include "base/metrics/persistent_histogram_allocator.h" |
20 #include "base/metrics/persistent_memory_allocator.h" | 20 #include "base/metrics/persistent_memory_allocator.h" |
21 #include "base/metrics/sample_vector.h" | 21 #include "base/metrics/sample_vector.h" |
22 #include "base/metrics/statistics_recorder.h" | 22 #include "base/metrics/statistics_recorder.h" |
23 #include "base/pickle.h" | 23 #include "base/pickle.h" |
24 #include "base/strings/stringprintf.h" | 24 #include "base/strings/stringprintf.h" |
| 25 #include "base/test/gtest_util.h" |
25 #include "base/time/time.h" | 26 #include "base/time/time.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 27 #include "testing/gtest/include/gtest/gtest.h" |
27 | 28 |
28 namespace base { | 29 namespace base { |
29 | 30 |
30 // Test parameter indicates if a persistent memory allocator should be used | 31 // Test parameter indicates if a persistent memory allocator should be used |
31 // for histogram allocation. False will allocate histograms from the process | 32 // for histogram allocation. False will allocate histograms from the process |
32 // heap. | 33 // heap. |
33 class HistogramTest : public testing::TestWithParam<bool> { | 34 class HistogramTest : public testing::TestWithParam<bool> { |
34 protected: | 35 protected: |
(...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 histogram->Add(i & 127); | 695 histogram->Add(i & 127); |
695 TimeDelta add_ticks = TimeTicks::Now() - add_start; | 696 TimeDelta add_ticks = TimeTicks::Now() - add_start; |
696 int64_t add_ms = add_ticks.InMilliseconds(); | 697 int64_t add_ms = add_ticks.InMilliseconds(); |
697 | 698 |
698 VLOG(1) << kTestAddCount << " histogram adds took " << add_ms | 699 VLOG(1) << kTestAddCount << " histogram adds took " << add_ms |
699 << "ms or about " | 700 << "ms or about " |
700 << (add_ms * 1000000) / kTestAddCount | 701 << (add_ms * 1000000) / kTestAddCount |
701 << "ns each."; | 702 << "ns each."; |
702 } | 703 } |
703 | 704 |
704 #if GTEST_HAS_DEATH_TEST | |
705 // For Histogram, LinearHistogram and CustomHistogram, the minimum for a | 705 // For Histogram, LinearHistogram and CustomHistogram, the minimum for a |
706 // declared range is 1, while the maximum is (HistogramBase::kSampleType_MAX - | 706 // declared range is 1, while the maximum is (HistogramBase::kSampleType_MAX - |
707 // 1). But we accept ranges exceeding those limits, and silently clamped to | 707 // 1). But we accept ranges exceeding those limits, and silently clamped to |
708 // those limits. This is for backwards compatibility. | 708 // those limits. This is for backwards compatibility. |
709 TEST(HistogramDeathTest, BadRangesTest) { | 709 TEST(HistogramDeathTest, BadRangesTest) { |
710 HistogramBase* histogram = Histogram::FactoryGet( | 710 HistogramBase* histogram = Histogram::FactoryGet( |
711 "BadRanges", 0, HistogramBase::kSampleType_MAX, 8, | 711 "BadRanges", 0, HistogramBase::kSampleType_MAX, 8, |
712 HistogramBase::kNoFlags); | 712 HistogramBase::kNoFlags); |
713 EXPECT_TRUE( | 713 EXPECT_TRUE( |
714 histogram->HasConstructionArguments( | 714 histogram->HasConstructionArguments( |
(...skipping 13 matching lines...) Expand all Loading... |
728 CustomHistogram::FactoryGet( | 728 CustomHistogram::FactoryGet( |
729 "BadRangesCustom", custom_ranges, HistogramBase::kNoFlags)); | 729 "BadRangesCustom", custom_ranges, HistogramBase::kNoFlags)); |
730 const BucketRanges* ranges = custom_histogram->bucket_ranges(); | 730 const BucketRanges* ranges = custom_histogram->bucket_ranges(); |
731 ASSERT_EQ(3u, ranges->size()); | 731 ASSERT_EQ(3u, ranges->size()); |
732 EXPECT_EQ(0, ranges->range(0)); | 732 EXPECT_EQ(0, ranges->range(0)); |
733 EXPECT_EQ(5, ranges->range(1)); | 733 EXPECT_EQ(5, ranges->range(1)); |
734 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges->range(2)); | 734 EXPECT_EQ(HistogramBase::kSampleType_MAX, ranges->range(2)); |
735 | 735 |
736 // CustomHistogram does not accepts kSampleType_MAX as range. | 736 // CustomHistogram does not accepts kSampleType_MAX as range. |
737 custom_ranges.push_back(HistogramBase::kSampleType_MAX); | 737 custom_ranges.push_back(HistogramBase::kSampleType_MAX); |
738 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom2", custom_ranges, | 738 EXPECT_DCHECK_DEATH( |
739 HistogramBase::kNoFlags), | 739 CustomHistogram::FactoryGet("BadRangesCustom2", custom_ranges, |
740 ""); | 740 HistogramBase::kNoFlags), |
| 741 ""); |
741 | 742 |
742 // CustomHistogram needs at least 1 valid range. | 743 // CustomHistogram needs at least 1 valid range. |
743 custom_ranges.clear(); | 744 custom_ranges.clear(); |
744 custom_ranges.push_back(0); | 745 custom_ranges.push_back(0); |
745 EXPECT_DEATH(CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, | 746 EXPECT_DCHECK_DEATH( |
746 HistogramBase::kNoFlags), | 747 CustomHistogram::FactoryGet("BadRangesCustom3", custom_ranges, |
747 ""); | 748 HistogramBase::kNoFlags), |
| 749 ""); |
748 } | 750 } |
749 #endif | |
750 | 751 |
751 } // namespace base | 752 } // namespace base |
OLD | NEW |