1 // Copyright 2015 The Chromium Authors
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/histogram_macros.h"
6 #include "base/time/time.h"
7 #include "testing/gtest/include/gtest/gtest.h"
8
9 namespace base {
10
TEST(ScopedHistogramTimer,ThreeTimersOneScope)11 TEST(ScopedHistogramTimer, ThreeTimersOneScope) {
12 SCOPED_UMA_HISTOGRAM_TIMER_MICROS("TestShortTimer0");
13 SCOPED_UMA_HISTOGRAM_TIMER_MICROS("TestShortTimer1");
14 SCOPED_UMA_HISTOGRAM_TIMER("TestTimer0");
15 SCOPED_UMA_HISTOGRAM_TIMER("TestTimer1");
16 SCOPED_UMA_HISTOGRAM_LONG_TIMER("TestLongTimer0");
17 SCOPED_UMA_HISTOGRAM_LONG_TIMER("TestLongTimer1");
18 }
19
20 // Compile tests for UMA_HISTOGRAM_ENUMERATION with the three different types it
21 // accepts:
22 // - integral types
23 // - unscoped enums
24 // - scoped enums
TEST(HistogramMacro,IntegralPseudoEnumeration)25 TEST(HistogramMacro, IntegralPseudoEnumeration) {
26 UMA_HISTOGRAM_ENUMERATION("Test.FauxEnumeration", 1, 1000);
27 }
28
TEST(HistogramMacro,UnscopedEnumeration)29 TEST(HistogramMacro, UnscopedEnumeration) {
30 enum TestEnum : char {
31 FIRST_VALUE,
32 SECOND_VALUE,
33 THIRD_VALUE,
34 MAX_ENTRIES,
35 };
36 UMA_HISTOGRAM_ENUMERATION("Test.UnscopedEnumeration", SECOND_VALUE,
37 MAX_ENTRIES);
38 }
39
TEST(HistogramMacro,ScopedEnumeration)40 TEST(HistogramMacro, ScopedEnumeration) {
41 enum class TestEnum {
42 FIRST_VALUE,
43 SECOND_VALUE,
44 THIRD_VALUE,
45 kMaxValue = THIRD_VALUE,
46 };
47 UMA_HISTOGRAM_ENUMERATION("Test.ScopedEnumeration", TestEnum::FIRST_VALUE);
48
49 enum class TestEnum2 {
50 FIRST_VALUE,
51 SECOND_VALUE,
52 THIRD_VALUE,
53 MAX_ENTRIES,
54 };
55 UMA_HISTOGRAM_ENUMERATION("Test.ScopedEnumeration2", TestEnum2::SECOND_VALUE,
56 TestEnum2::MAX_ENTRIES);
57 }
58
59 // Compile tests for UMA_HISTOGRAM_ENUMERATION when the value type is:
60 // - a const reference to an enum
61 // - a non-const reference to an enum
TEST(HistogramMacro,EnumerationConstRef)62 TEST(HistogramMacro, EnumerationConstRef) {
63 enum class TestEnum { kValue, kMaxValue = kValue };
64 const TestEnum& value_ref = TestEnum::kValue;
65 UMA_HISTOGRAM_ENUMERATION("Test.ScopedEnumeration3", value_ref);
66 }
67
TEST(HistogramMacro,EnumerationNonConstRef)68 TEST(HistogramMacro, EnumerationNonConstRef) {
69 enum class TestEnum { kValue, kMaxValue = kValue };
70 TestEnum value = TestEnum::kValue;
71 TestEnum& value_ref = value;
72 UMA_HISTOGRAM_ENUMERATION("Test.ScopedEnumeration4", value_ref);
73 }
74
75 } // namespace base
76