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

Side by Side Diff: components/metrics/call_stack_profile_metrics_provider.cc

Issue 2362493002: Stack sampling profiler: set process and thread information (Closed)
Patch Set: fix JankTimeBomb unit test 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 #include "components/metrics/call_stack_profile_metrics_provider.h" 5 #include "components/metrics/call_stack_profile_metrics_provider.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 module_id->set_build_id(module.id); 282 module_id->set_build_id(module.id);
283 module_id->set_name_md5_prefix(HashModuleFilename(module.filename)); 283 module_id->set_name_md5_prefix(HashModuleFilename(module.filename));
284 } 284 }
285 285
286 proto_profile->set_profile_duration_ms( 286 proto_profile->set_profile_duration_ms(
287 profile.profile_duration.InMilliseconds()); 287 profile.profile_duration.InMilliseconds());
288 proto_profile->set_sampling_period_ms( 288 proto_profile->set_sampling_period_ms(
289 profile.sampling_period.InMilliseconds()); 289 profile.sampling_period.InMilliseconds());
290 } 290 }
291 291
292 // Translates CallStackProfileParams's process to the corresponding
293 // execution context Process.
294 Process ToExecutionContextProcess(CallStackProfileParams::Process process) {
295 switch (process) {
296 case CallStackProfileParams::UNKNOWN_PROCESS:
297 return UNKNOWN_PROCESS;
298 break;
sky 2016/09/21 22:06:16 No break after returns in these switches.
Mike Wittman 2016/09/21 22:26:21 Done.
299 case CallStackProfileParams::BROWSER_PROCESS:
300 return BROWSER_PROCESS;
301 break;
302 case CallStackProfileParams::RENDERER_PROCESS:
303 return RENDERER_PROCESS;
304 break;
305 case CallStackProfileParams::GPU_PROCESS:
306 return GPU_PROCESS;
307 break;
308 case CallStackProfileParams::UTILITY_PROCESS:
309 return UTILITY_PROCESS;
310 break;
311 case CallStackProfileParams::ZYGOTE_PROCESS:
312 return ZYGOTE_PROCESS;
313 break;
314 case CallStackProfileParams::SANDBOX_HELPER_PROCESS:
315 return SANDBOX_HELPER_PROCESS;
316 break;
317 case CallStackProfileParams::PPAPI_PLUGIN_PROCESS:
318 return PPAPI_PLUGIN_PROCESS;
319 break;
320 case CallStackProfileParams::PPAPI_BROKER_PROCESS:
321 return PPAPI_BROKER_PROCESS;
322 break;
323 }
324 NOTREACHED();
325 return UNKNOWN_PROCESS;
326 }
327
328 // Translates CallStackProfileParams's thread to the corresponding
329 // SampledProfile TriggerEvent.
330 Thread ToExecutionContextThread(CallStackProfileParams::Thread thread) {
331 switch (thread) {
332 case CallStackProfileParams::UNKNOWN_THREAD:
333 return UNKNOWN_THREAD;
334 break;
335 case CallStackProfileParams::UI_THREAD:
336 return UI_THREAD;
337 break;
338 case CallStackProfileParams::FILE_THREAD:
339 return FILE_THREAD;
340 break;
341 case CallStackProfileParams::FILE_USER_BLOCKING_THREAD:
342 return FILE_USER_BLOCKING_THREAD;
343 break;
344 case CallStackProfileParams::PROCESS_LAUNCHER_THREAD:
345 return PROCESS_LAUNCHER_THREAD;
346 break;
347 case CallStackProfileParams::CACHE_THREAD:
348 return CACHE_THREAD;
349 break;
350 case CallStackProfileParams::IO_THREAD:
351 return IO_THREAD;
352 break;
353 case CallStackProfileParams::DB_THREAD:
354 return DB_THREAD;
355 break;
356 case CallStackProfileParams::GPU_MAIN_THREAD:
357 return GPU_MAIN_THREAD;
358 break;
359 case CallStackProfileParams::RENDER_THREAD:
360 return RENDER_THREAD;
361 break;
362 case CallStackProfileParams::UTILITY_THREAD:
363 return UTILITY_THREAD;
364 break;
365 }
366 NOTREACHED();
367 return UNKNOWN_THREAD;
368 }
369
292 // Translates CallStackProfileParams's trigger to the corresponding 370 // Translates CallStackProfileParams's trigger to the corresponding
293 // SampledProfile TriggerEvent. 371 // SampledProfile TriggerEvent.
294 SampledProfile::TriggerEvent ToSampledProfileTriggerEvent( 372 SampledProfile::TriggerEvent ToSampledProfileTriggerEvent(
295 CallStackProfileParams::Trigger trigger) { 373 CallStackProfileParams::Trigger trigger) {
296 switch (trigger) { 374 switch (trigger) {
297 case CallStackProfileParams::UNKNOWN: 375 case CallStackProfileParams::UNKNOWN:
298 return SampledProfile::UNKNOWN_TRIGGER_EVENT; 376 return SampledProfile::UNKNOWN_TRIGGER_EVENT;
299 break; 377 break;
300 case CallStackProfileParams::PROCESS_STARTUP: 378 case CallStackProfileParams::PROCESS_STARTUP:
301 return SampledProfile::PROCESS_STARTUP; 379 return SampledProfile::PROCESS_STARTUP;
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 ChromeUserMetricsExtension* uma_proto) { 438 ChromeUserMetricsExtension* uma_proto) {
361 std::vector<ProfilesState> pending_profiles; 439 std::vector<ProfilesState> pending_profiles;
362 PendingProfiles::GetInstance()->Swap(&pending_profiles); 440 PendingProfiles::GetInstance()->Swap(&pending_profiles);
363 441
364 DCHECK(IsReportingEnabledByFieldTrial() || pending_profiles.empty()); 442 DCHECK(IsReportingEnabledByFieldTrial() || pending_profiles.empty());
365 443
366 for (const ProfilesState& profiles_state : pending_profiles) { 444 for (const ProfilesState& profiles_state : pending_profiles) {
367 for (const StackSamplingProfiler::CallStackProfile& profile : 445 for (const StackSamplingProfiler::CallStackProfile& profile :
368 profiles_state.profiles) { 446 profiles_state.profiles) {
369 SampledProfile* sampled_profile = uma_proto->add_sampled_profile(); 447 SampledProfile* sampled_profile = uma_proto->add_sampled_profile();
448 sampled_profile->set_process(ToExecutionContextProcess(
449 profiles_state.params.process));
450 sampled_profile->set_thread(ToExecutionContextThread(
451 profiles_state.params.thread));
370 sampled_profile->set_trigger_event(ToSampledProfileTriggerEvent( 452 sampled_profile->set_trigger_event(ToSampledProfileTriggerEvent(
371 profiles_state.params.trigger)); 453 profiles_state.params.trigger));
372 CopyProfileToProto(profile, profiles_state.params.ordering_spec, 454 CopyProfileToProto(profile, profiles_state.params.ordering_spec,
373 sampled_profile->mutable_call_stack_profile()); 455 sampled_profile->mutable_call_stack_profile());
374 } 456 }
375 } 457 }
376 } 458 }
377 459
378 // static 460 // static
379 void CallStackProfileMetricsProvider::ResetStaticStateForTesting() { 461 void CallStackProfileMetricsProvider::ResetStaticStateForTesting() {
380 PendingProfiles::GetInstance()->ResetToDefaultStateForTesting(); 462 PendingProfiles::GetInstance()->ResetToDefaultStateForTesting();
381 } 463 }
382 464
383 // static 465 // static
384 bool CallStackProfileMetricsProvider::IsReportingEnabledByFieldTrial() { 466 bool CallStackProfileMetricsProvider::IsReportingEnabledByFieldTrial() {
385 const std::string group_name = base::FieldTrialList::FindFullName( 467 const std::string group_name = base::FieldTrialList::FindFullName(
386 CallStackProfileMetricsProvider::kFieldTrialName); 468 CallStackProfileMetricsProvider::kFieldTrialName);
387 return group_name == 469 return group_name ==
388 CallStackProfileMetricsProvider::kReportProfilesGroupName; 470 CallStackProfileMetricsProvider::kReportProfilesGroupName;
389 } 471 }
390 472
391 } // namespace metrics 473 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698