OLD | NEW |
1 // Copyright (c) 2014 Google Inc. | 1 // Copyright (c) 2014 Google Inc. |
2 // | 2 // |
3 // Use of this source code is governed by a BSD-style license that can be | 3 // Use of this source code is governed by a BSD-style license that can be |
4 // found in the LICENSE file. | 4 // found in the LICENSE file. |
5 | 5 |
6 // This header file defines the set of trace_event macros without specifying | 6 // This header file defines the set of trace_event macros without specifying |
7 // how the events actually get collected and stored. If you need to expose trace | 7 // how the events actually get collected and stored. If you need to expose trace |
8 // events to some other universe, you can copy-and-paste this file as well as | 8 // events to some other universe, you can copy-and-paste this file as well as |
9 // trace_event.h, modifying the macros contained there as necessary for the | 9 // trace_event.h, modifying the macros contained there as necessary for the |
10 // target platform. The end result is that multiple libraries can funnel events | 10 // target platform. The end result is that multiple libraries can funnel events |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
154 // because AddTraceEvent is threadsafe internally and checks the enabled state | 154 // because AddTraceEvent is threadsafe internally and checks the enabled state |
155 // again under lock. | 155 // again under lock. |
156 // | 156 // |
157 // Without the use of these static category pointers and enabled flags all | 157 // Without the use of these static category pointers and enabled flags all |
158 // trace points would carry a significant performance cost of acquiring a lock | 158 // trace points would carry a significant performance cost of acquiring a lock |
159 // and resolving the category. | 159 // and resolving the category. |
160 | 160 |
161 #ifndef SkTraceEvent_DEFINED | 161 #ifndef SkTraceEvent_DEFINED |
162 #define SkTraceEvent_DEFINED | 162 #define SkTraceEvent_DEFINED |
163 | 163 |
| 164 #include "SkAtomics.h" |
164 #include "SkEventTracer.h" | 165 #include "SkEventTracer.h" |
165 #include "SkDynamicAnnotations.h" | |
166 | 166 |
167 // By default, const char* argument values are assumed to have long-lived scope | 167 // By default, const char* argument values are assumed to have long-lived scope |
168 // and will not be copied. Use this macro to force a const char* to be copied. | 168 // and will not be copied. Use this macro to force a const char* to be copied. |
169 #define TRACE_STR_COPY(str) \ | 169 #define TRACE_STR_COPY(str) \ |
170 skia::tracing_internals::TraceStringWithCopy(str) | 170 skia::tracing_internals::TraceStringWithCopy(str) |
171 | 171 |
172 // By default, uint64 ID argument values are not mangled with the Process ID in | 172 // By default, uint64 ID argument values are not mangled with the Process ID in |
173 // TRACE_EVENT_ASYNC macros. Use this macro to force Process ID mangling. | 173 // TRACE_EVENT_ASYNC macros. Use this macro to force Process ID mangling. |
174 #define TRACE_ID_MANGLE(id) \ | 174 #define TRACE_ID_MANGLE(id) \ |
175 skia::tracing_internals::TraceID::ForceMangle(id) | 175 skia::tracing_internals::TraceID::ForceMangle(id) |
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 SkEventTracer::GetInstance()->addTraceEvent | 753 SkEventTracer::GetInstance()->addTraceEvent |
754 | 754 |
755 // Set the duration field of a COMPLETE trace event. | 755 // Set the duration field of a COMPLETE trace event. |
756 // void TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( | 756 // void TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION( |
757 // const uint8_t* category_group_enabled, | 757 // const uint8_t* category_group_enabled, |
758 // const char* name, | 758 // const char* name, |
759 // SkEventTracer::Handle id) | 759 // SkEventTracer::Handle id) |
760 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ | 760 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ |
761 SkEventTracer::GetInstance()->updateTraceEventDuration | 761 SkEventTracer::GetInstance()->updateTraceEventDuration |
762 | 762 |
763 // These operations are atomic in the Chrome tracing implementation | |
764 // to cater to ARM's weak memory consistency; we're just doing read/ | |
765 // write here because it's not strictly needed for correctness. | |
766 // So says Nat. | |
767 // FIXME | |
768 // | |
769 // Skia addition: we mark these as unprotected reads and writes to shut up TSAN. | |
770 | |
771 #define TRACE_EVENT_API_ATOMIC_WORD intptr_t | 763 #define TRACE_EVENT_API_ATOMIC_WORD intptr_t |
772 #define TRACE_EVENT_API_ATOMIC_LOAD(var) SK_ANNOTATE_UNPROTECTED_READ(var) | 764 #define TRACE_EVENT_API_ATOMIC_LOAD(var) sk_atomic_load(&var, sk_memory_order_re
laxed) |
773 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) SK_ANNOTATE_UNPROTECTED_WRITE(&
var, value) | 765 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) \ |
| 766 sk_atomic_store(&var, value, sk_memory_order_relaxed) |
774 | 767 |
775 // Defines visibility for classes in trace_event.h | 768 // Defines visibility for classes in trace_event.h |
776 #define TRACE_EVENT_API_CLASS_EXPORT SK_API | 769 #define TRACE_EVENT_API_CLASS_EXPORT SK_API |
777 | 770 |
778 // The thread buckets for the sampling profiler. | 771 // The thread buckets for the sampling profiler. |
779 TRACE_EVENT_API_CLASS_EXPORT extern \ | 772 TRACE_EVENT_API_CLASS_EXPORT extern \ |
780 TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; | 773 TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; |
781 | 774 |
782 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ | 775 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ |
783 g_trace_state[thread_bucket] | 776 g_trace_state[thread_bucket] |
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1239 } | 1232 } |
1240 | 1233 |
1241 private: | 1234 private: |
1242 const char* previous_state_; | 1235 const char* previous_state_; |
1243 }; | 1236 }; |
1244 | 1237 |
1245 } // namespace tracing_internals | 1238 } // namespace tracing_internals |
1246 } // namespace skia | 1239 } // namespace skia |
1247 | 1240 |
1248 #endif | 1241 #endif |
OLD | NEW |