提交 c86fa7bb 编写于 作者: P Palana

Use libc++ inspired clock instead of the deprecated AbsoluteToNanoseconds

This also makes the clang static analyzer happy (it complained about
uninitialized fields in the AbsoluteTime struct)
上级 0a38abe5
......@@ -87,14 +87,43 @@ void os_sleep_ms(uint32_t duration)
usleep(duration*1000);
}
/* clock function selection taken from libc++ */
static uint64_t ns_time_simple()
{
return mach_absolute_time();
}
static double ns_time_compute_factor()
{
mach_timebase_info_data_t info = {1, 1};
mach_timebase_info(&info);
return ((double)info.numer) / info.denom;
}
static uint64_t ns_time_full()
{
static double factor = 0.;
if (factor == 0.) factor = ns_time_compute_factor();
return (uint64_t)(mach_absolute_time() * factor);
}
typedef uint64_t (*time_func)();
static time_func ns_time_select_func()
{
mach_timebase_info_data_t info = {1, 1};
mach_timebase_info(&info);
if (info.denom == info.numer)
return ns_time_simple;
return ns_time_full;
}
uint64_t os_gettime_ns(void)
{
uint64_t t = mach_absolute_time();
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
Nanoseconds nano = AbsoluteToNanoseconds(*(AbsoluteTime*) &t);
#pragma clang diagnostic pop
return *(uint64_t*) &nano;
static time_func f = NULL;
if (!f) f = ns_time_select_func();
return f();
}
/* gets the location ~/Library/Application Support/[name] */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册