vm: speed up nano-count primitive on Mac OS X

release
Slava Pestov 2010-04-11 20:26:11 -07:00
parent 72e71a3318
commit a417b0e70d
2 changed files with 14 additions and 8 deletions

View File

@ -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;

View File

@ -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;
}
}