// file : core/timer.c // project : Salis-VM // author : Paul Oliver #include #include #include #include #include #include "arch_spec.h" #include "arch_inst.h" #include "compress.h" #include "salis.h" #include "timer.h" void timer_reset(struct Timer *timer) { assert(timer); clock_gettime(CLOCK_MONOTONIC_COARSE, &timer->time_start); timer->time_delta = 0.f; } void timer_measure(struct Timer *timer) { assert(timer); struct timespec time_end; clock_gettime(CLOCK_MONOTONIC_COARSE, &time_end); timer->time_delta = (float)(time_end.tv_sec - timer->time_start.tv_sec); timer->time_delta += (float)(time_end.tv_nsec - timer->time_start.tv_nsec) / 1000000000.f; } void timer_sps_reset(struct TimerSPS *timer_sps) { assert(timer_sps); timer_reset(&timer_sps->timer); timer_sps->step_start = g_step; timer_sps->steps_per_sec = 0.f; } void timer_sps_measure(struct TimerSPS *timer_sps) { assert(timer_sps); timer_measure(&timer_sps->timer); float step_delta = (float)(g_step - timer_sps->step_start); timer_sps->steps_per_sec = step_delta / timer_sps->timer.time_delta; }