Wayland compositor (wlroots)
git clone https://git.lucas.co/cce-compositor.git
scenefx/include/render/tracy.h (3.8K)
1 #ifndef TRACY_H
2 #define TRACY_H
3
4 #ifdef TRACY_ENABLE
5 #define TRACY_FN(...) __VA_ARGS__
6 #else
7 #define TRACY_FN(...) // noop
8 #endif // TRACY_ENABLE
9
10 #ifdef TRACY_ENABLE
11 #include <tracy/TracyC.h>
12
13 struct fx_renderer;
14
15 struct tracy_data;
16 struct tracy_gpu_zone_context {
17 struct tracy_data *tracy_data;
18 bool is_active;
19 };
20
21 // Private functions: Don't use these outside of this file!
22
23 void tracy_gpu_zone_begin(struct tracy_data *tracy_data, struct tracy_gpu_zone_context *out_ctx,
24 const int line, const char *source, const char *func, const char *name);
25 void tracy_gpu_zone_end(struct tracy_gpu_zone_context *ctx);
26
27 void tracy_gpu_context_collect(struct tracy_data *tracy_data);
28 void tracy_gpu_context_destroy(struct tracy_data *tracy_data);
29 struct tracy_data *tracy_gpu_context_new(struct fx_renderer *renderer);
30 #endif // TRACY_ENABLE
31
32 #define TRACY_WHEN_CONNECTED(fn) \
33 TRACY_FN(if (TracyCIsConnected) { fn })
34
35 /**
36 * Frame
37 */
38
39 #define TRACY_MARK_FRAME TRACY_FN(TracyCFrameMark)
40
41 #define TRACY_RESCHEDULE TRACY_FN(TracyCFrameMark)
42
43 /**
44 * Messaging
45 */
46
47 #define TRACY_MESSAGE(...) \
48 TRACY_FN({ \
49 int len = snprintf(NULL, 0, __VA_ARGS__) + 1; \
50 char str[len]; \
51 snprintf(str, len, __VA_ARGS__); \
52 TracyCMessage(str, len); \
53 })
54 #define TRACY_MESSAGE_COLOR(color, ...) \
55 TRACY_FN({ \
56 int len = snprintf(NULL, 0, __VA_ARGS__) + 1; \
57 char str[len]; \
58 snprintf(str, len, __VA_ARGS__); \
59 TracyCMessageC(str, len, color); \
60 })
61 #define TRACY_MESSAGE_ERROR(...) \
62 TRACY_FN( \
63 TRACY_MESSAGE_COLOR(0xFF0000, __VA_ARGS__) \
64 )
65
66 /**
67 * Zone
68 */
69
70 #define TRACY_ZONE_START \
71 TRACY_FN( \
72 TracyCZone(ctx, true) \
73 )
74 #define TRACY_ZONE_START_N(name) \
75 TRACY_FN( \
76 TracyCZoneN(ctx, name, true) \
77 )
78 #define TRACY_ZONE_END \
79 TRACY_FN( \
80 TRACY_ZONE_TEXT_f("Success On Line: %d", __LINE__) \
81 TracyCZoneEnd(ctx); \
82 )
83 #define TRACY_ZONE_END_FAIL \
84 TRACY_FN( \
85 TRACY_ZONE_TEXT_f("Fail On Line: %d", __LINE__) \
86 TracyCZoneEnd(ctx); \
87 )
88
89 /**
90 * Zone Helpers
91 */
92
93 #define TRACY_ZONE_TEXT(txt, size) \
94 TRACY_FN(TracyCZoneText(ctx, txt, size);)
95 #define TRACY_ZONE_TEXT_f(...) \
96 TRACY_FN({ \
97 int len = snprintf(NULL, 0, __VA_ARGS__) + 1; \
98 char str[len]; \
99 snprintf(str, len, __VA_ARGS__); \
100 TracyCZoneText(ctx, str, len); \
101 })
102 #define TRACY_ZONE_NAME(txt, size) \
103 TRACY_FN( \
104 TracyCZoneName(ctx, txt, size); \
105 )
106 #define TRACY_ZONE_NAME_f(...) \
107 TRACY_FN({ \
108 int len = snprintf(NULL, 0, __VA_ARGS__) + 1; \
109 char str[len]; \
110 snprintf(str, len, __VA_ARGS__); \
111 TracyCZoneName(ctx, str, len); \
112 })
113 #define TRACY_ZONE_COLOR(color) \
114 TRACY_FN( \
115 TracyCZoneColor(ctx, color); \
116 )
117 #define TRACY_ZONE_VALUE(value) \
118 TRACY_FN( \
119 TracyCZoneValue(ctx, value); \
120 )
121
122 /**
123 * GPU Zone
124 */
125
126 #define TRACY_GPU_ZONE_START_NAME(renderer, name) \
127 TRACY_FN( \
128 struct tracy_gpu_zone_context gpu_ctx; \
129 tracy_gpu_zone_begin(renderer->tracy_data, &gpu_ctx, __LINE__, __FILE__, __func__, name) \
130 )
131 #define TRACY_GPU_ZONE_START(renderer) \
132 TRACY_FN( \
133 struct tracy_gpu_zone_context gpu_ctx; \
134 tracy_gpu_zone_begin(renderer->tracy_data, &gpu_ctx, __LINE__, __FILE__, __func__, __func__) \
135 )
136 #define TRACY_GPU_ZONE_END \
137 TRACY_FN( \
138 tracy_gpu_zone_end(&gpu_ctx) \
139 )
140 #define TRACY_GPU_ZONE_COLLECT(renderer) \
141 TRACY_FN( \
142 tracy_gpu_context_collect(renderer->tracy_data) \
143 )
144
145 /**
146 * GPU Context
147 */
148
149 #define TRACY_GPU_CONTEXT_NEW(renderer) \
150 TRACY_FN( \
151 tracy_gpu_context_new(renderer) \
152 )
153 #define TRACY_GPU_CONTEXT_DESTROY(tracy_data) \
154 TRACY_FN( \
155 tracy_gpu_context_destroy(tracy_data); \
156 )
157
158 /**
159 * GPU/CPU Zones Helpers
160 */
161
162 #define TRACY_BOTH_ZONES_START(renderer) \
163 TRACY_FN( \
164 TRACY_ZONE_START \
165 TRACY_GPU_ZONE_START(renderer) \
166 )
167 #define TRACY_BOTH_ZONES_END \
168 TRACY_FN( \
169 TRACY_ZONE_END \
170 TRACY_GPU_ZONE_END \
171 )
172 #define TRACY_BOTH_ZONES_END_FAIL \
173 TRACY_FN( \
174 TRACY_ZONE_END_FAIL \
175 TRACY_GPU_ZONE_END \
176 )
177
178 #endif // !TRACY_H