1 // Copyright 2016 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 "third_party/blink/renderer/platform/instrumentation/histogram.h"
6 
7 #include "base/metrics/histogram_samples.h"
8 #include "base/test/test_mock_time_task_runner.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace blink {
12 
13 class TestCustomCountHistogram : public CustomCountHistogram {
14  public:
TestCustomCountHistogram(const char * name,base::HistogramBase::Sample min,base::HistogramBase::Sample max,int32_t bucket_count)15   TestCustomCountHistogram(const char* name,
16                            base::HistogramBase::Sample min,
17                            base::HistogramBase::Sample max,
18                            int32_t bucket_count)
19       : CustomCountHistogram(name, min, max, bucket_count) {}
20 
Histogram()21   base::HistogramBase* Histogram() { return histogram_; }
22 };
23 
24 class ScopedUsHistogramTimerTest : public testing::Test {
25  public:
SetUp()26   void SetUp() override {
27     test_task_runner_ = base::MakeRefCounted<base::TestMockTimeTaskRunner>();
28   }
29 
30  protected:
31   scoped_refptr<base::TestMockTimeTaskRunner> test_task_runner_;
32 };
33 
TEST_F(ScopedUsHistogramTimerTest,Basic)34 TEST_F(ScopedUsHistogramTimerTest, Basic) {
35   TestCustomCountHistogram scoped_us_counter("ScopedUsHistogramTimerTest.Basic",
36                                              0, 10000000, 50);
37   {
38     ScopedUsHistogramTimer timer(scoped_us_counter,
39                                  test_task_runner_->GetMockTickClock());
40     test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(500));
41   }
42   // 500ms == 500000us
43   EXPECT_EQ(500000, scoped_us_counter.Histogram()->SnapshotSamples()->sum());
44 }
45 
TEST_F(ScopedUsHistogramTimerTest,BasicHighRes)46 TEST_F(ScopedUsHistogramTimerTest, BasicHighRes) {
47   TestCustomCountHistogram scoped_us_counter(
48       "ScopedHighResUsHistogramTimerTest.Basic", 0, 10000000, 50);
49   {
50     ScopedHighResUsHistogramTimer timer(scoped_us_counter,
51                                         test_task_runner_->GetMockTickClock());
52     test_task_runner_->FastForwardBy(base::TimeDelta::FromMilliseconds(500));
53   }
54   int64_t expected = base::TimeTicks::IsHighResolution() ? 500000 : 0;
55   EXPECT_EQ(expected, scoped_us_counter.Histogram()->SnapshotSamples()->sum());
56 }
57 
58 }  // namespace blink
59