Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Roblox
GitHub Repository: Roblox/luau
Path: blob/master/VM/src/lperf.cpp
2725 views
1
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
2
// This code is based on Lua 5.x implementation licensed under MIT License; see lua_LICENSE.txt for details
3
#include "lua.h"
4
5
#ifdef _WIN32
6
#ifndef WIN32_LEAN_AND_MEAN
7
#define WIN32_LEAN_AND_MEAN
8
#endif
9
#ifndef NOMINMAX
10
#define NOMINMAX
11
#endif
12
#include <windows.h>
13
#endif
14
15
#ifdef __APPLE__
16
#include <mach/mach.h>
17
#include <mach/mach_time.h>
18
#endif
19
20
#ifdef __EMSCRIPTEN__
21
#include <emscripten/emscripten.h>
22
#endif
23
24
#include <time.h>
25
26
static double clock_period()
27
{
28
#if defined(_WIN32)
29
LARGE_INTEGER result = {};
30
QueryPerformanceFrequency(&result);
31
return 1.0 / double(result.QuadPart);
32
#elif defined(__APPLE__)
33
mach_timebase_info_data_t result = {};
34
mach_timebase_info(&result);
35
return double(result.numer) / double(result.denom) * 1e-9;
36
#elif defined(__linux__) || defined(__FreeBSD__)
37
return 1e-9;
38
#elif defined(__EMSCRIPTEN__)
39
return 1e-3;
40
#else
41
return 1.0 / double(CLOCKS_PER_SEC);
42
#endif
43
}
44
45
static double clock_timestamp()
46
{
47
#if defined(_WIN32)
48
LARGE_INTEGER result = {};
49
QueryPerformanceCounter(&result);
50
return double(result.QuadPart);
51
#elif defined(__APPLE__)
52
return double(mach_absolute_time());
53
#elif defined(__linux__) || defined(__FreeBSD__)
54
timespec now;
55
clock_gettime(CLOCK_MONOTONIC, &now);
56
return now.tv_sec * 1e9 + now.tv_nsec;
57
#elif defined(__EMSCRIPTEN__)
58
return emscripten_get_now();
59
#else
60
return double(clock());
61
#endif
62
}
63
64
double lua_clock()
65
{
66
static double period = clock_period();
67
68
return clock_timestamp() * period;
69
}
70
71