1 // Copyright 2019 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/profiler/sample_metadata.h"
6
7 #include "base/metrics/metrics_hashes.h"
8 #include "base/threading/platform_thread.h"
9 #include "build/build_config.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace base {
13
TEST(SampleMetadataTest,ScopedSampleMetadata)14 TEST(SampleMetadataTest, ScopedSampleMetadata) {
15 MetadataRecorder::ItemArray items;
16 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
17 PlatformThread::CurrentId())
18 .GetItems(&items));
19
20 {
21 ScopedSampleMetadata m("myname", 100, SampleMetadataScope::kProcess);
22
23 ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(
24 GetSampleMetadataRecorder(), PlatformThread::CurrentId())
25 .GetItems(&items));
26 EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
27 EXPECT_FALSE(items[0].key.has_value());
28 EXPECT_EQ(100, items[0].value);
29 }
30
31 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
32 PlatformThread::CurrentId())
33 .GetItems(&items));
34 }
35
TEST(SampleMetadataTest,ScopedSampleMetadataWithKey)36 TEST(SampleMetadataTest, ScopedSampleMetadataWithKey) {
37 MetadataRecorder::ItemArray items;
38 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
39 PlatformThread::CurrentId())
40 .GetItems(&items));
41
42 {
43 ScopedSampleMetadata m("myname", 10, 100, SampleMetadataScope::kProcess);
44
45 ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(
46 GetSampleMetadataRecorder(), PlatformThread::CurrentId())
47 .GetItems(&items));
48 EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
49 ASSERT_TRUE(items[0].key.has_value());
50 EXPECT_EQ(10, *items[0].key);
51 EXPECT_EQ(100, items[0].value);
52 }
53
54 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
55 PlatformThread::CurrentId())
56 .GetItems(&items));
57 }
58
59 // Test is flaky on iOS. crbug.com/1494111
60 #if BUILDFLAG(IS_IOS)
61 #define MAYBE_SampleMetadata DISABLED_SampleMetadata
62 #else
63 #define MAYBE_SampleMetadata SampleMetadata
64 #endif
TEST(SampleMetadataTest,MAYBE_SampleMetadata)65 TEST(SampleMetadataTest, MAYBE_SampleMetadata) {
66 MetadataRecorder::ItemArray items;
67 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
68 PlatformThread::CurrentId())
69 .GetItems(&items));
70
71 SampleMetadata metadata("myname", SampleMetadataScope::kProcess);
72 metadata.Set(100);
73 ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
74 PlatformThread::CurrentId())
75 .GetItems(&items));
76 EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
77 EXPECT_FALSE(items[0].key.has_value());
78 EXPECT_EQ(100, items[0].value);
79
80 metadata.Remove();
81 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
82 PlatformThread::CurrentId())
83 .GetItems(&items));
84 }
85
86 // Test is flaky on iOS. crbug.com/1494111
87 #if BUILDFLAG(IS_IOS)
88 #define MAYBE_SampleMetadataWithKey DISABLED_SampleMetadataWithKey
89 #else
90 #define MAYBE_SampleMetadataWithKey SampleMetadataWithKey
91 #endif
TEST(SampleMetadataTest,MAYBE_SampleMetadataWithKey)92 TEST(SampleMetadataTest, MAYBE_SampleMetadataWithKey) {
93 MetadataRecorder::ItemArray items;
94 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
95 PlatformThread::CurrentId())
96 .GetItems(&items));
97
98 SampleMetadata metadata("myname", SampleMetadataScope::kProcess);
99 metadata.Set(10, 100);
100 ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
101 PlatformThread::CurrentId())
102 .GetItems(&items));
103 EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
104 ASSERT_TRUE(items[0].key.has_value());
105 EXPECT_EQ(10, *items[0].key);
106 EXPECT_EQ(100, items[0].value);
107
108 metadata.Remove(10);
109 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
110 PlatformThread::CurrentId())
111 .GetItems(&items));
112 }
113
114 // Test is flaky on iOS. crbug.com/1494111
115 #if BUILDFLAG(IS_IOS)
116 #define MAYBE_SampleMetadataWithThreadId DISABLED_SampleMetadataWithThreadId
117 #else
118 #define MAYBE_SampleMetadataWithThreadId SampleMetadataWithThreadId
119 #endif
TEST(SampleMetadataTest,MAYBE_SampleMetadataWithThreadId)120 TEST(SampleMetadataTest, MAYBE_SampleMetadataWithThreadId) {
121 MetadataRecorder::ItemArray items;
122 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
123 PlatformThread::CurrentId())
124 .GetItems(&items));
125
126 SampleMetadata metadata("myname", SampleMetadataScope::kThread);
127 metadata.Set(100);
128 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
129 kInvalidThreadId)
130 .GetItems(&items));
131 ASSERT_EQ(1u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
132 PlatformThread::CurrentId())
133 .GetItems(&items));
134 EXPECT_EQ(HashMetricName("myname"), items[0].name_hash);
135 EXPECT_FALSE(items[0].key.has_value());
136 EXPECT_EQ(100, items[0].value);
137
138 metadata.Remove();
139 ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
140 PlatformThread::CurrentId())
141 .GetItems(&items));
142 }
143
144 } // namespace base
145