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()
|
u64 nano_count()
|
||||||
{
|
{
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
int ret;
|
int ret = clock_gettime(CLOCK_MONOTONIC,&t);
|
||||||
ret = clock_gettime(CLOCK_MONOTONIC,&t);
|
|
||||||
if(ret != 0)
|
if(ret != 0)
|
||||||
fatal_error("clock_gettime failed", 0);
|
fatal_error("clock_gettime failed", 0);
|
||||||
return (u64)t.tv_sec * 1000000000 + t.tv_nsec;
|
return (u64)t.tv_sec * 1000000000 + t.tv_nsec;
|
||||||
|
|
|
@ -87,12 +87,19 @@ Protocol *objc_getProtocol(char *name)
|
||||||
|
|
||||||
u64 nano_count()
|
u64 nano_count()
|
||||||
{
|
{
|
||||||
u64 t = mach_absolute_time();
|
u64 time = mach_absolute_time();
|
||||||
mach_timebase_info_data_t info;
|
|
||||||
kern_return_t ret = mach_timebase_info(&info);
|
static u64 scaling_factor = 0;
|
||||||
if(ret != 0)
|
if(!scaling_factor)
|
||||||
fatal_error("mach_timebase_info failed",ret);
|
{
|
||||||
return t * (info.numer/info.denom);
|
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