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

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

Issue 1318733007: Refactor CallStackProfile::Params into base/ for use over IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nit Created 5 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 <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <map> 9 #include <map>
10 #include <utility> 10 #include <utility>
(...skipping 17 matching lines...) Expand all
28 28
29 namespace metrics { 29 namespace metrics {
30 30
31 namespace { 31 namespace {
32 32
33 // ProfilesState -------------------------------------------------------------- 33 // ProfilesState --------------------------------------------------------------
34 34
35 // A set of profiles and the CallStackProfileMetricsProvider state associated 35 // A set of profiles and the CallStackProfileMetricsProvider state associated
36 // with them. 36 // with them.
37 struct ProfilesState { 37 struct ProfilesState {
38 ProfilesState(const CallStackProfileMetricsProvider::Params& params, 38 ProfilesState(const base::CallStackProfileParams& params,
39 const base::StackSamplingProfiler::CallStackProfiles& profiles, 39 const base::StackSamplingProfiler::CallStackProfiles& profiles,
40 base::TimeTicks start_timestamp); 40 base::TimeTicks start_timestamp);
41 41
42 // The metrics-related parameters provided to 42 // The metrics-related parameters provided to
43 // CallStackProfileMetricsProvider::GetProfilerCallback(). 43 // CallStackProfileMetricsProvider::GetProfilerCallback().
44 CallStackProfileMetricsProvider::Params params; 44 base::CallStackProfileParams params;
45 45
46 // The call stack profiles collected by the profiler. 46 // The call stack profiles collected by the profiler.
47 base::StackSamplingProfiler::CallStackProfiles profiles; 47 base::StackSamplingProfiler::CallStackProfiles profiles;
48 48
49 // The time at which the CallStackProfileMetricsProvider became aware of the 49 // The time at which the CallStackProfileMetricsProvider became aware of the
50 // request for profiling. In particular, this is when callback was requested 50 // request for profiling. In particular, this is when callback was requested
51 // via CallStackProfileMetricsProvider::GetProfilerCallback(). Used to 51 // via CallStackProfileMetricsProvider::GetProfilerCallback(). Used to
52 // determine if collection was disabled during the collection of the profile. 52 // determine if collection was disabled during the collection of the profile.
53 base::TimeTicks start_timestamp; 53 base::TimeTicks start_timestamp;
54 }; 54 };
55 55
56 ProfilesState::ProfilesState( 56 ProfilesState::ProfilesState(
57 const CallStackProfileMetricsProvider::Params& params, 57 const base::CallStackProfileParams& params,
58 const base::StackSamplingProfiler::CallStackProfiles& profiles, 58 const base::StackSamplingProfiler::CallStackProfiles& profiles,
59 base::TimeTicks start_timestamp) 59 base::TimeTicks start_timestamp)
60 : params(params), 60 : params(params), profiles(profiles), start_timestamp(start_timestamp) {}
61 profiles(profiles),
62 start_timestamp(start_timestamp) {
63 }
64 61
65 // PendingProfiles ------------------------------------------------------------ 62 // PendingProfiles ------------------------------------------------------------
66 63
67 // Singleton class responsible for retaining profiles received via the callback 64 // Singleton class responsible for retaining profiles received via the callback
68 // created by CallStackProfileMetricsProvider::GetProfilerCallback(). These are 65 // created by CallStackProfileMetricsProvider::GetProfilerCallback(). These are
69 // then sent to UMA on the invocation of 66 // then sent to UMA on the invocation of
70 // CallStackProfileMetricsProvider::ProvideGeneralMetrics(). We need to store 67 // CallStackProfileMetricsProvider::ProvideGeneralMetrics(). We need to store
71 // the profiles outside of a CallStackProfileMetricsProvider instance since 68 // the profiles outside of a CallStackProfileMetricsProvider instance since
72 // callers may start profiling before the CallStackProfileMetricsProvider is 69 // callers may start profiling before the CallStackProfileMetricsProvider is
73 // created. 70 // created.
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 // CallStackProfileMetricsProvider. 176 // CallStackProfileMetricsProvider.
180 PendingProfiles::PendingProfiles() : collection_enabled_(true) {} 177 PendingProfiles::PendingProfiles() : collection_enabled_(true) {}
181 178
182 PendingProfiles::~PendingProfiles() {} 179 PendingProfiles::~PendingProfiles() {}
183 180
184 // Functions to process completed profiles ------------------------------------ 181 // Functions to process completed profiles ------------------------------------
185 182
186 // Invoked on the profiler's thread. Provides the profiles to PendingProfiles to 183 // Invoked on the profiler's thread. Provides the profiles to PendingProfiles to
187 // append, if the collecting state allows. 184 // append, if the collecting state allows.
188 void ReceiveCompletedProfiles( 185 void ReceiveCompletedProfiles(
189 const CallStackProfileMetricsProvider::Params& params, 186 const base::CallStackProfileParams& params,
190 base::TimeTicks start_timestamp, 187 base::TimeTicks start_timestamp,
191 const StackSamplingProfiler::CallStackProfiles& profiles) { 188 const StackSamplingProfiler::CallStackProfiles& profiles) {
192 PendingProfiles::GetInstance()->CollectProfilesIfCollectionEnabled( 189 PendingProfiles::GetInstance()->CollectProfilesIfCollectionEnabled(
193 ProfilesState(params, profiles, start_timestamp)); 190 ProfilesState(params, profiles, start_timestamp));
194 } 191 }
195 192
196 // Invoked on an arbitrary thread. Ignores the provided profiles. 193 // Invoked on an arbitrary thread. Ignores the provided profiles.
197 void IgnoreCompletedProfiles( 194 void IgnoreCompletedProfiles(
198 const StackSamplingProfiler::CallStackProfiles& profiles) { 195 const StackSamplingProfiler::CallStackProfiles& profiles) {
199 } 196 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 279
283 proto_profile->set_profile_duration_ms( 280 proto_profile->set_profile_duration_ms(
284 profile.profile_duration.InMilliseconds()); 281 profile.profile_duration.InMilliseconds());
285 proto_profile->set_sampling_period_ms( 282 proto_profile->set_sampling_period_ms(
286 profile.sampling_period.InMilliseconds()); 283 profile.sampling_period.InMilliseconds());
287 } 284 }
288 285
289 // Translates CallStackProfileMetricsProvider's trigger to the corresponding 286 // Translates CallStackProfileMetricsProvider's trigger to the corresponding
290 // SampledProfile TriggerEvent. 287 // SampledProfile TriggerEvent.
291 SampledProfile::TriggerEvent ToSampledProfileTriggerEvent( 288 SampledProfile::TriggerEvent ToSampledProfileTriggerEvent(
292 CallStackProfileMetricsProvider::Trigger trigger) { 289 base::CallStackProfileParams::Trigger trigger) {
293 switch (trigger) { 290 switch (trigger) {
294 case CallStackProfileMetricsProvider::UNKNOWN: 291 case base::CallStackProfileParams::UNKNOWN:
295 return SampledProfile::UNKNOWN_TRIGGER_EVENT; 292 return SampledProfile::UNKNOWN_TRIGGER_EVENT;
296 break; 293 break;
297 case CallStackProfileMetricsProvider::PROCESS_STARTUP: 294 case base::CallStackProfileParams::PROCESS_STARTUP:
298 return SampledProfile::PROCESS_STARTUP; 295 return SampledProfile::PROCESS_STARTUP;
299 break; 296 break;
300 case CallStackProfileMetricsProvider::JANKY_TASK: 297 case base::CallStackProfileParams::JANKY_TASK:
301 return SampledProfile::JANKY_TASK; 298 return SampledProfile::JANKY_TASK;
302 break; 299 break;
303 case CallStackProfileMetricsProvider::THREAD_HUNG: 300 case base::CallStackProfileParams::THREAD_HUNG:
304 return SampledProfile::THREAD_HUNG; 301 return SampledProfile::THREAD_HUNG;
305 break; 302 break;
306 } 303 }
307 NOTREACHED(); 304 NOTREACHED();
308 return SampledProfile::UNKNOWN_TRIGGER_EVENT; 305 return SampledProfile::UNKNOWN_TRIGGER_EVENT;
309 } 306 }
310 307
311 } // namespace 308 } // namespace
312 309
313 // CallStackProfileMetricsProvider::Params ------------------------------------
314
315 CallStackProfileMetricsProvider::Params::Params(
316 CallStackProfileMetricsProvider::Trigger trigger)
317 : Params(trigger, false) {
318 }
319
320 CallStackProfileMetricsProvider::Params::Params(
321 CallStackProfileMetricsProvider::Trigger trigger,
322 bool preserve_sample_ordering)
323 : trigger(trigger),
324 preserve_sample_ordering(preserve_sample_ordering) {
325 }
326
327 // CallStackProfileMetricsProvider -------------------------------------------- 310 // CallStackProfileMetricsProvider --------------------------------------------
328 311
329 const char CallStackProfileMetricsProvider::kFieldTrialName[] = 312 const char CallStackProfileMetricsProvider::kFieldTrialName[] =
330 "StackProfiling"; 313 "StackProfiling";
331 const char CallStackProfileMetricsProvider::kReportProfilesGroupName[] = 314 const char CallStackProfileMetricsProvider::kReportProfilesGroupName[] =
332 "Report profiles"; 315 "Report profiles";
333 316
334 CallStackProfileMetricsProvider::CallStackProfileMetricsProvider() { 317 CallStackProfileMetricsProvider::CallStackProfileMetricsProvider() {
335 } 318 }
336 319
337 CallStackProfileMetricsProvider::~CallStackProfileMetricsProvider() { 320 CallStackProfileMetricsProvider::~CallStackProfileMetricsProvider() {
338 } 321 }
339 322
340 // This function can be invoked on an abitrary thread. 323 // This function can be invoked on an abitrary thread.
341 base::StackSamplingProfiler::CompletedCallback 324 base::StackSamplingProfiler::CompletedCallback
342 CallStackProfileMetricsProvider::GetProfilerCallback(const Params& params) { 325 CallStackProfileMetricsProvider::GetProfilerCallback(
326 const base::CallStackProfileParams& params) {
343 // Ignore the profiles if the collection is disabled. If the collection state 327 // Ignore the profiles if the collection is disabled. If the collection state
344 // changes while collecting, this will be detected by the callback and 328 // changes while collecting, this will be detected by the callback and
345 // profiles will be ignored at that point. 329 // profiles will be ignored at that point.
346 if (!PendingProfiles::GetInstance()->IsCollectionEnabled()) 330 if (!PendingProfiles::GetInstance()->IsCollectionEnabled())
347 return base::Bind(&IgnoreCompletedProfiles); 331 return base::Bind(&IgnoreCompletedProfiles);
348 332
349 return base::Bind(&ReceiveCompletedProfiles, params, base::TimeTicks::Now()); 333 return base::Bind(&ReceiveCompletedProfiles, params, base::TimeTicks::Now());
350 } 334 }
351 335
352 void CallStackProfileMetricsProvider::OnRecordingEnabled() { 336 void CallStackProfileMetricsProvider::OnRecordingEnabled() {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 368
385 // static 369 // static
386 bool CallStackProfileMetricsProvider::IsReportingEnabledByFieldTrial() { 370 bool CallStackProfileMetricsProvider::IsReportingEnabledByFieldTrial() {
387 const std::string group_name = base::FieldTrialList::FindFullName( 371 const std::string group_name = base::FieldTrialList::FindFullName(
388 CallStackProfileMetricsProvider::kFieldTrialName); 372 CallStackProfileMetricsProvider::kFieldTrialName);
389 return group_name == 373 return group_name ==
390 CallStackProfileMetricsProvider::kReportProfilesGroupName; 374 CallStackProfileMetricsProvider::kReportProfilesGroupName;
391 } 375 }
392 376
393 } // namespace metrics 377 } // namespace metrics
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698