OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2014 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 "chrome/browser/metrics/profiler_metrics_provider.h" | |
6 | |
7 #include "base/tracked_objects.h" | |
8 #include "components/metrics/metrics_hashes.h" | |
9 #include "content/public/common/process_type.h" | |
10 #include "testing/gtest/include/gtest/gtest.h" | |
11 | |
12 using metrics::ProfilerEventProto; | |
13 using tracked_objects::ProcessDataSnapshot; | |
14 using tracked_objects::TaskSnapshot; | |
15 | |
16 class ProfilerMetricsProviderTest : public testing::Test { | |
Alexei Svitkine (slow)
2014/06/02 15:17:06
Nit: Remove this and just change the TEST_F's belo
blundell
2014/06/02 19:56:44
Done.
| |
17 public: | |
18 ProfilerMetricsProviderTest() {} | |
19 | |
20 virtual ~ProfilerMetricsProviderTest() {} | |
21 | |
22 private: | |
23 DISALLOW_COPY_AND_ASSIGN(ProfilerMetricsProviderTest); | |
24 }; | |
25 | |
26 // Test that we properly write profiler data. | |
27 TEST_F(ProfilerMetricsProviderTest, RecordProfilerData) { | |
28 // WARNING: If you broke the below check, you've modified how | |
29 // metrics::HashMetricName works. Please also modify all server-side code that | |
30 // relies on the existing way of hashing. | |
31 EXPECT_EQ(GG_UINT64_C(1518842999910132863), | |
32 metrics::HashMetricName("birth_thread*")); | |
33 | |
34 ProfilerMetricsProvider profiler_metrics_provider; | |
35 metrics::ChromeUserMetricsExtension uma_proto; | |
36 | |
37 { | |
38 ProcessDataSnapshot process_data; | |
39 process_data.process_id = 177; | |
40 process_data.tasks.push_back(TaskSnapshot()); | |
41 process_data.tasks.back().birth.location.file_name = "a/b/file.h"; | |
42 process_data.tasks.back().birth.location.function_name = "function"; | |
43 process_data.tasks.back().birth.location.line_number = 1337; | |
44 process_data.tasks.back().birth.thread_name = "birth_thread"; | |
45 process_data.tasks.back().death_data.count = 37; | |
46 process_data.tasks.back().death_data.run_duration_sum = 31; | |
47 process_data.tasks.back().death_data.run_duration_max = 17; | |
48 process_data.tasks.back().death_data.run_duration_sample = 13; | |
49 process_data.tasks.back().death_data.queue_duration_sum = 8; | |
50 process_data.tasks.back().death_data.queue_duration_max = 5; | |
51 process_data.tasks.back().death_data.queue_duration_sample = 3; | |
52 process_data.tasks.back().death_thread_name = "Still_Alive"; | |
53 process_data.tasks.push_back(TaskSnapshot()); | |
54 process_data.tasks.back().birth.location.file_name = "c\\d\\file2"; | |
55 process_data.tasks.back().birth.location.function_name = "function2"; | |
56 process_data.tasks.back().birth.location.line_number = 1773; | |
57 process_data.tasks.back().birth.thread_name = "birth_thread2"; | |
58 process_data.tasks.back().death_data.count = 19; | |
59 process_data.tasks.back().death_data.run_duration_sum = 23; | |
60 process_data.tasks.back().death_data.run_duration_max = 11; | |
61 process_data.tasks.back().death_data.run_duration_sample = 7; | |
62 process_data.tasks.back().death_data.queue_duration_sum = 0; | |
63 process_data.tasks.back().death_data.queue_duration_max = 0; | |
64 process_data.tasks.back().death_data.queue_duration_sample = 0; | |
65 process_data.tasks.back().death_thread_name = "death_thread"; | |
66 | |
67 profiler_metrics_provider.RecordProfilerData(process_data, | |
68 content::PROCESS_TYPE_BROWSER); | |
69 profiler_metrics_provider.ProvideGeneralMetrics(&uma_proto); | |
70 ASSERT_EQ(1, uma_proto.profiler_event_size()); | |
71 EXPECT_EQ(ProfilerEventProto::STARTUP_PROFILE, | |
72 uma_proto.profiler_event(0).profile_type()); | |
73 EXPECT_EQ(ProfilerEventProto::WALL_CLOCK_TIME, | |
74 uma_proto.profiler_event(0).time_source()); | |
75 | |
76 ASSERT_EQ(2, uma_proto.profiler_event(0).tracked_object_size()); | |
77 | |
78 const ProfilerEventProto::TrackedObject* tracked_object = | |
79 &uma_proto.profiler_event(0).tracked_object(0); | |
80 EXPECT_EQ(metrics::HashMetricName("file.h"), | |
81 tracked_object->source_file_name_hash()); | |
82 EXPECT_EQ(metrics::HashMetricName("function"), | |
83 tracked_object->source_function_name_hash()); | |
84 EXPECT_EQ(1337, tracked_object->source_line_number()); | |
85 EXPECT_EQ(metrics::HashMetricName("birth_thread"), | |
86 tracked_object->birth_thread_name_hash()); | |
87 EXPECT_EQ(37, tracked_object->exec_count()); | |
88 EXPECT_EQ(31, tracked_object->exec_time_total()); | |
89 EXPECT_EQ(13, tracked_object->exec_time_sampled()); | |
90 EXPECT_EQ(8, tracked_object->queue_time_total()); | |
91 EXPECT_EQ(3, tracked_object->queue_time_sampled()); | |
92 EXPECT_EQ(metrics::HashMetricName("Still_Alive"), | |
93 tracked_object->exec_thread_name_hash()); | |
94 EXPECT_EQ(177U, tracked_object->process_id()); | |
95 EXPECT_EQ(ProfilerEventProto::TrackedObject::BROWSER, | |
96 tracked_object->process_type()); | |
97 | |
98 tracked_object = &uma_proto.profiler_event(0).tracked_object(1); | |
99 EXPECT_EQ(metrics::HashMetricName("file2"), | |
100 tracked_object->source_file_name_hash()); | |
101 EXPECT_EQ(metrics::HashMetricName("function2"), | |
102 tracked_object->source_function_name_hash()); | |
103 EXPECT_EQ(1773, tracked_object->source_line_number()); | |
104 EXPECT_EQ(metrics::HashMetricName("birth_thread*"), | |
105 tracked_object->birth_thread_name_hash()); | |
106 EXPECT_EQ(19, tracked_object->exec_count()); | |
107 EXPECT_EQ(23, tracked_object->exec_time_total()); | |
108 EXPECT_EQ(7, tracked_object->exec_time_sampled()); | |
109 EXPECT_EQ(0, tracked_object->queue_time_total()); | |
110 EXPECT_EQ(0, tracked_object->queue_time_sampled()); | |
111 EXPECT_EQ(metrics::HashMetricName("death_thread"), | |
112 tracked_object->exec_thread_name_hash()); | |
113 EXPECT_EQ(177U, tracked_object->process_id()); | |
114 EXPECT_EQ(ProfilerEventProto::TrackedObject::BROWSER, | |
115 tracked_object->process_type()); | |
116 } | |
117 | |
118 { | |
119 ProcessDataSnapshot process_data; | |
120 process_data.process_id = 1177; | |
121 process_data.tasks.push_back(TaskSnapshot()); | |
122 process_data.tasks.back().birth.location.file_name = "file3"; | |
123 process_data.tasks.back().birth.location.function_name = "function3"; | |
124 process_data.tasks.back().birth.location.line_number = 7331; | |
125 process_data.tasks.back().birth.thread_name = "birth_thread3"; | |
126 process_data.tasks.back().death_data.count = 137; | |
127 process_data.tasks.back().death_data.run_duration_sum = 131; | |
128 process_data.tasks.back().death_data.run_duration_max = 117; | |
129 process_data.tasks.back().death_data.run_duration_sample = 113; | |
130 process_data.tasks.back().death_data.queue_duration_sum = 108; | |
131 process_data.tasks.back().death_data.queue_duration_max = 105; | |
132 process_data.tasks.back().death_data.queue_duration_sample = 103; | |
133 process_data.tasks.back().death_thread_name = "death_thread3"; | |
134 process_data.tasks.push_back(TaskSnapshot()); | |
135 process_data.tasks.back().birth.location.file_name = ""; | |
136 process_data.tasks.back().birth.location.function_name = ""; | |
137 process_data.tasks.back().birth.location.line_number = 7332; | |
138 process_data.tasks.back().birth.thread_name = ""; | |
139 process_data.tasks.back().death_data.count = 138; | |
140 process_data.tasks.back().death_data.run_duration_sum = 132; | |
141 process_data.tasks.back().death_data.run_duration_max = 118; | |
142 process_data.tasks.back().death_data.run_duration_sample = 114; | |
143 process_data.tasks.back().death_data.queue_duration_sum = 109; | |
144 process_data.tasks.back().death_data.queue_duration_max = 106; | |
145 process_data.tasks.back().death_data.queue_duration_sample = 104; | |
146 process_data.tasks.back().death_thread_name = ""; | |
147 | |
148 profiler_metrics_provider.RecordProfilerData( | |
149 process_data, content::PROCESS_TYPE_RENDERER); | |
150 profiler_metrics_provider.ProvideGeneralMetrics(&uma_proto); | |
151 ASSERT_EQ(1, uma_proto.profiler_event_size()); | |
152 EXPECT_EQ(ProfilerEventProto::STARTUP_PROFILE, | |
153 uma_proto.profiler_event(0).profile_type()); | |
154 EXPECT_EQ(ProfilerEventProto::WALL_CLOCK_TIME, | |
155 uma_proto.profiler_event(0).time_source()); | |
156 ASSERT_EQ(4, uma_proto.profiler_event(0).tracked_object_size()); | |
157 | |
158 const ProfilerEventProto::TrackedObject* tracked_object = | |
159 &uma_proto.profiler_event(0).tracked_object(2); | |
160 EXPECT_EQ(metrics::HashMetricName("file3"), | |
161 tracked_object->source_file_name_hash()); | |
162 EXPECT_EQ(metrics::HashMetricName("function3"), | |
163 tracked_object->source_function_name_hash()); | |
164 EXPECT_EQ(7331, tracked_object->source_line_number()); | |
165 EXPECT_EQ(metrics::HashMetricName("birth_thread*"), | |
166 tracked_object->birth_thread_name_hash()); | |
167 EXPECT_EQ(137, tracked_object->exec_count()); | |
168 EXPECT_EQ(131, tracked_object->exec_time_total()); | |
169 EXPECT_EQ(113, tracked_object->exec_time_sampled()); | |
170 EXPECT_EQ(108, tracked_object->queue_time_total()); | |
171 EXPECT_EQ(103, tracked_object->queue_time_sampled()); | |
172 EXPECT_EQ(metrics::HashMetricName("death_thread*"), | |
173 tracked_object->exec_thread_name_hash()); | |
174 EXPECT_EQ(1177U, tracked_object->process_id()); | |
175 EXPECT_EQ(ProfilerEventProto::TrackedObject::RENDERER, | |
176 tracked_object->process_type()); | |
177 | |
178 tracked_object = &uma_proto.profiler_event(0).tracked_object(3); | |
179 EXPECT_EQ(metrics::HashMetricName(""), | |
180 tracked_object->source_file_name_hash()); | |
181 EXPECT_EQ(metrics::HashMetricName(""), | |
182 tracked_object->source_function_name_hash()); | |
183 EXPECT_EQ(7332, tracked_object->source_line_number()); | |
184 EXPECT_EQ(metrics::HashMetricName(""), | |
185 tracked_object->birth_thread_name_hash()); | |
186 EXPECT_EQ(138, tracked_object->exec_count()); | |
187 EXPECT_EQ(132, tracked_object->exec_time_total()); | |
188 EXPECT_EQ(114, tracked_object->exec_time_sampled()); | |
189 EXPECT_EQ(109, tracked_object->queue_time_total()); | |
190 EXPECT_EQ(104, tracked_object->queue_time_sampled()); | |
191 EXPECT_EQ(metrics::HashMetricName(""), | |
192 tracked_object->exec_thread_name_hash()); | |
193 EXPECT_EQ(ProfilerEventProto::TrackedObject::RENDERER, | |
194 tracked_object->process_type()); | |
195 } | |
196 } | |
OLD | NEW |