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

Side by Side Diff: base/debug/trace_event_impl.h

Issue 12150004: Category group support/Renamings. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Added destructor for CategoryFilter class per CQ failure. Created 7 years, 8 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
« no previous file with comments | « base/debug/trace_event_android.cc ('k') | base/debug/trace_event_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 5
6 #ifndef BASE_DEBUG_TRACE_EVENT_IMPL_H_ 6 #ifndef BASE_DEBUG_TRACE_EVENT_IMPL_H_
7 #define BASE_DEBUG_TRACE_EVENT_IMPL_H_ 7 #define BASE_DEBUG_TRACE_EVENT_IMPL_H_
8 8
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 long long as_int; 73 long long as_int;
74 double as_double; 74 double as_double;
75 const void* as_pointer; 75 const void* as_pointer;
76 const char* as_string; 76 const char* as_string;
77 }; 77 };
78 78
79 TraceEvent(); 79 TraceEvent();
80 TraceEvent(int thread_id, 80 TraceEvent(int thread_id,
81 TimeTicks timestamp, 81 TimeTicks timestamp,
82 char phase, 82 char phase,
83 const unsigned char* category_enabled, 83 const unsigned char* category_group_enabled,
84 const char* name, 84 const char* name,
85 unsigned long long id, 85 unsigned long long id,
86 int num_args, 86 int num_args,
87 const char** arg_names, 87 const char** arg_names,
88 const unsigned char* arg_types, 88 const unsigned char* arg_types,
89 const unsigned long long* arg_values, 89 const unsigned long long* arg_values,
90 scoped_ptr<ConvertableToTraceFormat> convertable_values[], 90 scoped_ptr<ConvertableToTraceFormat> convertable_values[],
91 unsigned char flags); 91 unsigned char flags);
92 TraceEvent(const TraceEvent& other); 92 TraceEvent(const TraceEvent& other);
93 TraceEvent& operator=(const TraceEvent& other); 93 TraceEvent& operator=(const TraceEvent& other);
(...skipping 11 matching lines...) Expand all
105 std::string* out); 105 std::string* out);
106 106
107 TimeTicks timestamp() const { return timestamp_; } 107 TimeTicks timestamp() const { return timestamp_; }
108 108
109 // Exposed for unittesting: 109 // Exposed for unittesting:
110 110
111 const base::RefCountedString* parameter_copy_storage() const { 111 const base::RefCountedString* parameter_copy_storage() const {
112 return parameter_copy_storage_.get(); 112 return parameter_copy_storage_.get();
113 } 113 }
114 114
115 const unsigned char* category_enabled() const { return category_enabled_; } 115 const unsigned char* category_group_enabled() const {
116 return category_group_enabled_;
117 }
118
116 const char* name() const { return name_; } 119 const char* name() const { return name_; }
117 120
118 private: 121 private:
119 // Note: these are ordered by size (largest first) for optimal packing. 122 // Note: these are ordered by size (largest first) for optimal packing.
120 TimeTicks timestamp_; 123 TimeTicks timestamp_;
121 // id_ can be used to store phase-specific data. 124 // id_ can be used to store phase-specific data.
122 unsigned long long id_; 125 unsigned long long id_;
123 TraceValue arg_values_[kTraceMaxNumArgs]; 126 TraceValue arg_values_[kTraceMaxNumArgs];
124 const char* arg_names_[kTraceMaxNumArgs]; 127 const char* arg_names_[kTraceMaxNumArgs];
125 scoped_ptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs]; 128 scoped_ptr<ConvertableToTraceFormat> convertable_values_[kTraceMaxNumArgs];
126 const unsigned char* category_enabled_; 129 const unsigned char* category_group_enabled_;
127 const char* name_; 130 const char* name_;
128 scoped_refptr<base::RefCountedString> parameter_copy_storage_; 131 scoped_refptr<base::RefCountedString> parameter_copy_storage_;
129 int thread_id_; 132 int thread_id_;
130 char phase_; 133 char phase_;
131 unsigned char flags_; 134 unsigned char flags_;
132 unsigned char arg_types_[kTraceMaxNumArgs]; 135 unsigned char arg_types_[kTraceMaxNumArgs];
133 }; 136 };
134 137
135 // TraceBuffer holds the events as they are collected. 138 // TraceBuffer holds the events as they are collected.
136 class BASE_EXPORT TraceBuffer { 139 class BASE_EXPORT TraceBuffer {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 186
184 // When all fragments have been added, call Finish to complete the JSON 187 // When all fragments have been added, call Finish to complete the JSON
185 // formatted output. 188 // formatted output.
186 void Finish(); 189 void Finish();
187 190
188 private: 191 private:
189 OutputCallback output_callback_; 192 OutputCallback output_callback_;
190 bool append_comma_; 193 bool append_comma_;
191 }; 194 };
192 195
196 class BASE_EXPORT CategoryFilter {
197 public:
198 // The default category filter, used when none is provided.
199 // Allows all categories through, except if they end in the suffix 'Debug' or
200 // 'Test'.
201 static const char* kDefaultCategoryFilterString;
202
203 // |filter_string| is a comma-delimited list of category wildcards.
204 // A category can have an optional '-' prefix to make it an excluded category.
205 // All the same rules apply above, so for example, having both included and
206 // excluded categories in the same list would not be supported.
207 //
208 // Example: CategoryFilter"test_MyTest*");
209 // Example: CategoryFilter("test_MyTest*,test_OtherStuff");
210 // Example: CategoryFilter("-excluded_category1,-excluded_category2");
211 // Example: CategoryFilter("-*,webkit"); would disable everything but webkit.
212 // Example: CategoryFilter("-webkit"); would enable everything but webkit.
213 explicit CategoryFilter(const std::string& filter_string);
214
215 CategoryFilter(const CategoryFilter& cf);
216
217 ~CategoryFilter();
218
219 CategoryFilter& operator=(const CategoryFilter& rhs);
220
221 // Writes the string representation of the CategoryFilter. This is a comma
222 // separated string, similar in nature to the one used to determine
223 // enabled/disabled category patterns, except here there is an arbitrary
224 // order, included categories go first, then excluded categories. Excluded
225 // categories are distinguished from included categories by the prefix '-'.
226 std::string ToString() const;
227
228 // Determines whether category group would be enabled or
229 // disabled by this category filter.
230 bool IsCategoryGroupEnabled(const char* category_group) const;
231
232 // Merges nested_filter with the current CategoryFilter
233 void Merge(const CategoryFilter& nested_filter);
234
235 // Determines whether or not we have explicitly allowed category patterns.
236 bool HasIncludedPatterns() const;
237
238 // Clears both included/excluded pattern lists. This would be equivalent to
239 // creating a CategoryFilter with an empty string, through the constructor.
240 // i.e: CategoryFilter("").
241 //
242 // When using an empty filter, all categories are considered included as we
243 // are not excluding anything.
244 void Clear();
245
246 static bool IsEmptyOrContainsLeadingOrTrailingWhitespace(
247 const std::string& str);
248
249 private:
250 void Initialize(const std::string& filter_string);
251 void WriteString(std::string* out, bool included) const;
252
253 std::vector<std::string> included_;
254 std::vector<std::string> excluded_;
255 };
256
193 class TraceSamplingThread; 257 class TraceSamplingThread;
194 258
195 class BASE_EXPORT TraceLog { 259 class BASE_EXPORT TraceLog {
196 public: 260 public:
197 // Notification is a mask of one or more of the following events. 261 // Notification is a mask of one or more of the following events.
198 enum Notification { 262 enum Notification {
199 // The trace buffer does not flush dynamically, so when it fills up, 263 // The trace buffer does not flush dynamically, so when it fills up,
200 // subsequent trace events will be dropped. This callback is generated when 264 // subsequent trace events will be dropped. This callback is generated when
201 // the trace buffer is full. The callback must be thread safe. 265 // the trace buffer is full. The callback must be thread safe.
202 TRACE_BUFFER_FULL = 1 << 0, 266 TRACE_BUFFER_FULL = 1 << 0,
(...skipping 13 matching lines...) Expand all
216 // Enable the sampling profiler. 280 // Enable the sampling profiler.
217 ENABLE_SAMPLING = 1 << 2 281 ENABLE_SAMPLING = 1 << 2
218 }; 282 };
219 283
220 static TraceLog* GetInstance(); 284 static TraceLog* GetInstance();
221 285
222 // Convert the given string to trace options. Defaults to RECORD_UNTIL_FULL if 286 // Convert the given string to trace options. Defaults to RECORD_UNTIL_FULL if
223 // the string does not provide valid options. 287 // the string does not provide valid options.
224 static Options TraceOptionsFromString(const std::string& str); 288 static Options TraceOptionsFromString(const std::string& str);
225 289
226 // Get set of known categories. This can change as new code paths are reached. 290 // Get set of known category groups. This can change as new code paths are
227 // The known categories are inserted into |categories|. 291 // reached. The known category groups are inserted into |category_groups|.
228 void GetKnownCategories(std::vector<std::string>* categories); 292 void GetKnownCategoryGroups(std::vector<std::string>* category_groups);
229 293
230 // Enable tracing for provided list of categories. If tracing is already 294 // Retrieves the current CategoryFilter.
231 // enabled, this method does nothing -- changing categories during trace is 295 const CategoryFilter& GetCurrentCategoryFilter();
232 // not supported.
233 // If both included_categories and excluded_categories are empty,
234 // all categories are traced.
235 // Else if included_categories is non-empty, only those are traced.
236 // Else if excluded_categories is non-empty, everything but those are traced.
237 // Wildcards * and ? are supported (see MatchPattern in string_util.h).
238 void SetEnabled(const std::vector<std::string>& included_categories,
239 const std::vector<std::string>& excluded_categories,
240 Options options);
241
242 // |categories| is a comma-delimited list of category wildcards.
243 // A category can have an optional '-' prefix to make it an excluded category.
244 // All the same rules apply above, so for example, having both included and
245 // excluded categories in the same list would not be supported.
246 //
247 // Example: SetEnabled("test_MyTest*");
248 // Example: SetEnabled("test_MyTest*,test_OtherStuff");
249 // Example: SetEnabled("-excluded_category1,-excluded_category2");
250 void SetEnabled(const std::string& categories, Options options);
251
252 // Retieves the categories set via a prior call to SetEnabled(). Only
253 // meaningful if |IsEnabled()| is true.
254 void GetEnabledTraceCategories(std::vector<std::string>* included_out,
255 std::vector<std::string>* excluded_out);
256 296
257 Options trace_options() const { return trace_options_; } 297 Options trace_options() const { return trace_options_; }
258 298
299 // Enables tracing. See CategoryFilter comments for details
300 // on how to control what categories will be traced.
301 void SetEnabled(const CategoryFilter& category_filter, Options options);
302
259 // Disable tracing for all categories. 303 // Disable tracing for all categories.
260 void SetDisabled(); 304 void SetDisabled();
261 // Helper method to enable/disable tracing for all categories.
262 void SetEnabled(bool enabled, Options options);
263 bool IsEnabled() { return !!enable_count_; } 305 bool IsEnabled() { return !!enable_count_; }
264 306
265 #if defined(OS_ANDROID) 307 #if defined(OS_ANDROID)
266 void StartATrace(); 308 void StartATrace();
267 void StopATrace(); 309 void StopATrace();
268 #endif 310 #endif
269 311
270 // Enabled state listeners give a callback when tracing is enabled or 312 // Enabled state listeners give a callback when tracing is enabled or
271 // disabled. This can be used to tie into other library's tracing systems 313 // disabled. This can be used to tie into other library's tracing systems
272 // on-demand. 314 // on-demand.
(...skipping 22 matching lines...) Expand all
295 // ref-counted object or a LazyInstance with Leaky traits (or equivalent). 337 // ref-counted object or a LazyInstance with Leaky traits (or equivalent).
296 typedef base::Callback<void(int)> NotificationCallback; 338 typedef base::Callback<void(int)> NotificationCallback;
297 void SetNotificationCallback(const NotificationCallback& cb); 339 void SetNotificationCallback(const NotificationCallback& cb);
298 340
299 // Not using base::Callback because of its limited by 7 parameteters. 341 // Not using base::Callback because of its limited by 7 parameteters.
300 // Also, using primitive type allows directly passsing callback from WebCore. 342 // Also, using primitive type allows directly passsing callback from WebCore.
301 // WARNING: It is possible for the previously set callback to be called 343 // WARNING: It is possible for the previously set callback to be called
302 // after a call to SetEventCallback() that replaces or clears the callback. 344 // after a call to SetEventCallback() that replaces or clears the callback.
303 // This callback may be invoked on any thread. 345 // This callback may be invoked on any thread.
304 typedef void (*EventCallback)(char phase, 346 typedef void (*EventCallback)(char phase,
305 const unsigned char* category_enabled, 347 const unsigned char* category_group_enabled,
306 const char* name, 348 const char* name,
307 unsigned long long id, 349 unsigned long long id,
308 int num_args, 350 int num_args,
309 const char* const arg_names[], 351 const char* const arg_names[],
310 const unsigned char arg_types[], 352 const unsigned char arg_types[],
311 const unsigned long long arg_values[], 353 const unsigned long long arg_values[],
312 unsigned char flags); 354 unsigned char flags);
313 void SetEventCallback(EventCallback cb); 355 void SetEventCallback(EventCallback cb);
314 356
315 // Flush all collected events to the given output callback. The callback will 357 // Flush all collected events to the given output callback. The callback will
316 // be called one or more times with IPC-bite-size chunks. The string format is 358 // be called one or more times with IPC-bite-size chunks. The string format is
317 // undefined. Use TraceResultBuffer to convert one or more trace strings to 359 // undefined. Use TraceResultBuffer to convert one or more trace strings to
318 // JSON. 360 // JSON.
319 typedef base::Callback<void(const scoped_refptr<base::RefCountedString>&)> 361 typedef base::Callback<void(const scoped_refptr<base::RefCountedString>&)>
320 OutputCallback; 362 OutputCallback;
321 void Flush(const OutputCallback& cb); 363 void Flush(const OutputCallback& cb);
322 364
323 // Called by TRACE_EVENT* macros, don't call this directly. 365 // Called by TRACE_EVENT* macros, don't call this directly.
324 static const unsigned char* GetCategoryEnabled(const char* name); 366 // The name parameter is a category group for example:
325 static const char* GetCategoryName(const unsigned char* category_enabled); 367 // TRACE_EVENT0("renderer,webkit", "WebViewImpl::HandleInputEvent")
368 static const unsigned char* GetCategoryGroupEnabled(const char* name);
369 static const char* GetCategoryGroupName(
370 const unsigned char* category_group_enabled);
326 371
327 // Called by TRACE_EVENT* macros, don't call this directly. 372 // Called by TRACE_EVENT* macros, don't call this directly.
328 // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied 373 // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied
329 // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above. 374 // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above.
330 void AddTraceEvent(char phase, 375 void AddTraceEvent(char phase,
331 const unsigned char* category_enabled, 376 const unsigned char* category_group_enabled,
332 const char* name, 377 const char* category_group,
333 unsigned long long id, 378 unsigned long long id,
334 int num_args, 379 int num_args,
335 const char** arg_names, 380 const char** arg_names,
336 const unsigned char* arg_types, 381 const unsigned char* arg_types,
337 const unsigned long long* arg_values, 382 const unsigned long long* arg_values,
338 scoped_ptr<ConvertableToTraceFormat> convertable_values[], 383 scoped_ptr<ConvertableToTraceFormat> convertable_values[],
339 unsigned char flags); 384 unsigned char flags);
340 void AddTraceEventWithThreadIdAndTimestamp( 385 void AddTraceEventWithThreadIdAndTimestamp(
341 char phase, 386 char phase,
342 const unsigned char* category_enabled, 387 const unsigned char* category_group_enabled,
343 const char* name, 388 const char* name,
344 unsigned long long id, 389 unsigned long long id,
345 int thread_id, 390 int thread_id,
346 const TimeTicks& timestamp, 391 const TimeTicks& timestamp,
347 int num_args, 392 int num_args,
348 const char** arg_names, 393 const char** arg_names,
349 const unsigned char* arg_types, 394 const unsigned char* arg_types,
350 const unsigned long long* arg_values, 395 const unsigned long long* arg_values,
351 scoped_ptr<ConvertableToTraceFormat> convertable_values[], 396 scoped_ptr<ConvertableToTraceFormat> convertable_values[],
352 unsigned char flags); 397 unsigned char flags);
353 static void AddTraceEventEtw(char phase, 398 static void AddTraceEventEtw(char phase,
354 const char* name, 399 const char* category_group,
355 const void* id, 400 const void* id,
356 const char* extra); 401 const char* extra);
357 static void AddTraceEventEtw(char phase, 402 static void AddTraceEventEtw(char phase,
358 const char* name, 403 const char* category_group,
359 const void* id, 404 const void* id,
360 const std::string& extra); 405 const std::string& extra);
361 406
362 // For every matching event, a notification will be fired. NOTE: the 407 // For every matching event, a notification will be fired. NOTE: the
363 // notification will fire for each matching event that has already occurred 408 // notification will fire for each matching event that has already occurred
364 // since tracing was started (including before tracing if the process was 409 // since tracing was started (including before tracing if the process was
365 // started with tracing turned on). 410 // started with tracing turned on).
366 void SetWatchEvent(const std::string& category_name, 411 void SetWatchEvent(const std::string& category_name,
367 const std::string& event_name); 412 const std::string& event_name);
368 // Cancel the watch event. If tracing is enabled, this may race with the 413 // Cancel the watch event. If tracing is enabled, this may race with the
(...skipping 22 matching lines...) Expand all
391 436
392 // Allow setting an offset between the current TimeTicks time and the time 437 // Allow setting an offset between the current TimeTicks time and the time
393 // that should be reported. 438 // that should be reported.
394 void SetTimeOffset(TimeDelta offset); 439 void SetTimeOffset(TimeDelta offset);
395 440
396 private: 441 private:
397 // This allows constructor and destructor to be private and usable only 442 // This allows constructor and destructor to be private and usable only
398 // by the Singleton class. 443 // by the Singleton class.
399 friend struct StaticMemorySingletonTraits<TraceLog>; 444 friend struct StaticMemorySingletonTraits<TraceLog>;
400 445
401 // The pointer returned from GetCategoryEnabledInternal() points to a value 446 // Enable/disable each category group based on the current category_filter_.
402 // with zero or more of the following bits. Used in this class only. 447 // If the category group contains a category that matches an included category
448 // pattern, that category group will be enabled.
449 void EnableIncludedCategoryGroups();
450 void EnableIncludedCategoryGroup(int category_index);
451
452 // The pointer returned from GetCategoryGroupEnabledInternal() points to a
453 // value with zero or more of the following bits. Used in this class only.
403 // The TRACE_EVENT macros should only use the value as a bool. 454 // The TRACE_EVENT macros should only use the value as a bool.
404 enum CategoryEnabledFlags { 455 enum CategoryEnabledFlags {
405 // Normal enabled flag for categories enabled with Enable(). 456 // Normal enabled flag for categories enabled with Enable().
406 CATEGORY_ENABLED = 1 << 0, 457 CATEGORY_ENABLED = 1 << 0,
407 // On Android if ATrace is enabled, all categories will have this bit. 458 // On Android if ATrace is enabled, all categories will have this bit.
408 // Not used on other platforms. 459 // Not used on other platforms.
409 ATRACE_ENABLED = 1 << 1 460 ATRACE_ENABLED = 1 << 1
410 }; 461 };
411 462
412 // Helper class for managing notification_thread_count_ and running 463 // Helper class for managing notification_thread_count_ and running
(...skipping 14 matching lines...) Expand all
427 inline void SendNotificationIfAny(); 478 inline void SendNotificationIfAny();
428 479
429 private: 480 private:
430 TraceLog* trace_log_; 481 TraceLog* trace_log_;
431 NotificationCallback callback_copy_; 482 NotificationCallback callback_copy_;
432 int notification_; 483 int notification_;
433 }; 484 };
434 485
435 TraceLog(); 486 TraceLog();
436 ~TraceLog(); 487 ~TraceLog();
437 const unsigned char* GetCategoryEnabledInternal(const char* name); 488 const unsigned char* GetCategoryGroupEnabledInternal(const char* name);
438 void AddThreadNameMetadataEvents(); 489 void AddThreadNameMetadataEvents();
439 490
440 #if defined(OS_ANDROID) 491 #if defined(OS_ANDROID)
441 void SendToATrace(char phase, 492 void SendToATrace(char phase,
442 const char* category, 493 const char* category_group,
443 const char* name, 494 const char* name,
444 unsigned long long id, 495 unsigned long long id,
445 int num_args, 496 int num_args,
446 const char** arg_names, 497 const char** arg_names,
447 const unsigned char* arg_types, 498 const unsigned char* arg_types,
448 const unsigned long long* arg_values, 499 const unsigned long long* arg_values,
449 unsigned char flags); 500 unsigned char flags);
450 static void ApplyATraceEnabledFlag(unsigned char* category_enabled); 501 static void ApplyATraceEnabledFlag(unsigned char* category_group_enabled);
451 #endif 502 #endif
452 503
453 TraceBuffer* GetTraceBuffer(); 504 TraceBuffer* GetTraceBuffer();
454 505
455 // TODO(nduca): switch to per-thread trace buffers to reduce thread 506 // TODO(nduca): switch to per-thread trace buffers to reduce thread
456 // synchronization. 507 // synchronization.
457 // This lock protects TraceLog member accesses from arbitrary threads. 508 // This lock protects TraceLog member accesses from arbitrary threads.
458 Lock lock_; 509 Lock lock_;
459 int enable_count_; 510 int enable_count_;
460 NotificationCallback notification_callback_; 511 NotificationCallback notification_callback_;
461 scoped_ptr<TraceBuffer> logged_events_; 512 scoped_ptr<TraceBuffer> logged_events_;
462 EventCallback event_callback_; 513 EventCallback event_callback_;
463 std::vector<std::string> included_categories_;
464 std::vector<std::string> excluded_categories_;
465 bool dispatching_to_observer_list_; 514 bool dispatching_to_observer_list_;
466 ObserverList<EnabledStateChangedObserver> enabled_state_observer_list_; 515 ObserverList<EnabledStateChangedObserver> enabled_state_observer_list_;
467 516
468 base::hash_map<int, std::string> thread_names_; 517 base::hash_map<int, std::string> thread_names_;
469 518
470 // XORed with TraceID to make it unlikely to collide with other processes. 519 // XORed with TraceID to make it unlikely to collide with other processes.
471 unsigned long long process_id_hash_; 520 unsigned long long process_id_hash_;
472 521
473 int process_id_; 522 int process_id_;
474 523
475 TimeDelta time_offset_; 524 TimeDelta time_offset_;
476 525
477 // Allow tests to wake up when certain events occur. 526 // Allow tests to wake up when certain events occur.
478 const unsigned char* watch_category_; 527 const unsigned char* watch_category_;
479 std::string watch_event_name_; 528 std::string watch_event_name_;
480 529
481 Options trace_options_; 530 Options trace_options_;
482 531
483 // Sampling thread handles. 532 // Sampling thread handles.
484 scoped_ptr<TraceSamplingThread> sampling_thread_; 533 scoped_ptr<TraceSamplingThread> sampling_thread_;
485 PlatformThreadHandle sampling_thread_handle_; 534 PlatformThreadHandle sampling_thread_handle_;
486 535
536 CategoryFilter category_filter_;
537
487 DISALLOW_COPY_AND_ASSIGN(TraceLog); 538 DISALLOW_COPY_AND_ASSIGN(TraceLog);
488 }; 539 };
489 540
490 } // namespace debug 541 } // namespace debug
491 } // namespace base 542 } // namespace base
492 543
493 #endif // BASE_DEBUG_TRACE_EVENT_IMPL_H_ 544 #endif // BASE_DEBUG_TRACE_EVENT_IMPL_H_
OLDNEW
« no previous file with comments | « base/debug/trace_event_android.cc ('k') | base/debug/trace_event_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698