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

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

Issue 8590015: trace_event: distinguish between scoped begin/end and global start/finish events (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | base/debug/trace_event.cc » ('j') | base/debug/trace_event.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // Trace events are for tracking application performance. 5 // Trace events are for tracking application performance.
6 // 6 //
7 // Events are issued against categories. Whereas LOG's 7 // Events are issued against categories. Whereas LOG's
8 // categories are statically defined, TRACE categories are created 8 // categories are statically defined, TRACE categories are created
9 // implicitly with a string. For example: 9 // implicitly with a string. For example:
10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent") 10 // TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent")
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 #define TRACE_EVENT_IF_LONGER_THAN0(threshold_us, category, name) \ 246 #define TRACE_EVENT_IF_LONGER_THAN0(threshold_us, category, name) \
247 TRACE_EVENT_IF_LONGER_THAN1(threshold_us, category, name, NULL, 0) 247 TRACE_EVENT_IF_LONGER_THAN1(threshold_us, category, name, NULL, 0)
248 #define TRACE_EVENT_IF_LONGER_THAN1( \ 248 #define TRACE_EVENT_IF_LONGER_THAN1( \
249 threshold_us, category, name, arg1_name, arg1_val) \ 249 threshold_us, category, name, arg1_name, arg1_val) \
250 TRACE_EVENT_IF_LONGER_THAN2(threshold_us, category, name, \ 250 TRACE_EVENT_IF_LONGER_THAN2(threshold_us, category, name, \
251 arg1_name, arg1_val, NULL, 0) 251 arg1_name, arg1_val, NULL, 0)
252 #define TRACE_EVENT_IF_LONGER_THAN2( \ 252 #define TRACE_EVENT_IF_LONGER_THAN2( \
253 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ 253 threshold_us, category, name, arg1_name, arg1_val, arg2_name, arg2_val) \
254 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold_us, \ 254 INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold_us, \
255 category, name, arg1_name, arg1_val, arg2_name, arg2_val) 255 category, name, arg1_name, arg1_val, arg2_name, arg2_val)
256 256
nduca 2011/11/17 19:13:06 Docs in the top of the header? Can we remove the
jbates 2011/11/23 00:41:11 I think we should remove them, but there are a few
257 257
258 // Records a single START event called "name" immediately, with 0, 1 or 2
259 // associated arguments. If the category is not enabled, then this
260 // does nothing.
nduca 2011/11/17 19:13:06 Should explain what a start is.
jbates 2011/11/23 00:41:11 Done.
261 // - category and name strings must have application lifetime (statics or
262 // literals). They may not include " chars.
263 // - |id| is used to match the START event with the FINISH event. It must cast
264 // properly to a uint64.
265 #define TRACE_EVENT_START0(category, name, id) \
266 TRACE_EVENT_START1(category, name, id, NULL, 0)
267 #define TRACE_EVENT_START1(category, name, id, arg1_name, arg1_val) \
268 TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, NULL, 0)
269 #define TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, \
270 arg2_name, arg2_val) \
271 INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_START, \
272 category, name, id, arg1_name, arg1_val, arg2_name, arg2_val, \
273 base::debug::TraceLog::EVENT_FLAG_NONE)
274 #define TRACE_EVENT_COPY_START0(category, name, id) \
275 TRACE_EVENT_COPY_START1(category, name, id, NULL, 0)
276 #define TRACE_EVENT_COPY_START1(category, name, id, arg1_name, arg1_val) \
277 TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, NULL, 0)
278 #define TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, \
279 arg2_name, arg2_val) \
280 INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_START, \
281 category, name, id, \
282 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \
283 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \
284 base::debug::TraceLog::EVENT_FLAG_COPY)
285
286 // Records a single FINISH event for "name" immediately. If the category
287 // is not enabled, then this does nothing.
288 // - category and name strings must have application lifetime (statics or
nduca 2011/11/17 19:13:06 Should explai what a finish is.
jbates 2011/11/23 00:41:11 Done.
289 // literals). They may not include " chars.
290 // - |id| is used to match the START event with the FINISH event. It must cast
291 // properly to a uint64.
292 #define TRACE_EVENT_FINISH0(category, name, id) \
293 TRACE_EVENT_FINISH1(category, name, id, NULL, 0)
294 #define TRACE_EVENT_FINISH1(category, name, id, arg1_name, arg1_val) \
295 TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, NULL, 0)
296 #define TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, \
297 arg2_name, arg2_val) \
298 INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_FINISH, \
299 category, name, id, arg1_name, arg1_val, arg2_name, arg2_val, \
300 base::debug::TraceLog::EVENT_FLAG_NONE)
301 #define TRACE_EVENT_COPY_FINISH0(category, name, id) \
302 TRACE_EVENT_COPY_FINISH1(category, name, id, NULL, 0)
303 #define TRACE_EVENT_COPY_FINISH1(category, name, id, arg1_name, arg1_val) \
304 TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, NULL, 0)
305 #define TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, \
306 arg2_name, arg2_val) \
307 INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_FINISH, \
308 category, name, id, \
309 arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \
310 arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \
311 base::debug::TraceLog::EVENT_FLAG_COPY)
312
313
258 // Implementation detail: trace event macros create temporary variables 314 // Implementation detail: trace event macros create temporary variables
259 // to keep instrumentation overhead low. These macros give each temporary 315 // to keep instrumentation overhead low. These macros give each temporary
260 // variable a unique name based on the line number to prevent name collissions. 316 // variable a unique name based on the line number to prevent name collissions.
261 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ 317 #define INTERNAL_TRACE_EVENT_UID3(a,b) \
262 trace_event_unique_##a##b 318 trace_event_unique_##a##b
263 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ 319 #define INTERNAL_TRACE_EVENT_UID2(a,b) \
264 INTERNAL_TRACE_EVENT_UID3(a,b) 320 INTERNAL_TRACE_EVENT_UID3(a,b)
265 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \ 321 #define INTERNAL_TRACE_EVENT_UID(name_prefix) \
266 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__) 322 INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__)
267 323
268 // Implementation detail: internal macro to create static category. 324 // Implementation detail: internal macro to create static category.
269 // - ANNOTATE_BENIGN_RACE, see Thread Safety above. 325 // - ANNOTATE_BENIGN_RACE, see Thread Safety above.
270 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \ 326 #define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \
271 static const base::debug::TraceCategory* \ 327 static const base::debug::TraceCategory* \
272 INTERNAL_TRACE_EVENT_UID(catstatic) = NULL; \ 328 INTERNAL_TRACE_EVENT_UID(catstatic) = NULL; \
273 ANNOTATE_BENIGN_RACE(&INTERNAL_TRACE_EVENT_UID(catstatic), \ 329 ANNOTATE_BENIGN_RACE(&INTERNAL_TRACE_EVENT_UID(catstatic), \
274 "trace_event category"); \ 330 "trace_event category"); \
275 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) \ 331 if (!INTERNAL_TRACE_EVENT_UID(catstatic)) \
276 INTERNAL_TRACE_EVENT_UID(catstatic) = \ 332 INTERNAL_TRACE_EVENT_UID(catstatic) = \
277 base::debug::TraceLog::GetCategory(category); 333 base::debug::TraceLog::GetCategory(category);
278 334
279 // Implementation detail: internal macro to create static category and add begin 335 // Implementation detail: internal macro to create static category and add
280 // event if the category is enabled. 336 // event if the category is enabled.
281 #define INTERNAL_TRACE_EVENT_ADD( \ 337 #define INTERNAL_TRACE_EVENT_ADD( \
282 phase, category, name, arg1_name, arg1_val, arg2_name, arg2_val, flags) \ 338 phase, category, name, arg1_name, arg1_val, arg2_name, arg2_val, flags) \
283 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ 339 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
284 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ 340 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
285 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ 341 base::debug::TraceLog::GetInstance()->AddTraceEvent( \
286 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ 342 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \
287 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \ 343 name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \
288 } 344 }
289 345
290 // Implementation detail: internal macro to create static category and add begin 346 // Implementation detail: internal macro to create static category and add begin
291 // event if the category is enabled. Also adds the end event when the scope 347 // event if the category is enabled. Also adds the end event when the scope
292 // ends. 348 // ends.
293 #define INTERNAL_TRACE_EVENT_ADD_SCOPED( \ 349 #define INTERNAL_TRACE_EVENT_ADD_SCOPED( \
294 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ 350 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \
295 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ 351 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
296 base::debug::internal::TraceEndOnScopeClose \ 352 base::debug::internal::TraceEndOnScopeClose \
297 INTERNAL_TRACE_EVENT_UID(profileScope); \ 353 INTERNAL_TRACE_EVENT_UID(profileScope); \
298 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ 354 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
299 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ 355 base::debug::TraceLog::GetInstance()->AddTraceEvent( \
300 base::debug::TRACE_EVENT_PHASE_BEGIN, \ 356 base::debug::TRACE_EVENT_PHASE_BEGIN, \
301 INTERNAL_TRACE_EVENT_UID(catstatic), \ 357 INTERNAL_TRACE_EVENT_UID(catstatic), \
302 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ 358 name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
303 base::debug::TraceLog::EVENT_FLAG_NONE); \ 359 base::debug::TraceLog::EVENT_FLAG_NONE); \
304 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ 360 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
305 INTERNAL_TRACE_EVENT_UID(catstatic), name); \ 361 INTERNAL_TRACE_EVENT_UID(catstatic), name); \
306 } 362 }
307 363
308 // Implementation detail: internal macro to create static category and add begin 364 // Implementation detail: internal macro to create static category and add begin
309 // event if the category is enabled. Also adds the end event when the scope 365 // event if the category is enabled. Also adds the end event when the scope
310 // ends. If the elapsed time is < threshold time, the begin/end pair is erased. 366 // ends. If the elapsed time is < threshold time, the begin/end pair is erased.
311 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \ 367 #define INTERNAL_TRACE_EVENT_ADD_SCOPED_IF_LONGER_THAN(threshold, \
312 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \ 368 category, name, arg1_name, arg1_val, arg2_name, arg2_val) \
313 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ 369 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
314 base::debug::internal::TraceEndOnScopeCloseThreshold \ 370 base::debug::internal::TraceEndOnScopeCloseThreshold \
315 INTERNAL_TRACE_EVENT_UID(profileScope); \ 371 INTERNAL_TRACE_EVENT_UID(profileScope); \
316 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \ 372 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
317 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \ 373 int INTERNAL_TRACE_EVENT_UID(begin_event_id) = \
318 base::debug::TraceLog::GetInstance()->AddTraceEvent( \ 374 base::debug::TraceLog::GetInstance()->AddTraceEvent( \
319 base::debug::TRACE_EVENT_PHASE_BEGIN, \ 375 base::debug::TRACE_EVENT_PHASE_BEGIN, \
320 INTERNAL_TRACE_EVENT_UID(catstatic), \ 376 INTERNAL_TRACE_EVENT_UID(catstatic), \
321 name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \ 377 name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
322 base::debug::TraceLog::EVENT_FLAG_NONE); \ 378 base::debug::TraceLog::EVENT_FLAG_NONE); \
323 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \ 379 INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
324 INTERNAL_TRACE_EVENT_UID(catstatic), name, \ 380 INTERNAL_TRACE_EVENT_UID(catstatic), name, \
325 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \ 381 INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \
326 } 382 }
327 383
384 // Implementation detail: internal macro to create static category and add
385 // event if the category is enabled.
386 #define INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(phase, category, name, extra, \
387 arg1_name, arg1_val, arg2_name, arg2_val, flags) \
388 INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
389 if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
390 base::debug::TraceLog::GetInstance()->AddTraceEvent( \
391 phase, INTERNAL_TRACE_EVENT_UID(catstatic), \
392 name, static_cast<uint64>(extra), \
393 arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \
394 }
395
328 template <typename Type> 396 template <typename Type>
329 struct StaticMemorySingletonTraits; 397 struct StaticMemorySingletonTraits;
330 398
331 namespace base { 399 namespace base {
332 400
333 class RefCountedString; 401 class RefCountedString;
334 402
335 namespace debug { 403 namespace debug {
336 404
337 // Categories allow enabling/disabling of streams of trace events 405 // Categories allow enabling/disabling of streams of trace events
338 struct TraceCategory { 406 struct TraceCategory {
339 const char* name; 407 const char* name;
340 volatile bool enabled; 408 volatile bool enabled;
341 }; 409 };
342 410
343 const size_t kTraceMaxNumArgs = 2; 411 const size_t kTraceMaxNumArgs = 2;
344 412
345 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair. 413 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair.
346 enum TraceEventPhase { 414 enum TraceEventPhase {
347 TRACE_EVENT_PHASE_BEGIN, 415 TRACE_EVENT_PHASE_BEGIN,
348 TRACE_EVENT_PHASE_END, 416 TRACE_EVENT_PHASE_END,
349 TRACE_EVENT_PHASE_INSTANT, 417 TRACE_EVENT_PHASE_INSTANT,
418 TRACE_EVENT_PHASE_START,
419 TRACE_EVENT_PHASE_FINISH,
350 TRACE_EVENT_PHASE_METADATA 420 TRACE_EVENT_PHASE_METADATA
351 }; 421 };
352 422
353 // Simple union of values. This is much lighter weight than base::Value, which 423 // Simple union of values. This is much lighter weight than base::Value, which
354 // requires dynamic allocation and a vtable. To keep the trace runtime overhead 424 // requires dynamic allocation and a vtable. To keep the trace runtime overhead
355 // low, we want constant size storage here. 425 // low, we want constant size storage here.
356 class BASE_EXPORT TraceValue { 426 class BASE_EXPORT TraceValue {
357 public: 427 public:
358 enum Type { 428 enum Type {
359 TRACE_TYPE_UNDEFINED, 429 TRACE_TYPE_UNDEFINED,
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
475 Value value_; 545 Value value_;
476 }; 546 };
477 547
478 // Output records are "Events" and can be obtained via the 548 // Output records are "Events" and can be obtained via the
479 // OutputCallback whenever the tracing system decides to flush. This 549 // OutputCallback whenever the tracing system decides to flush. This
480 // can happen at any time, on any thread, or you can programatically 550 // can happen at any time, on any thread, or you can programatically
481 // force it to happen. 551 // force it to happen.
482 class BASE_EXPORT TraceEvent { 552 class BASE_EXPORT TraceEvent {
483 public: 553 public:
484 TraceEvent(); 554 TraceEvent();
485 TraceEvent(unsigned long process_id, 555 TraceEvent(int thread_id,
486 unsigned long thread_id,
487 TimeTicks timestamp, 556 TimeTicks timestamp,
488 TraceEventPhase phase, 557 TraceEventPhase phase,
489 const TraceCategory* category, 558 const TraceCategory* category,
490 const char* name, 559 const char* name,
560 uint64 extra,
491 const char* arg1_name, const TraceValue& arg1_val, 561 const char* arg1_name, const TraceValue& arg1_val,
492 const char* arg2_name, const TraceValue& arg2_val, 562 const char* arg2_name, const TraceValue& arg2_val,
493 bool copy); 563 bool copy);
494 ~TraceEvent(); 564 ~TraceEvent();
495 565
496 static const char* GetPhaseString(TraceEventPhase phase); 566 static const char* GetPhaseString(TraceEventPhase phase);
497 static TraceEventPhase GetPhase(const char* phase); 567 static TraceEventPhase GetPhase(const char* phase);
498 568
499 // Serialize event data to JSON 569 // Serialize event data to JSON
500 static void AppendEventsAsJSON(const std::vector<TraceEvent>& events, 570 static void AppendEventsAsJSON(const std::vector<TraceEvent>& events,
501 size_t start, 571 size_t start,
502 size_t count, 572 size_t count,
503 std::string* out); 573 std::string* out);
504 void AppendAsJSON(std::string* out) const; 574 void AppendAsJSON(std::string* out) const;
505 575
506 TimeTicks timestamp() const { return timestamp_; } 576 TimeTicks timestamp() const { return timestamp_; }
507 577
508 // Exposed for unittesting: 578 // Exposed for unittesting:
509 579
510 const base::RefCountedString* parameter_copy_storage() const { 580 const base::RefCountedString* parameter_copy_storage() const {
511 return parameter_copy_storage_.get(); 581 return parameter_copy_storage_.get();
512 } 582 }
513 583
514 const char* name() const { return name_; } 584 const char* name() const { return name_; }
515 585
516 private: 586 private:
517 unsigned long process_id_; 587 // Note: these are ordered by size (largest first) for optimal packing.
jbates 2011/11/17 01:15:28 Since I'm adding data to this struct, I took some
518 unsigned long thread_id_;
519 TimeTicks timestamp_; 588 TimeTicks timestamp_;
520 TraceEventPhase phase_; 589 // extra_ can be used to store phase-specific data.
590 uint64 extra_;
591 TraceValue arg_values_[kTraceMaxNumArgs];
592 const char* arg_names_[kTraceMaxNumArgs];
521 const TraceCategory* category_; 593 const TraceCategory* category_;
522 const char* name_; 594 const char* name_;
523 const char* arg_names_[kTraceMaxNumArgs];
524 TraceValue arg_values_[kTraceMaxNumArgs];
525 scoped_refptr<base::RefCountedString> parameter_copy_storage_; 595 scoped_refptr<base::RefCountedString> parameter_copy_storage_;
596 int thread_id_;
jbates 2011/11/17 01:15:28 Changed thread_id to int to save 32-bits in the 64
597 TraceEventPhase phase_;
526 }; 598 };
527 599
528 600
529 // TraceResultBuffer collects and converts trace fragments returned by TraceLog 601 // TraceResultBuffer collects and converts trace fragments returned by TraceLog
530 // to JSON output. 602 // to JSON output.
531 class BASE_EXPORT TraceResultBuffer { 603 class BASE_EXPORT TraceResultBuffer {
532 public: 604 public:
533 typedef base::Callback<void(const std::string&)> OutputCallback; 605 typedef base::Callback<void(const std::string&)> OutputCallback;
534 606
535 // If you don't need to stream JSON chunks out efficiently, and just want to 607 // If you don't need to stream JSON chunks out efficiently, and just want to
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 // Returns the index in the internal vector of the event if it was added, or 715 // Returns the index in the internal vector of the event if it was added, or
644 // -1 if the event was not added. 716 // -1 if the event was not added.
645 // On end events, the return value of the begin event can be specified along 717 // On end events, the return value of the begin event can be specified along
646 // with a threshold in microseconds. If the elapsed time between begin and end 718 // with a threshold in microseconds. If the elapsed time between begin and end
647 // is less than the threshold, the begin/end event pair is dropped. 719 // is less than the threshold, the begin/end event pair is dropped.
648 // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied 720 // If |copy| is set, |name|, |arg_name1| and |arg_name2| will be deep copied
649 // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above. 721 // into the event; see "Memory scoping note" and TRACE_EVENT_COPY_XXX above.
650 int AddTraceEvent(TraceEventPhase phase, 722 int AddTraceEvent(TraceEventPhase phase,
651 const TraceCategory* category, 723 const TraceCategory* category,
652 const char* name, 724 const char* name,
725 uint64 extra,
653 const char* arg1_name, TraceValue arg1_val, 726 const char* arg1_name, TraceValue arg1_val,
654 const char* arg2_name, TraceValue arg2_val, 727 const char* arg2_name, TraceValue arg2_val,
655 int threshold_begin_id, 728 int threshold_begin_id,
656 int64 threshold, 729 int64 threshold,
657 EventFlags flags); 730 EventFlags flags);
658 static void AddTraceEventEtw(TraceEventPhase phase, 731 static void AddTraceEventEtw(TraceEventPhase phase,
659 const char* name, 732 const char* name,
660 const void* id, 733 const void* id,
661 const char* extra); 734 const char* extra);
662 static void AddTraceEventEtw(TraceEventPhase phase, 735 static void AddTraceEventEtw(TraceEventPhase phase,
(...skipping 29 matching lines...) Expand all
692 // TODO(nduca): switch to per-thread trace buffers to reduce thread 765 // TODO(nduca): switch to per-thread trace buffers to reduce thread
693 // synchronization. 766 // synchronization.
694 Lock lock_; 767 Lock lock_;
695 bool enabled_; 768 bool enabled_;
696 OutputCallback output_callback_; 769 OutputCallback output_callback_;
697 BufferFullCallback buffer_full_callback_; 770 BufferFullCallback buffer_full_callback_;
698 std::vector<TraceEvent> logged_events_; 771 std::vector<TraceEvent> logged_events_;
699 std::vector<std::string> included_categories_; 772 std::vector<std::string> included_categories_;
700 std::vector<std::string> excluded_categories_; 773 std::vector<std::string> excluded_categories_;
701 774
702 base::hash_map<PlatformThreadId, std::string> thread_names_; 775 base::hash_map<int, std::string> thread_names_;
703 776
704 DISALLOW_COPY_AND_ASSIGN(TraceLog); 777 DISALLOW_COPY_AND_ASSIGN(TraceLog);
705 }; 778 };
706 779
707 namespace internal { 780 namespace internal {
708 781
709 // Used by TRACE_EVENTx macro. Do not use directly. 782 // Used by TRACE_EVENTx macro. Do not use directly.
710 class BASE_EXPORT TraceEndOnScopeClose { 783 class BASE_EXPORT TraceEndOnScopeClose {
711 public: 784 public:
712 // Note: members of data_ intentionally left uninitialized. See Initialize. 785 // Note: members of data_ intentionally left uninitialized. See Initialize.
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
771 Data* p_data_; 844 Data* p_data_;
772 Data data_; 845 Data data_;
773 }; 846 };
774 847
775 } // namespace internal 848 } // namespace internal
776 849
777 } // namespace debug 850 } // namespace debug
778 } // namespace base 851 } // namespace base
779 852
780 #endif // BASE_DEBUG_TRACE_EVENT_H_ 853 #endif // BASE_DEBUG_TRACE_EVENT_H_
OLDNEW
« no previous file with comments | « no previous file | base/debug/trace_event.cc » ('j') | base/debug/trace_event.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698