-/* Copyright (C) 2009, Martin Johansson <martin@fatbob.nu>
- Copyright (C) 2005-2009, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+ Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
All rights reserved.
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-#include <sys/time.h>
+#include <time.h>
#include <stdint.h>
#include <stdio.h>
+#ifdef __MACH__
+#include <mach/clock.h>
+#include <mach/mach.h>
+#endif
+
#include "timer.h"
static uint64_t Timer_now()
{
- struct timeval tv;
+ struct timespec ts;
uint64_t e;
-
- gettimeofday(&tv, NULL);
- e = tv.tv_sec * 1000000LL;
- e += tv.tv_usec;
+
+#ifdef __MACH__
+ clock_serv_t clock;
+ mach_timespec_t mts;
+ host_get_clock_service(mach_host_self(), SYSTEM_CLOCK, &clock);
+ clock_get_time(clock, &mts);
+ mach_port_deallocate(mach_task_self(), clock);
+ ts.tv_sec = mts.tv_sec;
+ ts.tv_nsec = mts.tv_nsec;
+#else
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+#endif
+ e = ts.tv_sec * 1000000LL;
+ e += ts.tv_nsec / 1000LL; //convert to microseconds
return e;
}