#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(COUNT) profile_start(COUNT) #define PROFILE_END profile_end() #define SAMPLE_START(ID, TITLE) sample_start(ID, TITLE) #define SAMPLE_END(ID) sample_end(ID) #else #define PROFILE_START(COUNT) #define PROFILE_END #define SAMPLE_START(ID, TITLE) #define SAMPLE_END(ID) #endif // ENABLE_PROFILING #ifdef __cplusplus extern "C" { #endif typedef struct sample profiler_sample_t; struct sample { const char *title; u64 first_start; u64 start; u64 exclusive_time; u64 children_time; u64 hit_count; profiler_sample_t *parent; }; 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(u64 count); void profile_end(); void sample_start(u64 id, const char *title); void sample_end(u64 id); #ifdef __cplusplus } #endif #endif // !TIMER_H