#ifndef TIMER_H #define TIMER_H #include "aliases.h" #ifndef MAX_PROFILE_SAMPLES #define MAX_PROFILE_SAMPLES 1024 #endif // !MAX_PROFILE_SAMPLES #ifdef ENABLE_PROFILING #define PROFILE_START profile_start() #define PROFILE_END profile_end() #define SAMPLE_START(ID, TITLE) profiler_sample_t ID = sample_start(TITLE) #define SAMPLE_END(ID) sample_end(&ID) #else #define PROFILE_START #define PROFILE_END #define SAMPLE_START(ID, TITLE) #define SAMPLE_END(ID) #endif // ENABLE_PROFILING #ifdef __cplusplus extern "C" { #endif typedef struct { const char *title; u64 start; u64 end; } profiler_sample_t; u64 get_os_frequency(); // Time in nanoseconds u64 get_os_time(void); // CPU timer using rdtsc u64 read_cpu_timer(void); // CPU frequency in hz/sec u64 get_cpu_freq(u64 milliseconds); void profile_start(); void profile_end(); profiler_sample_t sample_start(const char *title); void sample_end(profiler_sample_t *sample); #ifdef __cplusplus } #endif #endif // !TIMER_H