• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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