add win32 impl for oc_clock_time() #57
|
@ -18,6 +18,8 @@ extern "C"
|
||||||
|
|
||||||
static u64 __performanceCounterFreq = 0;
|
static u64 __performanceCounterFreq = 0;
|
||||||
|
|
||||||
|
const u64 WIN_EPOCH_TO_UNIX_EPOCH_100NS = 116444736000000000; // number of 100ns from Jan 1, 1601 (windows epoch) to Jan 1, 1970 (unix epoch)
|
||||||
|
|
||||||
void oc_clock_init()
|
void oc_clock_init()
|
||||||
{
|
{
|
||||||
LARGE_INTEGER freq;
|
LARGE_INTEGER freq;
|
||||||
|
@ -27,11 +29,42 @@ extern "C"
|
||||||
|
|
||||||
f64 oc_clock_time(oc_clock_kind clock)
|
f64 oc_clock_time(oc_clock_kind clock)
|
||||||
{
|
{
|
||||||
LARGE_INTEGER counter;
|
switch(clock)
|
||||||
QueryPerformanceCounter(&counter);
|
{
|
||||||
|
case OC_CLOCK_MONOTONIC:
|
||||||
|
{
|
||||||
|
LARGE_INTEGER counter;
|
||||||
|
QueryPerformanceCounter(&counter);
|
||||||
|
|
||||||
f64 time = __performanceCounterFreq ? (counter.QuadPart / (f64)__performanceCounterFreq) : 0;
|
f64 time = __performanceCounterFreq ? (counter.QuadPart / (f64)__performanceCounterFreq) : 0;
|
||||||
return (time);
|
return (time);
|
||||||
|
}
|
||||||
|
|
||||||
|
case OC_CLOCK_UPTIME:
|
||||||
|
{
|
||||||
|
LONGLONG unbiasedTime100Ns;
|
||||||
|
if(QueryUnbiasedInterruptTime(&unbiasedTime100Ns))
|
||||||
|
{
|
||||||
|
f64 unbiasedTimeSecs = ((f64)unbiasedTime100Ns) / (10 * 1000 * 1000);
|
||||||
|
return unbiasedTimeSecs;
|
||||||
|
}
|
||||||
|
oc_log_error("OC_CLOCK_UPTIME syscall failed with error: %d", GetLastError());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
case OC_CLOCK_DATE:
|
||||||
|
{
|
||||||
|
FILETIME ft;
|
||||||
|
GetSystemTimeAsFileTime(&ft);
|
||||||
|
|
||||||
|
u64 systemTime100Ns = ((u64)ft.dwHighDateTime << 32) | (u64)ft.dwLowDateTime;
|
||||||
|
u64 timestamp100Ns = systemTime100Ns - WIN_EPOCH_TO_UNIX_EPOCH_100NS;
|
||||||
|
f64 timeSecs = ((f64)timestamp100Ns) / (10 * 1000 * 1000);
|
||||||
|
return timeSecs;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
Loading…
Reference in New Issue