45#include "../../deps/sokol/sokol_time.h"
141#define START_TIMER(name_fmt, ...) \
143 if (timer_is_initialized()) { \
144 char _timer_name_buf[256]; \
145 snprintf(_timer_name_buf, sizeof(_timer_name_buf), name_fmt, ##__VA_ARGS__); \
146 (void)timer_start(_timer_name_buf); \
165#define STOP_TIMER(name_fmt, ...) \
167 double _elapsed = -1.0; \
168 if (timer_is_initialized()) { \
169 char _timer_name_buf[256]; \
170 snprintf(_timer_name_buf, sizeof(_timer_name_buf), name_fmt, ##__VA_ARGS__); \
171 _elapsed = timer_stop(_timer_name_buf); \
180#define NS_PER_US 1000.0
181#define NS_PER_MS 1000000.0
182#define NS_PER_SEC 1000000000.0
183#define NS_PER_MIN (NS_PER_SEC * 60.0)
184#define NS_PER_HOUR (NS_PER_MIN * 60.0)
185#define NS_PER_DAY (NS_PER_HOUR * 24.0)
186#define NS_PER_YEAR (NS_PER_DAY * 365.25)
271#define STOP_TIMER_AND_LOG(timer_name, log_func, msg_fmt, ...) \
273 double _elapsed_ns = STOP_TIMER(timer_name, ##__VA_ARGS__); \
274 if (_elapsed_ns >= 0.0) { \
275 char _duration_str[32]; \
276 format_duration_ns(_elapsed_ns, _duration_str, sizeof(_duration_str)); \
277 log_func(msg_fmt " in %s", ##__VA_ARGS__, _duration_str); \
unsigned long long uint64_t
double timer_stop(const char *name)
Stop a named timer and return elapsed time.
void timer_system_cleanup(void)
Cleanup the timing system.
bool timer_start(const char *name)
Start a named timer.
int format_duration_ns(double nanoseconds, char *buffer, size_t buffer_size)
Format nanoseconds as human-readable duration string.
uint64_t adaptive_sleep_calculate(adaptive_sleep_state_t *state, size_t queue_depth, size_t target_depth)
Calculate adaptive sleep time based on queue depth.
int format_duration_s(double seconds, char *buffer, size_t buffer_size)
Format seconds as human-readable duration string.
void adaptive_sleep_init(adaptive_sleep_state_t *state, const adaptive_sleep_config_t *config)
Initialize adaptive sleep state with configuration.
int format_duration_ms(double milliseconds, char *buffer, size_t buffer_size)
Format milliseconds as human-readable duration string.
bool timer_is_initialized(void)
Check if timing system is initialized.
bool timer_system_init(void)
Initialize the timing system.
void adaptive_sleep_do(adaptive_sleep_state_t *state, size_t queue_depth, size_t target_depth)
Calculate sleep time and immediately sleep for that duration.
struct timer_record timer_record_t
Individual timer record for a named timing operation.
Configuration for adaptive sleep behavior.
double min_speed_multiplier
Minimum speed (max sleep) - usually 1.0 (baseline speed)
double max_speed_multiplier
Maximum speed (min sleep) - e.g., 4.0 = process 4x faster.
uint64_t baseline_sleep_ns
Normal sleep time in nanoseconds (when queue is at target)
double speedup_rate
Ramp-up rate when queue builds (0.0-1.0, higher = faster ramp)
double slowdown_rate
Ramp-down rate when queue empties (0.0-1.0, higher = faster ramp)
Runtime state for adaptive sleep.
double current_speed_multiplier
Current speed state (1.0 = baseline, >1.0 = faster)
uint64_t last_sleep_ns
Last calculated sleep time (for debugging)
adaptive_sleep_config_t config
Configuration (copied, not referenced)
Individual timer record for a named timing operation.
uint64_t start_ticks
Start time in sokol ticks.
char * name
Timer name (heap-allocated, unique key)
UT_hash_handle hh
uthash handle (makes this hashable by name)
#️⃣ Wrapper for uthash.h that ensures common.h is included first