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

Side by Side Diff: components/metrics/public/cpp/call_stack_profile_struct_traits.h

Issue 2362493002: Stack sampling profiler: set process and thread information (Closed)
Patch Set: address comments Created 4 years, 3 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Defines StructTraits specializations for translating between mojo types and 5 // Defines StructTraits specializations for translating between mojo types and
6 // base::StackSamplingProfiler types, with data validity checks. 6 // base::StackSamplingProfiler types, with data validity checks.
7 7
8 #ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ 8 #ifndef COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_
9 #define COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ 9 #define COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_
10 10
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 *out = base::StackSamplingProfiler::CallStackProfile(); 127 *out = base::StackSamplingProfiler::CallStackProfile();
128 out->modules = std::move(modules); 128 out->modules = std::move(modules);
129 out->samples = std::move(samples); 129 out->samples = std::move(samples);
130 out->profile_duration = profile_duration; 130 out->profile_duration = profile_duration;
131 out->sampling_period = sampling_period; 131 out->sampling_period = sampling_period;
132 return true; 132 return true;
133 } 133 }
134 }; 134 };
135 135
136 template <> 136 template <>
137 struct EnumTraits<metrics::mojom::SampleOrderingSpec, 137 struct EnumTraits<metrics::mojom::Process,
138 metrics::CallStackProfileParams::SampleOrderingSpec> { 138 metrics::CallStackProfileParams::Process> {
139 139 static metrics::mojom::Process ToMojom(
140 static metrics::mojom::SampleOrderingSpec ToMojom( 140 metrics::CallStackProfileParams::Process process) {
141 metrics::CallStackProfileParams::SampleOrderingSpec spec) { 141 switch (process) {
142 switch (spec) { 142 case metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS:
143 case metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE: 143 return metrics::mojom::Process::UNKNOWN_PROCESS;
144 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; 144 case metrics::CallStackProfileParams::Process::BROWSER_PROCESS:
145 case metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER: 145 return metrics::mojom::Process::BROWSER_PROCESS;
146 return metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER; 146 case metrics::CallStackProfileParams::Process::RENDERER_PROCESS:
147 return metrics::mojom::Process::RENDERER_PROCESS;
148 case metrics::CallStackProfileParams::Process::GPU_PROCESS:
149 return metrics::mojom::Process::GPU_PROCESS;
150 case metrics::CallStackProfileParams::Process::UTILITY_PROCESS:
151 return metrics::mojom::Process::UTILITY_PROCESS;
152 case metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS:
153 return metrics::mojom::Process::ZYGOTE_PROCESS;
154 case metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS:
155 return metrics::mojom::Process::SANDBOX_HELPER_PROCESS;
156 case metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS:
157 return metrics::mojom::Process::PPAPI_PLUGIN_PROCESS;
158 case metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS:
159 return metrics::mojom::Process::PPAPI_BROKER_PROCESS;
147 } 160 }
148 NOTREACHED(); 161 NOTREACHED();
149 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE; 162 return metrics::mojom::Process::UNKNOWN_PROCESS;
150 } 163 }
151 164
152 static bool FromMojom( 165 static bool FromMojom(metrics::mojom::Process process,
153 metrics::mojom::SampleOrderingSpec spec, 166 metrics::CallStackProfileParams::Process* out) {
154 metrics::CallStackProfileParams::SampleOrderingSpec* out) { 167 switch (process) {
155 switch (spec) { 168 case metrics::mojom::Process::UNKNOWN_PROCESS:
156 case metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE: 169 *out = metrics::CallStackProfileParams::Process::UNKNOWN_PROCESS;
157 *out = metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE;
158 return true; 170 return true;
159 case metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER: 171 case metrics::mojom::Process::BROWSER_PROCESS:
160 *out = 172 *out = metrics::CallStackProfileParams::Process::BROWSER_PROCESS;
161 metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER; 173 return true;
174 case metrics::mojom::Process::RENDERER_PROCESS:
175 *out = metrics::CallStackProfileParams::Process::RENDERER_PROCESS;
176 return true;
177 case metrics::mojom::Process::GPU_PROCESS:
178 *out = metrics::CallStackProfileParams::Process::GPU_PROCESS;
179 return true;
180 case metrics::mojom::Process::UTILITY_PROCESS:
181 *out = metrics::CallStackProfileParams::Process::UTILITY_PROCESS;
182 return true;
183 case metrics::mojom::Process::ZYGOTE_PROCESS:
184 *out = metrics::CallStackProfileParams::Process::ZYGOTE_PROCESS;
185 return true;
186 case metrics::mojom::Process::SANDBOX_HELPER_PROCESS:
187 *out = metrics::CallStackProfileParams::Process::SANDBOX_HELPER_PROCESS;
188 return true;
189 case metrics::mojom::Process::PPAPI_PLUGIN_PROCESS:
190 *out = metrics::CallStackProfileParams::Process::PPAPI_PLUGIN_PROCESS;
191 return true;
192 case metrics::mojom::Process::PPAPI_BROKER_PROCESS:
193 *out = metrics::CallStackProfileParams::Process::PPAPI_BROKER_PROCESS;
162 return true; 194 return true;
163 } 195 }
164 return false; 196 return false;
197 }
198 };
199
200 template <>
201 struct EnumTraits<metrics::mojom::Thread,
202 metrics::CallStackProfileParams::Thread> {
203 static metrics::mojom::Thread ToMojom(
204 metrics::CallStackProfileParams::Thread thread) {
205 switch (thread) {
206 case metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD:
207 return metrics::mojom::Thread::UNKNOWN_THREAD;
208 case metrics::CallStackProfileParams::Thread::UI_THREAD:
209 return metrics::mojom::Thread::UI_THREAD;
210 case metrics::CallStackProfileParams::Thread::FILE_THREAD:
211 return metrics::mojom::Thread::FILE_THREAD;
212 case metrics::CallStackProfileParams::Thread::FILE_USER_BLOCKING_THREAD:
213 return metrics::mojom::Thread::FILE_USER_BLOCKING_THREAD;
214 case metrics::CallStackProfileParams::Thread::PROCESS_LAUNCHER_THREAD:
215 return metrics::mojom::Thread::PROCESS_LAUNCHER_THREAD;
216 case metrics::CallStackProfileParams::Thread::CACHE_THREAD:
217 return metrics::mojom::Thread::CACHE_THREAD;
218 case metrics::CallStackProfileParams::Thread::IO_THREAD:
219 return metrics::mojom::Thread::IO_THREAD;
220 case metrics::CallStackProfileParams::Thread::DB_THREAD:
221 return metrics::mojom::Thread::DB_THREAD;
222 case metrics::CallStackProfileParams::Thread::GPU_MAIN_THREAD:
223 return metrics::mojom::Thread::GPU_MAIN_THREAD;
224 case metrics::CallStackProfileParams::Thread::RENDER_THREAD:
225 return metrics::mojom::Thread::RENDER_THREAD;
226 case metrics::CallStackProfileParams::Thread::UTILITY_THREAD:
227 return metrics::mojom::Thread::UTILITY_THREAD;
228 }
229 NOTREACHED();
230 return metrics::mojom::Thread::UNKNOWN_THREAD;
231 }
232
233 static bool FromMojom(metrics::mojom::Thread thread,
234 metrics::CallStackProfileParams::Thread* out) {
235 switch (thread) {
236 case metrics::mojom::Thread::UNKNOWN_THREAD:
237 *out = metrics::CallStackProfileParams::Thread::UNKNOWN_THREAD;
238 return true;
239 case metrics::mojom::Thread::UI_THREAD:
240 *out = metrics::CallStackProfileParams::Thread::UI_THREAD;
241 return true;
242 case metrics::mojom::Thread::FILE_THREAD:
243 *out = metrics::CallStackProfileParams::Thread::FILE_THREAD;
244 return true;
245 case metrics::mojom::Thread::FILE_USER_BLOCKING_THREAD:
246 *out =
247 metrics::CallStackProfileParams::Thread::FILE_USER_BLOCKING_THREAD;
248 return true;
249 case metrics::mojom::Thread::PROCESS_LAUNCHER_THREAD:
250 *out = metrics::CallStackProfileParams::Thread::PROCESS_LAUNCHER_THREAD;
251 return true;
252 case metrics::mojom::Thread::CACHE_THREAD:
253 *out = metrics::CallStackProfileParams::Thread::CACHE_THREAD;
254 return true;
255 case metrics::mojom::Thread::IO_THREAD:
256 *out = metrics::CallStackProfileParams::Thread::IO_THREAD;
257 return true;
258 case metrics::mojom::Thread::DB_THREAD:
259 *out = metrics::CallStackProfileParams::Thread::DB_THREAD;
260 return true;
261 case metrics::mojom::Thread::GPU_MAIN_THREAD:
262 *out = metrics::CallStackProfileParams::Thread::GPU_MAIN_THREAD;
263 return true;
264 case metrics::mojom::Thread::RENDER_THREAD:
265 *out = metrics::CallStackProfileParams::Thread::RENDER_THREAD;
266 return true;
267 case metrics::mojom::Thread::UTILITY_THREAD:
268 *out = metrics::CallStackProfileParams::Thread::UTILITY_THREAD;
269 return true;
270 }
271 return false;
165 } 272 }
166 }; 273 };
167 274
168 template <> 275 template <>
169 struct EnumTraits<metrics::mojom::Trigger, 276 struct EnumTraits<metrics::mojom::Trigger,
170 metrics::CallStackProfileParams::Trigger> { 277 metrics::CallStackProfileParams::Trigger> {
171 static metrics::mojom::Trigger ToMojom( 278 static metrics::mojom::Trigger ToMojom(
172 metrics::CallStackProfileParams::Trigger trigger) { 279 metrics::CallStackProfileParams::Trigger trigger) {
173 switch (trigger) { 280 switch (trigger) {
174 case metrics::CallStackProfileParams::Trigger::UNKNOWN: 281 case metrics::CallStackProfileParams::Trigger::UNKNOWN:
(...skipping 25 matching lines...) Expand all
200 *out = metrics::CallStackProfileParams::Trigger::THREAD_HUNG; 307 *out = metrics::CallStackProfileParams::Trigger::THREAD_HUNG;
201 return true; 308 return true;
202 } 309 }
203 return false; 310 return false;
204 } 311 }
205 }; 312 };
206 313
207 template <> 314 template <>
208 struct StructTraits<metrics::mojom::CallStackProfileParamsDataView, 315 struct StructTraits<metrics::mojom::CallStackProfileParamsDataView,
209 metrics::CallStackProfileParams> { 316 metrics::CallStackProfileParams> {
317 static metrics::CallStackProfileParams::Process process(
318 const metrics::CallStackProfileParams& params) {
319 return params.process;
320 }
321 static metrics::CallStackProfileParams::Thread thread(
322 const metrics::CallStackProfileParams& params) {
323 return params.thread;
324 }
210 static metrics::CallStackProfileParams::Trigger trigger( 325 static metrics::CallStackProfileParams::Trigger trigger(
211 const metrics::CallStackProfileParams& params) { 326 const metrics::CallStackProfileParams& params) {
212 return params.trigger; 327 return params.trigger;
213 } 328 }
214 static metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec( 329 static metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec(
215 const metrics::CallStackProfileParams& params) { 330 const metrics::CallStackProfileParams& params) {
216 return params.ordering_spec; 331 return params.ordering_spec;
217 } 332 }
218 333
219 static bool Read(metrics::mojom::CallStackProfileParamsDataView data, 334 static bool Read(metrics::mojom::CallStackProfileParamsDataView data,
220 metrics::CallStackProfileParams* out) { 335 metrics::CallStackProfileParams* out) {
336 metrics::CallStackProfileParams::Process process;
337 metrics::CallStackProfileParams::Thread thread;
221 metrics::CallStackProfileParams::Trigger trigger; 338 metrics::CallStackProfileParams::Trigger trigger;
222 metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec; 339 metrics::CallStackProfileParams::SampleOrderingSpec ordering_spec;
223 if (!data.ReadTrigger(&trigger) || !data.ReadOrderingSpec(&ordering_spec)) 340 if (!data.ReadProcess(&process) || !data.ReadThread(&thread) ||
341 !data.ReadTrigger(&trigger) || !data.ReadOrderingSpec(&ordering_spec)) {
224 return false; 342 return false;
225 *out = metrics::CallStackProfileParams(trigger, ordering_spec); 343 }
344 *out = metrics::CallStackProfileParams(process, thread, trigger,
345 ordering_spec);
226 return true; 346 return true;
227 } 347 }
228 }; 348 };
229 349
350 template <>
351 struct EnumTraits<metrics::mojom::SampleOrderingSpec,
352 metrics::CallStackProfileParams::SampleOrderingSpec> {
353
354 static metrics::mojom::SampleOrderingSpec ToMojom(
355 metrics::CallStackProfileParams::SampleOrderingSpec spec) {
356 switch (spec) {
357 case metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE:
358 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE;
359 case metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER:
360 return metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER;
361 }
362 NOTREACHED();
363 return metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE;
364 }
365
366 static bool FromMojom(
367 metrics::mojom::SampleOrderingSpec spec,
368 metrics::CallStackProfileParams::SampleOrderingSpec* out) {
369 switch (spec) {
370 case metrics::mojom::SampleOrderingSpec::MAY_SHUFFLE:
371 *out = metrics::CallStackProfileParams::SampleOrderingSpec::MAY_SHUFFLE;
372 return true;
373 case metrics::mojom::SampleOrderingSpec::PRESERVE_ORDER:
374 *out =
375 metrics::CallStackProfileParams::SampleOrderingSpec::PRESERVE_ORDER;
376 return true;
377 }
378 return false;
379 }
380 };
381
230 } // mojo 382 } // mojo
231 383
232 #endif // COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_ 384 #endif // COMPONENTS_METRICS_CALL_STACK_PROFILE_STRUCT_TRAITS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698