14 #include "xrt/xrt_config_have.h"
15 #include "xrt/xrt_config_build.h"
19 #if defined(__cplusplus) && (defined(__clang__) || defined(__GNUC__))
20 #pragma GCC diagnostic push
21 #if defined(__GNUC__) && !defined(__clang__)
22 #pragma GCC diagnostic ignored "-Wpedantic"
23 #elif defined(__clang__)
24 #pragma GCC diagnostic ignored "-Wc++20-designator"
28 #if defined(XRT_FEATURE_TRACING) && defined(XRT_HAVE_PERCETTO)
29 #define U_TRACE_PERCETTO
33 #if !defined(XRT_FEATURE_TRACING) || !defined(XRT_HAVE_TRACY)
34 #define U_TRACE_FUNC_COLOR(CATEGORY, COLOR) \
36 U_TRACE_FUNC(CATEGORY)
38 #define U_TRACE_IDENT_COLOR(CATEGORY, IDENT, COLOR) \
40 U_TRACE_IDENT(CATEGORY, IDENT)
42 #define U_TRACE_BEGIN_COLOR(CATEGORY, IDENT, COLOR) \
44 U_TRACE_BEGIN(CATEGORY, IDENT)
47 #if defined(XRT_FEATURE_TRACING) && defined(XRT_HAVE_TRACY)
52 #include "tracy/TracyC.h"
54 #include "tracy/Tracy.hpp"
70 U_TRACE_WHICH_SERVICE,
90 #define COLOR_TRACE_MARKER(COLOR) U_TRACE_FUNC_COLOR(color, COLOR)
91 #define COLOR_TRACE_IDENT(IDENT, COLOR) U_TRACE_IDENT_COLOR(color, IDENT, COLOR)
92 #define COLOR_TRACE_BEGIN(IDENT, COLOR) U_TRACE_BEGIN_COLOR(color, IDENT, COLOR)
93 #define COLOR_TRACE_END(IDENT) U_TRACE_END(color, IDENT)
95 #define VK_TRACE_MARKER() U_TRACE_FUNC_COLOR(vk, 0xffffff)
96 #define VK_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(vk, IDENT, 0xffffff)
97 #define VK_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(vk, IDENT, 0xffffff)
98 #define VK_TRACE_END(IDENT) U_TRACE_END(vk, IDENT)
100 #define XRT_TRACE_MARKER() U_TRACE_FUNC_COLOR(xrt, 0x708090)
101 #define XRT_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(xrt, IDENT, 0x708090)
102 #define XRT_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(xrt, IDENT, 0x708090)
103 #define XRT_TRACE_END(IDENT) U_TRACE_END(xrt, IDENT)
105 #define DRV_TRACE_MARKER() U_TRACE_FUNC_COLOR(drv, 0x000080)
106 #define DRV_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(drv, IDENT, 0x000080)
107 #define DRV_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(drv, IDENT, 0x000080)
108 #define DRV_TRACE_END(IDENT) U_TRACE_END(drv, IDENT)
110 #define IPC_TRACE_MARKER() U_TRACE_FUNC_COLOR(ipc, 0x87cefa)
111 #define IPC_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(ipc, IDENT, 0x87cefa)
112 #define IPC_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(ipc, IDENT, 0x87cefa)
113 #define IPC_TRACE_END(IDENT) U_TRACE_END(ipc, IDENT)
115 #define OXR_TRACE_MARKER() U_TRACE_FUNC_COLOR(oxr, 0x7fffd4)
116 #define OXR_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(oxr, IDENT, 0x7fffd4)
117 #define OXR_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(oxr, IDENT, 0x7fffd4)
118 #define OXR_TRACE_END(IDENT) U_TRACE_END(oxr, IDENT, 0x7fffd4)
120 #define COMP_TRACE_MARKER() U_TRACE_FUNC_COLOR(comp, 0x00ff00)
121 #define COMP_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(comp, IDENT, 0x00ff00)
122 #define COMP_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(comp, IDENT, 0x00ff00)
123 #define COMP_TRACE_END(IDENT) U_TRACE_END(comp, IDENT)
125 #define SINK_TRACE_MARKER() U_TRACE_FUNC_COLOR(sink, 0xffa500)
126 #define SINK_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(sink, IDENT, 0xffa500)
127 #define SINK_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(sink, IDENT, 0xffa500)
128 #define SINK_TRACE_END(IDENT) U_TRACE_END(sink, IDENT)
130 #define SWAPCHAIN_TRACE_MARKER() U_TRACE_FUNC_COLOR(sc, 0x007700)
131 #define SWAPCHAIN_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(sc, IDENT, 0x007700)
132 #define SWAPCHAIN_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(sc, IDENT, 0x007700)
133 #define SWAPCHAIN_TRACE_END(IDENT) U_TRACE_END(sc, IDENT)
135 #define TRACK_TRACE_MARKER() U_TRACE_FUNC_COLOR(track, 0xff0000)
136 #define TRACK_TRACE_IDENT(IDENT) U_TRACE_IDENT_COLOR(track, IDENT, 0xff0000)
137 #define TRACK_TRACE_BEGIN(IDENT) U_TRACE_BEGIN_COLOR(track, IDENT, 0xff0000)
138 #define TRACK_TRACE_END(IDENT) U_TRACE_END(track, IDENT, 0xff0000)
147 #ifndef XRT_FEATURE_TRACING
150 #define U_TRACE_FUNC(CATEGORY) \
154 #define U_TRACE_IDENT(CATEGORY, IDENT) \
158 #define U_TRACE_BEGIN(CATEGORY, IDENT) \
159 int __trace_##IDENT = 0; \
163 #define U_TRACE_END(CATEGORY, IDENT) \
165 (void)__trace_##IDENT; \
168 #define U_TRACE_EVENT_BEGIN_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
172 #define U_TRACE_EVENT_BEGIN_ON_TRACK_DATA(CATEGORY, TRACK, TIME, NAME, ...) \
176 #define U_TRACE_EVENT_END_ON_TRACK(CATEGORY, TRACK, TIME) \
180 #define U_TRACE_INSTANT_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
184 #define U_TRACE_CATEGORY_IS_ENABLED(_) (false)
186 #define U_TRACE_SET_THREAD_NAME(STRING) \
196 #define U_TRACE_TARGET_SETUP(WHICH)
205 #elif defined(XRT_HAVE_TRACY)
210 #define U_TRACE_FUNC_COLOR(CATEGORY, COLOR) ZoneScopedC(COLOR)
212 #define U_TRACE_FUNC(CATEGORY) ZoneScoped
214 #define U_TRACE_IDENT_COLOR(CATEGORY, IDENT, COLOR) ZoneScopedNC(#IDENT, COLOR)
216 #define U_TRACE_IDENT(CATEGORY, IDENT) ZoneScopedN(#IDENT)
218 #elif !defined(XRT_OS_WINDOWS)
221 u_trace_scope_cleanup(TracyCZoneCtx *ctx_ptr)
223 TracyCZoneEnd(*ctx_ptr);
226 #define U_TRACE_FUNC_COLOR(CATEGORY, COLOR) \
227 static const struct ___tracy_source_location_data __func_loc = { \
228 NULL, __func__, __FILE__, (uint32_t)__LINE__, COLOR, \
230 TracyCZoneCtx __attribute__((cleanup(u_trace_scope_cleanup))) ctx = \
231 ___tracy_emit_zone_begin(&__func_loc, true); \
235 #define U_TRACE_FUNC(CATEGORY) \
236 static const struct ___tracy_source_location_data __func_loc = { \
237 NULL, __func__, __FILE__, (uint32_t)__LINE__, 0, \
239 TracyCZoneCtx __attribute__((cleanup(u_trace_scope_cleanup))) ctx = \
240 ___tracy_emit_zone_begin(&__func_loc, true); \
243 #define U_TRACE_IDENT_COLOR(CATEGORY, IDENT, COLOR) \
244 static const struct ___tracy_source_location_data __##IDENT##_loc = { \
245 #IDENT, __func__, __FILE__, (uint32_t)__LINE__, COLOR, \
247 TracyCZoneCtx __attribute__((cleanup(u_trace_scope_cleanup))) ctx##IDENT = \
248 ___tracy_emit_zone_begin(&__##IDENT##_loc, true); \
251 #define U_TRACE_IDENT(CATEGORY, IDENT) \
252 static const struct ___tracy_source_location_data __##IDENT##_loc = { \
253 #IDENT, __func__, __FILE__, (uint32_t)__LINE__, 0, \
255 TracyCZoneCtx __attribute__((cleanup(u_trace_scope_cleanup))) ctx##IDENT = \
256 ___tracy_emit_zone_begin(&__##IDENT##_loc, true); \
260 #define U_TRACE_FUNC_COLOR(CATEGORY, COLOR) \
264 #define U_TRACE_FUNC(CATEGORY) \
268 #define U_TRACE_IDENT_COLOR(CATEGORY, IDENT, COLOR) \
272 #define U_TRACE_IDENT(CATEGORY, IDENT) \
278 #define U_TRACE_BEGIN(CATEGORY, IDENT) TracyCZoneN(__trace_##IDENT, #IDENT, true)
279 #define U_TRACE_BEGIN_COLOR(CATEGORY, IDENT, COLOR) TracyCZoneNC(__trace_##IDENT, #IDENT, COLOR, true)
280 #define U_TRACE_END(CATEGORY, IDENT) TracyCZoneEnd(__trace_##IDENT)
282 #define U_TRACE_EVENT_BEGIN_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
286 #define U_TRACE_EVENT_BEGIN_ON_TRACK_DATA(CATEGORY, TRACK, TIME, NAME, ...) \
290 #define U_TRACE_EVENT_END_ON_TRACK(CATEGORY, TRACK, TIME) \
294 #define U_TRACE_INSTANT_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
298 #define U_TRACE_CATEGORY_IS_ENABLED(_) (true)
300 #define U_TRACE_SET_THREAD_NAME(STRING) \
303 TracyCZoneN(created, "created", true); \
304 TracyCSetThreadName(STRING); \
305 TracyCZoneEnd(created); \
308 #define U_TRACE_TARGET_SETUP(WHICH)
317 #elif defined(XRT_HAVE_PERCETTO)
320 #error "Tracing only supported on Linux"
324 #define U_TRACE_CATEGORIES(C, G) \
336 PERCETTO_CATEGORY_DECLARE(U_TRACE_CATEGORIES)
338 PERCETTO_TRACK_DECLARE(pc_cpu);
339 PERCETTO_TRACK_DECLARE(pc_allotted);
340 PERCETTO_TRACK_DECLARE(pc_gpu);
341 PERCETTO_TRACK_DECLARE(pc_margin);
342 PERCETTO_TRACK_DECLARE(pc_error);
343 PERCETTO_TRACK_DECLARE(pc_info);
344 PERCETTO_TRACK_DECLARE(pc_present);
345 PERCETTO_TRACK_DECLARE(pa_cpu);
346 PERCETTO_TRACK_DECLARE(pa_draw);
347 PERCETTO_TRACK_DECLARE(pa_wait);
349 #define U_TRACE_FUNC(CATEGORY) TRACE_EVENT(CATEGORY, __func__)
350 #define U_TRACE_IDENT(CATEGORY, IDENT) TRACE_EVENT(CATEGORY, #IDENT)
351 #define U_TRACE_BEGIN(CATEGORY, IDENT) TRACE_EVENT_BEGIN(CATEGORY, #IDENT)
352 #define U_TRACE_END(CATEGORY, IDENT) TRACE_EVENT_END(CATEGORY)
353 #define U_TRACE_EVENT_BEGIN_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
354 TRACE_EVENT_BEGIN_ON_TRACK(CATEGORY, TRACK, TIME, NAME)
355 #define U_TRACE_EVENT_BEGIN_ON_TRACK_DATA(CATEGORY, TRACK, TIME, NAME, ...) \
356 TRACE_EVENT_BEGIN_ON_TRACK_DATA(CATEGORY, TRACK, TIME, NAME, __VA_ARGS__)
357 #define U_TRACE_EVENT_END_ON_TRACK(CATEGORY, TRACK, TIME) TRACE_EVENT_END_ON_TRACK(CATEGORY, TRACK, TIME)
358 #define U_TRACE_CATEGORY_IS_ENABLED(CATEGORY) PERCETTO_CATEGORY_IS_ENABLED(CATEGORY)
359 #define U_TRACE_INSTANT_ON_TRACK(CATEGORY, TRACK, TIME, NAME) \
360 TRACE_ANY_WITH_ARGS(PERCETTO_EVENT_INSTANT, CATEGORY, &g_percetto_track_##TRACK, TIME, NAME, 0)
361 #define U_TRACE_DATA(fd, type, data) u_trace_data(fd, type, (void *)&(data), sizeof(data))
363 #define U_TRACE_SET_THREAD_NAME(STRING) \
368 #define U_TRACE_TARGET_SETUP(WHICH) \
369 void __attribute__((constructor(101))) u_trace_marker_constructor(void); \
371 void u_trace_marker_constructor(void) \
373 u_trace_marker_setup(WHICH); \
378 #error "Need to have Percetto/Perfetto"
387 #if defined(__cplusplus) && (defined(__clang__) || defined(__GNUC__))
388 #pragma GCC diagnostic pop
u_trace_which
Should the extra tracks be enabled, see Tracing support.
Definition: u_trace_marker.h:69
void u_trace_marker_setup(enum u_trace_which which)
Internal setup function, use U_TRACE_TARGET_SETUP, see Tracing support.
Definition: u_trace_marker.c:106
void u_trace_marker_init(void)
Must be called from a non-static/global constructor context.
Definition: u_trace_marker.c:114
Header holding common defines.
Auto detect OS and certain features.