1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "base/profiler/sample_metadata.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/metrics/metrics_hashes.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/threading/platform_thread.h"
9*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
10*6777b538SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker namespace base {
13*6777b538SAndroid Build Coastguard Worker
TEST(SampleMetadataTest,ScopedSampleMetadata)14*6777b538SAndroid Build Coastguard Worker TEST(SampleMetadataTest, ScopedSampleMetadata) {
15*6777b538SAndroid Build Coastguard Worker MetadataRecorder::ItemArray items;
16*6777b538SAndroid Build Coastguard Worker // TODO(https://crbug/1494111): Locate the other tests that are leaving items
17*6777b538SAndroid Build Coastguard Worker // in MetadataRecorder and update them to clean up the state.
18*6777b538SAndroid Build Coastguard Worker size_t initial_item_count =
19*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
20*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
21*6777b538SAndroid Build Coastguard Worker .GetItems(&items);
22*6777b538SAndroid Build Coastguard Worker
23*6777b538SAndroid Build Coastguard Worker {
24*6777b538SAndroid Build Coastguard Worker ScopedSampleMetadata m("myname", 100, SampleMetadataScope::kProcess);
25*6777b538SAndroid Build Coastguard Worker
26*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count + 1,
27*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
28*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
29*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
30*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(HashMetricName("myname"), items[initial_item_count].name_hash);
31*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(items[initial_item_count].key.has_value());
32*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(100, items[initial_item_count].value);
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker
35*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count,
36*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
37*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
38*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
39*6777b538SAndroid Build Coastguard Worker }
40*6777b538SAndroid Build Coastguard Worker
TEST(SampleMetadataTest,ScopedSampleMetadataWithKey)41*6777b538SAndroid Build Coastguard Worker TEST(SampleMetadataTest, ScopedSampleMetadataWithKey) {
42*6777b538SAndroid Build Coastguard Worker MetadataRecorder::ItemArray items;
43*6777b538SAndroid Build Coastguard Worker // TODO(https://crbug/1494111): Locate the other tests that are leaving items
44*6777b538SAndroid Build Coastguard Worker // in MetadataRecorder and update them to clean up the state.
45*6777b538SAndroid Build Coastguard Worker size_t initial_item_count =
46*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
47*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
48*6777b538SAndroid Build Coastguard Worker .GetItems(&items);
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker {
51*6777b538SAndroid Build Coastguard Worker ScopedSampleMetadata m("myname", 10, 100, SampleMetadataScope::kProcess);
52*6777b538SAndroid Build Coastguard Worker
53*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count + 1,
54*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
55*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
56*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
57*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(HashMetricName("myname"), items[initial_item_count].name_hash);
58*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(items[initial_item_count].key.has_value());
59*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10, *items[initial_item_count].key);
60*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(100, items[initial_item_count].value);
61*6777b538SAndroid Build Coastguard Worker }
62*6777b538SAndroid Build Coastguard Worker
63*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count,
64*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
65*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
66*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker
TEST(SampleMetadataTest,SampleMetadata)69*6777b538SAndroid Build Coastguard Worker TEST(SampleMetadataTest, SampleMetadata) {
70*6777b538SAndroid Build Coastguard Worker MetadataRecorder::ItemArray items;
71*6777b538SAndroid Build Coastguard Worker // TODO(https://crbug/1494111): Locate the other tests that are leaving items
72*6777b538SAndroid Build Coastguard Worker // in MetadataRecorder and update them to clean up the state.
73*6777b538SAndroid Build Coastguard Worker size_t initial_item_count =
74*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
75*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
76*6777b538SAndroid Build Coastguard Worker .GetItems(&items);
77*6777b538SAndroid Build Coastguard Worker
78*6777b538SAndroid Build Coastguard Worker SampleMetadata metadata("myname", SampleMetadataScope::kProcess);
79*6777b538SAndroid Build Coastguard Worker metadata.Set(100);
80*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count + 1,
81*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
82*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
83*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
84*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(HashMetricName("myname"), items[initial_item_count].name_hash);
85*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(items[initial_item_count].key.has_value());
86*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(100, items[initial_item_count].value);
87*6777b538SAndroid Build Coastguard Worker
88*6777b538SAndroid Build Coastguard Worker metadata.Remove();
89*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count,
90*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
91*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
92*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
93*6777b538SAndroid Build Coastguard Worker }
94*6777b538SAndroid Build Coastguard Worker
TEST(SampleMetadataTest,SampleMetadataWithKey)95*6777b538SAndroid Build Coastguard Worker TEST(SampleMetadataTest, SampleMetadataWithKey) {
96*6777b538SAndroid Build Coastguard Worker MetadataRecorder::ItemArray items;
97*6777b538SAndroid Build Coastguard Worker // TODO(https://crbug/1494111): Locate the other tests that are leaving items
98*6777b538SAndroid Build Coastguard Worker // in MetadataRecorder and update them to clean up the state.
99*6777b538SAndroid Build Coastguard Worker size_t initial_item_count =
100*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
101*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
102*6777b538SAndroid Build Coastguard Worker .GetItems(&items);
103*6777b538SAndroid Build Coastguard Worker
104*6777b538SAndroid Build Coastguard Worker SampleMetadata metadata("myname", SampleMetadataScope::kProcess);
105*6777b538SAndroid Build Coastguard Worker metadata.Set(10, 100);
106*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count + 1,
107*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
108*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
109*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
110*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(HashMetricName("myname"), items[initial_item_count].name_hash);
111*6777b538SAndroid Build Coastguard Worker ASSERT_TRUE(items[initial_item_count].key.has_value());
112*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(10, *items[initial_item_count].key);
113*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(100, items[initial_item_count].value);
114*6777b538SAndroid Build Coastguard Worker
115*6777b538SAndroid Build Coastguard Worker metadata.Remove(10);
116*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count,
117*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
118*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
119*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
120*6777b538SAndroid Build Coastguard Worker }
121*6777b538SAndroid Build Coastguard Worker
TEST(SampleMetadataTest,SampleMetadataWithThreadId)122*6777b538SAndroid Build Coastguard Worker TEST(SampleMetadataTest, SampleMetadataWithThreadId) {
123*6777b538SAndroid Build Coastguard Worker MetadataRecorder::ItemArray items;
124*6777b538SAndroid Build Coastguard Worker // TODO(https://crbug/1494111): Locate the other tests that are leaving items
125*6777b538SAndroid Build Coastguard Worker // in MetadataRecorder and update them to clean up the state.
126*6777b538SAndroid Build Coastguard Worker size_t initial_item_count =
127*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
128*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
129*6777b538SAndroid Build Coastguard Worker .GetItems(&items);
130*6777b538SAndroid Build Coastguard Worker
131*6777b538SAndroid Build Coastguard Worker SampleMetadata metadata("myname", SampleMetadataScope::kThread);
132*6777b538SAndroid Build Coastguard Worker metadata.Set(100);
133*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(0u, MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
134*6777b538SAndroid Build Coastguard Worker kInvalidThreadId)
135*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
136*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count + 1,
137*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
138*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
139*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
140*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(HashMetricName("myname"), items[initial_item_count].name_hash);
141*6777b538SAndroid Build Coastguard Worker EXPECT_FALSE(items[initial_item_count].key.has_value());
142*6777b538SAndroid Build Coastguard Worker EXPECT_EQ(100, items[initial_item_count].value);
143*6777b538SAndroid Build Coastguard Worker
144*6777b538SAndroid Build Coastguard Worker metadata.Remove();
145*6777b538SAndroid Build Coastguard Worker ASSERT_EQ(initial_item_count,
146*6777b538SAndroid Build Coastguard Worker MetadataRecorder::MetadataProvider(GetSampleMetadataRecorder(),
147*6777b538SAndroid Build Coastguard Worker PlatformThread::CurrentId())
148*6777b538SAndroid Build Coastguard Worker .GetItems(&items));
149*6777b538SAndroid Build Coastguard Worker }
150*6777b538SAndroid Build Coastguard Worker
151*6777b538SAndroid Build Coastguard Worker } // namespace base
152