aboutsummaryrefslogtreecommitdiff
path: root/core/time
diff options
context:
space:
mode:
Diffstat (limited to 'core/time')
-rw-r--r--core/time/tsc_windows.odin28
1 files changed, 28 insertions, 0 deletions
diff --git a/core/time/tsc_windows.odin b/core/time/tsc_windows.odin
new file mode 100644
index 000000000..635aac2c1
--- /dev/null
+++ b/core/time/tsc_windows.odin
@@ -0,0 +1,28 @@
+//+private
+//+build windows
+package time
+
+import win32 "core:sys/windows"
+
+_get_tsc_frequency :: proc "contextless" () -> u64 {
+ @(static) frequency : u64 = 0
+ if frequency > 0 {
+ return frequency
+ }
+
+ qpc_begin: win32.LARGE_INTEGER
+ win32.QueryPerformanceCounter(&qpc_begin)
+ tsc_begin := intrinsics.read_cycle_counter()
+
+ win32.Sleep(2)
+
+ qpc_end: win32.LARGE_INTEGER
+ win32.QueryPerformanceCounter(&qpc_end)
+ tsc_end := intrinsics.read_cycle_counter()
+
+ qpc_frequency: win32.LARGE_INTEGER
+ win32.QueryPerformanceFrequency(&qpc_frequency)
+
+ frequency = ((tsc_end - tsc_begin) * qpc_frequency) / (qpc_end - qpc_begin)
+ return frequency
+}