vm: speed up nano-count primitive on Windows
parent
a417b0e70d
commit
eaccd0b56a
|
@ -18,17 +18,24 @@ u64 system_micros()
|
||||||
|
|
||||||
u64 nano_count()
|
u64 nano_count()
|
||||||
{
|
{
|
||||||
LARGE_INTEGER count;
|
static double scale_factor;
|
||||||
LARGE_INTEGER frequency;
|
|
||||||
static u32 hi = 0;
|
static u32 hi = 0;
|
||||||
static u32 lo = 0;
|
static u32 lo = 0;
|
||||||
BOOL ret;
|
|
||||||
ret = QueryPerformanceCounter(&count);
|
LARGE_INTEGER count;
|
||||||
|
BOOL ret = QueryPerformanceCounter(&count);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
fatal_error("QueryPerformanceCounter", 0);
|
fatal_error("QueryPerformanceCounter", 0);
|
||||||
ret = QueryPerformanceFrequency(&frequency);
|
|
||||||
|
if(scale_factor == 0.0)
|
||||||
|
{
|
||||||
|
LARGE_INTEGER frequency;
|
||||||
|
BOOL ret = QueryPerformanceFrequency(&frequency);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
fatal_error("QueryPerformanceFrequency", 0);
|
fatal_error("QueryPerformanceFrequency", 0);
|
||||||
|
scale_factor = (1000000000.0 / frequency.QuadPart);
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef FACTOR_64
|
#ifdef FACTOR_64
|
||||||
hi = count.HighPart;
|
hi = count.HighPart;
|
||||||
|
@ -40,7 +47,7 @@ u64 nano_count()
|
||||||
#endif
|
#endif
|
||||||
lo = count.LowPart;
|
lo = count.LowPart;
|
||||||
|
|
||||||
return (u64)((((u64)hi << 32) | (u64)lo)*(1000000000.0/frequency.QuadPart));
|
return (u64)((((u64)hi << 32) | (u64)lo) * scale_factor);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sleep_nanos(u64 nsec)
|
void sleep_nanos(u64 nsec)
|
||||||
|
|
Loading…
Reference in New Issue