git.lucas.co / cce-compositor
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