24 struct timespec start;
41 #include <tracy/TracyC.h>
52 TracyCZoneCtx tracy_ctx;
53 TracyCZoneCtx host_ctx;
164 #define PERF_MEASURE_MS(var_name) \
165 double var_name = 0.0; \
167 _timer##var_name = {0}, \
168 *_run = (perf_timer_start(&_timer##var_name), (PerfTimer*)1); \
170 var_name = perf_timer_elapsed_ms(&_timer##var_name), _run = NULL)
175 #define PERF_MEASURE_LOG(label) \
176 for (PerfTimer _timer = {0}, \
177 *_run = (perf_timer_start(&_timer), (PerfTimer*)1); \
178 _run; LOG_INFO("perf", "%s: %.2f ms", label, \
179 perf_timer_elapsed_ms(&_timer)), \
185 #define GPU_MEASURE_MS(var_name) \
186 double var_name = 0.0; \
187 for (GPUTimer _gpu_timer##var_name = {0}, \
188 *_gpu_run = (gpu_timer_start(&_gpu_timer##var_name), \
191 var_name = gpu_timer_elapsed_ms(&_gpu_timer##var_name, 1), \
192 gpu_timer_cleanup(&_gpu_timer##var_name), \
198 #define GPU_MEASURE_LOG(label) \
201 *_gpu_run = (gpu_timer_start(&_gpu_timer), (GPUTimer*)1); \
202 _gpu_run; LOG_INFO("perf.gpu", "%s: %.2f ms", label, \
203 gpu_timer_elapsed_ms(&_gpu_timer, 1)), \
204 gpu_timer_cleanup(&_gpu_timer), _gpu_run = NULL)
210 #define HYBRID_MEASURE_LOG(label) \
211 for (HybridTimer _h = perf_hybrid_start(), *_h_run = (HybridTimer*)1; \
212 _h_run; perf_hybrid_stop(&_h, label), _h_run = NULL)
228 #define HYBRID_MEASURE_DEBUG_MS(var_name, label) \
229 double var_name = 0.0; \
230 for (HybridTimer _h##var_name = perf_hybrid_start(), \
231 *_h_run = (HybridTimer*)1; \
232 _h_run; var_name = perf_hybrid_stop_debug(&_h##var_name, label), \
261 #define HYBRID_FUNC_TIMER(label) \
262 HybridTimerRAII _h_raii \
263 __attribute__((cleanup(hybrid_timer_cleanup_raii))) \
264 __attribute__((unused)) = {perf_hybrid_start(), label}
Common OpenGL definitions, RAII helpers, and utilities.
double perf_timer_elapsed_ms(PerfTimer *timer)
Stops the timer and returns elapsed time in milliseconds.
Definition: perf_timer.c:39
void perf_hybrid_stop(HybridTimer *timer, const char *label)
Stops both measurements and logs the results to the console.
Definition: perf_timer.c:289
double perf_timer_elapsed_s(PerfTimer *timer)
Stops the timer and returns elapsed time in seconds.
Definition: perf_timer.c:71
double perf_timer_elapsed_us(PerfTimer *timer)
Stops the timer and returns elapsed time in microseconds.
Definition: perf_timer.c:55
double gpu_timer_elapsed_ms(GPUTimer *timer, int wait_for_result)
Stops the GPU timer and retrieves the result.
Definition: perf_timer.c:110
void perf_timer_start(PerfTimer *timer)
Starts the CPU timer.
Definition: perf_timer.c:30
HybridTimer perf_hybrid_start(void)
Starts both CPU and GPU measurement simultaneously.
Definition: perf_timer.c:212
void gpu_timer_stop(GPUTimer *timer)
Explicitly stops the GPU timer (records end timestamp).
static void hybrid_timer_cleanup_raii(HybridTimerRAII *timer_raii)
Internal cleanup function for HybridTimerRAII.
Definition: perf_timer.h:245
void gpu_timer_start(GPUTimer *timer)
Initializes and starts a GPU measurement.
Definition: perf_timer.c:91
void gpu_timer_cleanup(GPUTimer *timer)
Releases OpenGL resources associated with the GPU timer.
Definition: perf_timer.c:164
double perf_hybrid_stop_debug(HybridTimer *timer, const char *label)
Like perf_hybrid_stop, but logs at DEBUG level instead of INFO.
Definition: perf_timer.c:298
GPU performance timer using OpenGL Query Objects.
Definition: perf_timer.h:34
int active
Definition: perf_timer.h:37
GLuint query_end
Definition: perf_timer.h:36
GLuint query_start
Definition: perf_timer.h:35
Internal helper for scope-based timing.
Definition: perf_timer.h:239
const char * label
Definition: perf_timer.h:241
HybridTimer timer
Definition: perf_timer.h:240
Hybrid timer combining CPU and GPU measurements.
Definition: perf_timer.h:48
PerfTimer cpu
Definition: perf_timer.h:49
GPUTimer gpu
Definition: perf_timer.h:50
CPU high-precision timer.
Definition: perf_timer.h:23