OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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_ |
OLD | NEW |