Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 #ifndef BASE_DEBUG_TRACE_EVENT_H_ | 83 #ifndef BASE_DEBUG_TRACE_EVENT_H_ |
| 84 #define BASE_DEBUG_TRACE_EVENT_H_ | 84 #define BASE_DEBUG_TRACE_EVENT_H_ |
| 85 #pragma once | 85 #pragma once |
| 86 | 86 |
| 87 #include "build/build_config.h" | 87 #include "build/build_config.h" |
| 88 | 88 |
| 89 #include <string> | 89 #include <string> |
| 90 #include <vector> | 90 #include <vector> |
| 91 | 91 |
| 92 #include "base/callback.h" | 92 #include "base/callback.h" |
| 93 #include "base/hash_tables.h" | |
| 93 #include "base/memory/singleton.h" | 94 #include "base/memory/singleton.h" |
| 94 #include "base/string_util.h" | 95 #include "base/string_util.h" |
| 95 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" | 96 #include "base/third_party/dynamic_annotations/dynamic_annotations.h" |
| 96 #include "base/timer.h" | 97 #include "base/timer.h" |
| 97 | 98 |
| 98 // Older style trace macros with explicit id and extra data | 99 // Older style trace macros with explicit id and extra data |
| 99 // Only these macros result in publishing data to ETW as currently implemented. | 100 // Only these macros result in publishing data to ETW as currently implemented. |
| 100 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \ | 101 #define TRACE_EVENT_BEGIN_ETW(name, id, extra) \ |
| 101 base::debug::TraceLog::AddTraceEventEtw( \ | 102 base::debug::TraceLog::AddTraceEventEtw( \ |
| 102 base::debug::TRACE_EVENT_PHASE_BEGIN, \ | 103 base::debug::TRACE_EVENT_PHASE_BEGIN, \ |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 289 const char* name; | 290 const char* name; |
| 290 volatile bool enabled; | 291 volatile bool enabled; |
| 291 }; | 292 }; |
| 292 | 293 |
| 293 const size_t kTraceMaxNumArgs = 2; | 294 const size_t kTraceMaxNumArgs = 2; |
| 294 | 295 |
| 295 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair. | 296 // Phase indicates the nature of an event entry. E.g. part of a begin/end pair. |
| 296 enum TraceEventPhase { | 297 enum TraceEventPhase { |
| 297 TRACE_EVENT_PHASE_BEGIN, | 298 TRACE_EVENT_PHASE_BEGIN, |
| 298 TRACE_EVENT_PHASE_END, | 299 TRACE_EVENT_PHASE_END, |
| 299 TRACE_EVENT_PHASE_INSTANT | 300 TRACE_EVENT_PHASE_INSTANT, |
| 301 TRACE_EVENT_PHASE_METADATA | |
| 300 }; | 302 }; |
| 301 | 303 |
| 302 // Simple union of values. This is much lighter weight than base::Value, which | 304 // Simple union of values. This is much lighter weight than base::Value, which |
| 303 // requires dynamic allocation and a vtable. To keep the trace runtime overhead | 305 // requires dynamic allocation and a vtable. To keep the trace runtime overhead |
| 304 // low, we want constant size storage here. | 306 // low, we want constant size storage here. |
| 305 class BASE_API TraceValue { | 307 class BASE_API TraceValue { |
| 306 public: | 308 public: |
| 307 enum Type { | 309 enum Type { |
| 308 TRACE_TYPE_UNDEFINED, | 310 TRACE_TYPE_UNDEFINED, |
| 309 TRACE_TYPE_BOOL, | 311 TRACE_TYPE_BOOL, |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 493 const char* name, | 495 const char* name, |
| 494 const void* id, | 496 const void* id, |
| 495 const char* extra); | 497 const char* extra); |
| 496 static void AddTraceEventEtw(TraceEventPhase phase, | 498 static void AddTraceEventEtw(TraceEventPhase phase, |
| 497 const char* name, | 499 const char* name, |
| 498 const void* id, | 500 const void* id, |
| 499 const std::string& extra) { | 501 const std::string& extra) { |
| 500 AddTraceEventEtw(phase, name, id, extra.c_str()); | 502 AddTraceEventEtw(phase, name, id, extra.c_str()); |
| 501 } | 503 } |
| 502 | 504 |
| 505 // Metadata | |
| 506 void SetCurrentThreadName(const char* name); | |
| 507 | |
| 503 // Exposed for unittesting only, allows resurrecting our | 508 // Exposed for unittesting only, allows resurrecting our |
| 504 // singleton instance post-AtExit processing. | 509 // singleton instance post-AtExit processing. |
| 505 static void Resurrect(); | 510 static void Resurrect(); |
| 506 | 511 |
| 507 private: | 512 private: |
| 508 // This allows constructor and destructor to be private and usable only | 513 // This allows constructor and destructor to be private and usable only |
| 509 // by the Singleton class. | 514 // by the Singleton class. |
| 510 friend struct StaticMemorySingletonTraits<TraceLog>; | 515 friend struct StaticMemorySingletonTraits<TraceLog>; |
| 511 | 516 |
| 512 TraceLog(); | 517 TraceLog(); |
| 513 ~TraceLog(); | 518 ~TraceLog(); |
| 514 const TraceCategory* GetCategoryInternal(const char* name); | 519 const TraceCategory* GetCategoryInternal(const char* name); |
| 520 void AddCurrentMetadataEvents(); | |
| 515 | 521 |
| 516 // TODO(nduca): switch to per-thread trace buffers to reduce thread | 522 // TODO(nduca): switch to per-thread trace buffers to reduce thread |
| 517 // synchronization. | 523 // synchronization. |
| 518 Lock lock_; | 524 Lock lock_; |
| 519 bool enabled_; | 525 bool enabled_; |
| 520 OutputCallback output_callback_; | 526 OutputCallback output_callback_; |
| 521 BufferFullCallback buffer_full_callback_; | 527 BufferFullCallback buffer_full_callback_; |
| 522 std::vector<TraceEvent> logged_events_; | 528 std::vector<TraceEvent> logged_events_; |
| 523 | 529 |
| 530 base::hash_map<PlatformThreadId, std::string> thread_names_; | |
|
Sigurður Ásgeirsson
2011/08/02 19:36:41
It looks like this map will grow without bounds as
| |
| 531 | |
| 524 DISALLOW_COPY_AND_ASSIGN(TraceLog); | 532 DISALLOW_COPY_AND_ASSIGN(TraceLog); |
| 525 }; | 533 }; |
| 526 | 534 |
| 527 namespace internal { | 535 namespace internal { |
| 528 | 536 |
| 529 // Used by TRACE_EVENTx macro. Do not use directly. | 537 // Used by TRACE_EVENTx macro. Do not use directly. |
| 530 class BASE_API TraceEndOnScopeClose { | 538 class BASE_API TraceEndOnScopeClose { |
| 531 public: | 539 public: |
| 532 TraceEndOnScopeClose() : p_data_(NULL) {} | 540 TraceEndOnScopeClose() : p_data_(NULL) {} |
| 533 ~TraceEndOnScopeClose() { | 541 ~TraceEndOnScopeClose() { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 589 Data* p_data_; | 597 Data* p_data_; |
| 590 Data data_; | 598 Data data_; |
| 591 }; | 599 }; |
| 592 | 600 |
| 593 } // namespace internal | 601 } // namespace internal |
| 594 | 602 |
| 595 } // namespace debug | 603 } // namespace debug |
| 596 } // namespace base | 604 } // namespace base |
| 597 | 605 |
| 598 #endif // BASE_DEBUG_TRACE_EVENT_H_ | 606 #endif // BASE_DEBUG_TRACE_EVENT_H_ |
| OLD | NEW |