Chromium Code Reviews| 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 // This header file defines the set of trace_event macros without specifying | 5 // This header file defines the set of trace_event macros without specifying |
| 6 // how the events actually get collected and stored. If you need to expose trace | 6 // how the events actually get collected and stored. If you need to expose trace |
| 7 // events to some other universe, you can copy-and-paste this file as well as | 7 // events to some other universe, you can copy-and-paste this file as well as |
| 8 // trace_event.h, modifying the macros contained there as necessary for the | 8 // trace_event.h, modifying the macros contained there as necessary for the |
| 9 // target platform. The end result is that multiple libraries can funnel events | 9 // target platform. The end result is that multiple libraries can funnel events |
| 10 // through to a shared trace event collector. | 10 // through to a shared trace event collector. |
| (...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 292 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \ | 292 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \ |
| 293 category_group, name, TRACE_EVENT_FLAG_COPY | scope, \ | 293 category_group, name, TRACE_EVENT_FLAG_COPY | scope, \ |
| 294 arg1_name, arg1_val, arg2_name, arg2_val) | 294 arg1_name, arg1_val, arg2_name, arg2_val) |
| 295 | 295 |
| 296 // Sets the current sample state to the given category and name (both must be | 296 // Sets the current sample state to the given category and name (both must be |
| 297 // constant strings). These states are intended for a sampling profiler. | 297 // constant strings). These states are intended for a sampling profiler. |
| 298 // Implementation note: we store category and name together because we don't | 298 // Implementation note: we store category and name together because we don't |
| 299 // want the inconsistency/expense of storing two pointers. | 299 // want the inconsistency/expense of storing two pointers. |
| 300 // |thread_bucket| is [0..2] and is used to statically isolate samples in one | 300 // |thread_bucket| is [0..2] and is used to statically isolate samples in one |
| 301 // thread from others. | 301 // thread from others. |
| 302 #define TRACE_EVENT_SAMPLE_STATE(thread_bucket, category, name) \ | 302 #define TRACE_EVENT_SAMPLING_STATE0(category, name) \ |
| 303 TRACE_EVENT_API_ATOMIC_STORE( \ | 303 INTERNAL_TRACE_EVENT_SAMPLING_STATE(0, category, name) |
| 304 TRACE_EVENT_API_THREAD_BUCKET(thread_bucket), \ | 304 #define TRACE_EVENT_SAMPLING_STATE1(category, name) \ |
| 305 INTERNAL_TRACE_EVENT_SAMPLING_STATE(1, category, name) | |
| 306 #define TRACE_EVENT_SAMPLING_STATE2(category, name) \ | |
| 307 INTERNAL_TRACE_EVENT_SAMPLING_STATE(2, category, name) | |
| 308 | |
| 309 #define INTERNAL_TRACE_EVENT_SAMPLING_STATE(thread_bucket, category, name) \ | |
| 310 TRACE_EVENT_API_ATOMIC_STORE( \ | |
| 311 TRACE_EVENT_API_THREAD_BUCKET(thread_bucket), \ | |
| 305 reinterpret_cast<TRACE_EVENT_API_ATOMIC_WORD>(category "\0" name)); | 312 reinterpret_cast<TRACE_EVENT_API_ATOMIC_WORD>(category "\0" name)); |
| 306 | 313 |
| 307 // Records a single BEGIN event called "name" immediately, with 0, 1 or 2 | 314 // Records a single BEGIN event called "name" immediately, with 0, 1 or 2 |
| 308 // associated arguments. If the category is not enabled, then this | 315 // associated arguments. If the category is not enabled, then this |
| 309 // does nothing. | 316 // does nothing. |
| 310 // - category and name strings must have application lifetime (statics or | 317 // - category and name strings must have application lifetime (statics or |
| 311 // literals). They may not include " chars. | 318 // literals). They may not include " chars. |
| 312 #define TRACE_EVENT_BEGIN0(category_group, name) \ | 319 #define TRACE_EVENT_BEGIN0(category_group, name) \ |
| 313 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \ | 320 INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \ |
| 314 category_group, name, TRACE_EVENT_FLAG_NONE) | 321 category_group, name, TRACE_EVENT_FLAG_NONE) |
| (...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 756 #define TRACE_EVENT_API_CLASS_EXPORT BASE_EXPORT | 763 #define TRACE_EVENT_API_CLASS_EXPORT BASE_EXPORT |
| 757 | 764 |
| 758 // Not supported in split-dll build. http://crbug.com/237249 | 765 // Not supported in split-dll build. http://crbug.com/237249 |
| 759 #if !defined(CHROME_SPLIT_DLL) | 766 #if !defined(CHROME_SPLIT_DLL) |
| 760 // The thread buckets for the sampling profiler. | 767 // The thread buckets for the sampling profiler. |
| 761 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state0; | 768 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state0; |
| 762 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state1; | 769 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state1; |
| 763 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state2; | 770 TRACE_EVENT_API_CLASS_EXPORT extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state2; |
| 764 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ | 771 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ |
| 765 g_trace_state##thread_bucket | 772 g_trace_state##thread_bucket |
| 773 | |
| 774 // TraceEventSamplingState0Scope records the current sampling state | |
| 775 // and sets a new sampling state. When the scope exists, it restores | |
| 776 // the sampling state having recorded. | |
| 777 class TraceEventSamplingState0Scope { | |
| 778 public: | |
| 779 TraceEventSamplingState0Scope(const char* category_and_name) | |
| 780 { | |
| 781 previousState0_ = TraceEventSamplingState0Scope::current(); | |
| 782 TraceEventSamplingState0Scope::forceCurrent(category_and_name); | |
| 783 } | |
| 784 | |
| 785 ~TraceEventSamplingState0Scope() | |
| 786 { | |
| 787 TraceEventSamplingState0Scope::forceCurrent(previousState0_); | |
| 788 } | |
| 789 | |
| 790 static inline const char* current() | |
|
scottmg
2013/07/03 02:16:10
In chromium code, these should be Current()
haraken
2013/07/03 02:38:50
Done.
| |
| 791 { | |
| 792 return reinterpret_cast<const char*>(TRACE_EVENT_API_ATOMIC_LOAD( | |
| 793 TRACE_EVENT_API_THREAD_BUCKET(0))); | |
| 794 } | |
| 795 | |
| 796 static inline void forceCurrent(const char* category_and_name) | |
|
scottmg
2013/07/03 02:16:10
and ForceCurrent. Maybe just "Set" would be fine t
haraken
2013/07/03 02:38:50
Done.
| |
| 797 { | |
| 798 TRACE_EVENT_API_ATOMIC_STORE( | |
| 799 TRACE_EVENT_API_THREAD_BUCKET(0), | |
| 800 reinterpret_cast<TRACE_EVENT_API_ATOMIC_WORD>( | |
| 801 const_cast<char*>(category_and_name))); | |
| 802 } | |
| 803 | |
| 804 private: | |
| 805 const char* previousState0_; | |
|
scottmg
2013/07/03 02:16:10
and previous_state0_
haraken
2013/07/03 02:38:50
Done.
| |
| 806 }; | |
| 766 #endif | 807 #endif |
| 767 | 808 |
| 768 //////////////////////////////////////////////////////////////////////////////// | 809 //////////////////////////////////////////////////////////////////////////////// |
| 769 | 810 |
| 770 // Implementation detail: trace event macros create temporary variables | 811 // Implementation detail: trace event macros create temporary variables |
| 771 // to keep instrumentation overhead low. These macros give each temporary | 812 // to keep instrumentation overhead low. These macros give each temporary |
| 772 // variable a unique name based on the line number to prevent name collissions. | 813 // variable a unique name based on the line number to prevent name collissions. |
| 773 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ | 814 #define INTERNAL_TRACE_EVENT_UID3(a,b) \ |
| 774 trace_event_unique_##a##b | 815 trace_event_unique_##a##b |
| 775 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ | 816 #define INTERNAL_TRACE_EVENT_UID2(a,b) \ |
| (...skipping 691 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1467 const char* name_; | 1508 const char* name_; |
| 1468 IDType id_; | 1509 IDType id_; |
| 1469 | 1510 |
| 1470 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); | 1511 DISALLOW_COPY_AND_ASSIGN(TraceScopedTrackableObject); |
| 1471 }; | 1512 }; |
| 1472 | 1513 |
| 1473 } // namespace debug | 1514 } // namespace debug |
| 1474 } // namespace base | 1515 } // namespace base |
| 1475 | 1516 |
| 1476 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ | 1517 #endif /* BASE_DEBUG_TRACE_EVENT_H_ */ |
| OLD | NEW |