Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/test/benchmark/tick.h
4130 views
1
#ifdef __EMSCRIPTEN__
2
#include <emscripten/emscripten.h>
3
#endif
4
5
#ifdef WIN32
6
#include <Windows.h>
7
#define tick_t unsigned long long
8
#define aligned_alloc(align, size) _aligned_malloc((size), (align))
9
#endif
10
11
#ifdef __EMSCRIPTEN__
12
#define tick emscripten_get_now
13
#define tick_t double
14
tick_t ticks_per_sec() { return 1000.0; }
15
#elif defined(__APPLE__)
16
#include <mach/mach.h>
17
#include <mach/mach_time.h>
18
#define tick_t unsigned long long
19
#define tick mach_absolute_time
20
tick_t ticks_per_sec()
21
{
22
mach_timebase_info_data_t timeBaseInfo;
23
mach_timebase_info(&timeBaseInfo);
24
return 1000000000ULL * (uint64_t)timeBaseInfo.denom / (uint64_t)timeBaseInfo.numer;
25
}
26
#elif defined(_POSIX_MONOTONIC_CLOCK)
27
#define tick_t unsigned long long
28
inline tick_t tick()
29
{
30
timespec t;
31
clock_gettime(CLOCK_MONOTONIC, &t);
32
return (tick_t)t.tv_sec * 1000 * 1000 * 1000 + (tick_t)t.tv_nsec;
33
}
34
tick_t ticks_per_sec()
35
{
36
return 1000 * 1000 * 1000;
37
}
38
#elif defined(_POSIX_C_SOURCE)
39
#include <sys/time.h>
40
#define tick_t unsigned long long
41
inline tick_t tick()
42
{
43
timeval t;
44
gettimeofday(&t, NULL);
45
return (tick_t)t.tv_sec * 1000 * 1000 + (tick_t)t.tv_usec;
46
}
47
tick_t ticks_per_sec()
48
{
49
return 1000 * 1000;
50
}
51
#elif defined(WIN32)
52
#define tick_t unsigned long long
53
inline tick_t tick()
54
{
55
LARGE_INTEGER ddwTimer;
56
QueryPerformanceCounter(&ddwTimer);
57
return ddwTimer.QuadPart;
58
}
59
tick_t ticks_per_sec()
60
{
61
LARGE_INTEGER ddwTimerFrequency;
62
QueryPerformanceFrequency(&ddwTimerFrequency);
63
return ddwTimerFrequency.QuadPart;
64
}
65
#else
66
#error No tick_t
67
#endif
68
69