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

Side by Side Diff: base/metrics/single_sample_metrics_unittest.cc

Issue 2687583002: Add support for single sample metrics. (Closed)
Patch Set: Fix ios hopefully; address comments. Created 3 years, 7 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
OLDNEW
(Empty)
1 // Copyright 2017 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 "base/metrics/single_sample_metrics.h"
6
7 #include "base/test/gtest_util.h"
8 #include "base/test/histogram_tester.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 namespace base {
12
13 namespace {
14
15 const HistogramBase::Sample kMin = 1;
16 const HistogramBase::Sample kMax = 10;
17 const uint32_t kBucketCount = 10;
18 const char kMetricName[] = "Single.Sample.Metric";
19
20 class SingleSampleMetricsTest : public testing::Test {
21 public:
22 SingleSampleMetricsTest() {}
23
24 ~SingleSampleMetricsTest() override {
25 // Ensure we cleanup after ourselves.
26 SingleSampleMetricsFactory::DeleteFactoryForTesting();
27 }
28
29 private:
30 DISALLOW_COPY_AND_ASSIGN(SingleSampleMetricsTest);
31 };
32
33 } // namespace
34
35 TEST_F(SingleSampleMetricsTest, DefaultFactoryGetSet) {
36 SingleSampleMetricsFactory* factory = SingleSampleMetricsFactory::Get();
37 ASSERT_TRUE(factory);
38
39 // Same factory should be returned evermore.
40 EXPECT_EQ(factory, SingleSampleMetricsFactory::Get());
41
42 // Setting a factory after the default has been instantiated should fail.
43 EXPECT_DCHECK_DEATH(SingleSampleMetricsFactory::SetFactory(nullptr));
44 }
45
46 TEST_F(SingleSampleMetricsTest, CustomFactoryGetSet) {
47 SingleSampleMetricsFactory* factory = new DefaultSingleSampleMetricsFactory();
48 SingleSampleMetricsFactory::SetFactory(factory);
49 EXPECT_EQ(factory, SingleSampleMetricsFactory::Get());
50 }
51
52 TEST_F(SingleSampleMetricsTest, DefaultSingleSampleMetricNoValue) {
53 SingleSampleMetricsFactory* factory = SingleSampleMetricsFactory::Get();
54
55 HistogramTester tester;
56 std::unique_ptr<SingleSampleMetric> metric =
57 factory->CreateCustomCountsMetric(kMetricName, kMin, kMax, kBucketCount);
58 metric.reset();
59
60 // Verify that no sample is recorded if SetSample() is never called.
61 tester.ExpectTotalCount(kMetricName, 0);
62 }
63
64 TEST_F(SingleSampleMetricsTest, DefaultSingleSampleMetricWithValue) {
65 SingleSampleMetricsFactory* factory = SingleSampleMetricsFactory::Get();
66
67 HistogramTester tester;
68 std::unique_ptr<SingleSampleMetric> metric =
69 factory->CreateCustomCountsMetric(kMetricName, kMin, kMax, kBucketCount);
70
71 const HistogramBase::Sample kLastSample = 9;
72 metric->SetSample(1);
73 metric->SetSample(3);
74 metric->SetSample(5);
75 metric->SetSample(kLastSample);
76 metric.reset();
77
78 // Verify only the last sample sent to SetSample() is recorded.
79 tester.ExpectUniqueSample(kMetricName, kLastSample, 1);
80
81 // Verify construction implicitly by requesting a histogram with the same
82 // parameters; this test relies on the fact that histogram objects are unique
83 // per name. Different parameters will result in a nullptr being returned.
84 EXPECT_FALSE(
85 Histogram::FactoryGet(kMetricName, 1, 3, 3, HistogramBase::kNoFlags));
86 EXPECT_TRUE(Histogram::FactoryGet(kMetricName, kMin, kMax, kBucketCount,
87 HistogramBase::kUmaTargetedHistogramFlag));
88 }
89
90 TEST_F(SingleSampleMetricsTest, MultipleMetricsAreDistinct) {
91 SingleSampleMetricsFactory* factory = SingleSampleMetricsFactory::Get();
92
93 HistogramTester tester;
94 std::unique_ptr<SingleSampleMetric> metric =
95 factory->CreateCustomCountsMetric(kMetricName, kMin, kMax, kBucketCount);
96 std::unique_ptr<SingleSampleMetric> metric2 =
97 factory->CreateCustomCountsMetric(kMetricName, kMin, kMax, kBucketCount);
98 const char kMetricName2[] = "Single.Sample.Metric.2";
99 std::unique_ptr<SingleSampleMetric> metric3 =
100 factory->CreateCustomCountsMetric(kMetricName2, kMin, kMax, kBucketCount);
101
102 const HistogramBase::Sample kSample1 = 5;
103 metric->SetSample(kSample1);
104 metric2->SetSample(kSample1);
105
106 const HistogramBase::Sample kSample2 = 7;
107 metric3->SetSample(kSample2);
108
109 metric.reset();
110 tester.ExpectUniqueSample(kMetricName, kSample1, 1);
111
112 metric2.reset();
113 tester.ExpectUniqueSample(kMetricName, kSample1, 2);
114
115 metric3.reset();
116 tester.ExpectUniqueSample(kMetricName2, kSample2, 1);
117 }
118
119 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698