summaryrefslogtreecommitdiff
path: root/core/timer.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/timer.c')
-rw-r--r--core/timer.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/core/timer.c b/core/timer.c
new file mode 100644
index 0000000..a634a9b
--- /dev/null
+++ b/core/timer.c
@@ -0,0 +1,43 @@
+// file : core/timer.c
+// project : Salis-VM
+// author : Paul Oliver <contact@pauloliver.dev>
+
+#include <assert.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <threads.h>
+#include <zlib.h>
+
+#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;
+}