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