vm: speed up nano-count primitive on Mac OS X
parent
72e71a3318
commit
a417b0e70d
|
@ -38,8 +38,7 @@ const char *default_image_path()
|
|||
u64 nano_count()
|
||||
{
|
||||
struct timespec t;
|
||||
int ret;
|
||||
ret = clock_gettime(CLOCK_MONOTONIC,&t);
|
||||
int ret = clock_gettime(CLOCK_MONOTONIC,&t);
|
||||
if(ret != 0)
|
||||
fatal_error("clock_gettime failed", 0);
|
||||
return (u64)t.tv_sec * 1000000000 + t.tv_nsec;
|
||||
|
|
|
@ -87,12 +87,19 @@ Protocol *objc_getProtocol(char *name)
|
|||
|
||||
u64 nano_count()
|
||||
{
|
||||
u64 t = mach_absolute_time();
|
||||
mach_timebase_info_data_t info;
|
||||
kern_return_t ret = mach_timebase_info(&info);
|
||||
if(ret != 0)
|
||||
fatal_error("mach_timebase_info failed",ret);
|
||||
return t * (info.numer/info.denom);
|
||||
u64 time = mach_absolute_time();
|
||||
|
||||
static u64 scaling_factor = 0;
|
||||
if(!scaling_factor)
|
||||
{
|
||||
mach_timebase_info_data_t info;
|
||||
kern_return_t ret = mach_timebase_info(&info);
|
||||
if(ret != 0)
|
||||
fatal_error("mach_timebase_info failed",ret);
|
||||
scaling_factor = info.numer/info.denom;
|
||||
}
|
||||
|
||||
return time * scaling_factor;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue