Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: chrome/browser/metrics/profiler_metrics_provider_unittest.cc

Issue 306023010: Introduce ProfilerMetricsProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Android build fix Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698