| 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 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 "SkEventTracer.h" | 164 #include "SkEventTracer.h" |
| 165 #include "SkDynamicAnnotations.h" |
| 165 | 166 |
| 166 // 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 |
| 167 // 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. |
| 168 #define TRACE_STR_COPY(str) \ | 169 #define TRACE_STR_COPY(str) \ |
| 169 skia::tracing_internals::TraceStringWithCopy(str) | 170 skia::tracing_internals::TraceStringWithCopy(str) |
| 170 | 171 |
| 171 // 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 |
| 172 // 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. |
| 173 #define TRACE_ID_MANGLE(id) \ | 174 #define TRACE_ID_MANGLE(id) \ |
| 174 skia::tracing_internals::TraceID::ForceMangle(id) | 175 skia::tracing_internals::TraceID::ForceMangle(id) |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 // const char* name, | 758 // const char* name, |
| 758 // SkEventTracer::Handle id) | 759 // SkEventTracer::Handle id) |
| 759 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ | 760 #define TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION \ |
| 760 SkEventTracer::GetInstance()->updateTraceEventDuration | 761 SkEventTracer::GetInstance()->updateTraceEventDuration |
| 761 | 762 |
| 762 // These operations are atomic in the Chrome tracing implementation | 763 // These operations are atomic in the Chrome tracing implementation |
| 763 // to cater to ARM's weak memory consistency; we're just doing read/ | 764 // to cater to ARM's weak memory consistency; we're just doing read/ |
| 764 // write here because it's not strictly needed for correctness. | 765 // write here because it's not strictly needed for correctness. |
| 765 // So says Nat. | 766 // So says Nat. |
| 766 // FIXME | 767 // FIXME |
| 768 // |
| 769 // Skia addition: we mark these as unprotected reads and writes to shut up TSAN. |
| 767 | 770 |
| 768 #define TRACE_EVENT_API_ATOMIC_WORD intptr_t | 771 #define TRACE_EVENT_API_ATOMIC_WORD intptr_t |
| 769 #define TRACE_EVENT_API_ATOMIC_LOAD(var) (*(&var)) | 772 #define TRACE_EVENT_API_ATOMIC_LOAD(var) SK_ANNOTATE_UNPROTECTED_READ(var) |
| 770 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) (var=value) | 773 #define TRACE_EVENT_API_ATOMIC_STORE(var, value) SK_ANNOTATE_UNPROTECTED_WRITE(&
var, value) |
| 771 | 774 |
| 772 // Defines visibility for classes in trace_event.h | 775 // Defines visibility for classes in trace_event.h |
| 773 #define TRACE_EVENT_API_CLASS_EXPORT SK_API | 776 #define TRACE_EVENT_API_CLASS_EXPORT SK_API |
| 774 | 777 |
| 775 // The thread buckets for the sampling profiler. | 778 // The thread buckets for the sampling profiler. |
| 776 TRACE_EVENT_API_CLASS_EXPORT extern \ | 779 TRACE_EVENT_API_CLASS_EXPORT extern \ |
| 777 TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; | 780 TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3]; |
| 778 | 781 |
| 779 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ | 782 #define TRACE_EVENT_API_THREAD_BUCKET(thread_bucket) \ |
| 780 g_trace_state[thread_bucket] | 783 g_trace_state[thread_bucket] |
| (...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1236 } | 1239 } |
| 1237 | 1240 |
| 1238 private: | 1241 private: |
| 1239 const char* previous_state_; | 1242 const char* previous_state_; |
| 1240 }; | 1243 }; |
| 1241 | 1244 |
| 1242 } // namespace tracing_internals | 1245 } // namespace tracing_internals |
| 1243 } // namespace skia | 1246 } // namespace skia |
| 1244 | 1247 |
| 1245 #endif | 1248 #endif |
| OLD | NEW |