diff options
author | Andreas Grois <andi@grois.info> | 2018-03-09 21:36:10 +0100 |
---|---|---|
committer | Andreas Grois <andi@grois.info> | 2018-03-09 21:36:10 +0100 |
commit | 3b734f0d6b9e28c1f2c4ae54e3f46e573e02f4a5 (patch) | |
tree | 444542870666e41594e7b493f625ade81d64f885 /glfw-3.2.1/src/posix_time.c |
Initial Commit
Diffstat (limited to 'glfw-3.2.1/src/posix_time.c')
-rw-r--r-- | glfw-3.2.1/src/posix_time.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/glfw-3.2.1/src/posix_time.c b/glfw-3.2.1/src/posix_time.c new file mode 100644 index 0000000..8d0d4cd --- /dev/null +++ b/glfw-3.2.1/src/posix_time.c @@ -0,0 +1,85 @@ +//======================================================================== +// GLFW 3.2 POSIX - www.glfw.org +//------------------------------------------------------------------------ +// Copyright (c) 2002-2006 Marcus Geelnard +// Copyright (c) 2006-2016 Camilla Berglund <elmindreda@glfw.org> +// +// This software is provided 'as-is', without any express or implied +// warranty. In no event will the authors be held liable for any damages +// arising from the use of this software. +// +// Permission is granted to anyone to use this software for any purpose, +// including commercial applications, and to alter it and redistribute it +// freely, subject to the following restrictions: +// +// 1. The origin of this software must not be misrepresented; you must not +// claim that you wrote the original software. If you use this software +// in a product, an acknowledgment in the product documentation would +// be appreciated but is not required. +// +// 2. Altered source versions must be plainly marked as such, and must not +// be misrepresented as being the original software. +// +// 3. This notice may not be removed or altered from any source +// distribution. +// +//======================================================================== + +#include "internal.h" + +#include <sys/time.h> +#include <time.h> + + +////////////////////////////////////////////////////////////////////////// +////// GLFW internal API ////// +////////////////////////////////////////////////////////////////////////// + +// Initialise timer +// +void _glfwInitTimerPOSIX(void) +{ +#if defined(CLOCK_MONOTONIC) + struct timespec ts; + + if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) + { + _glfw.posix_time.monotonic = GLFW_TRUE; + _glfw.posix_time.frequency = 1000000000; + } + else +#endif + { + _glfw.posix_time.monotonic = GLFW_FALSE; + _glfw.posix_time.frequency = 1000000; + } +} + + +////////////////////////////////////////////////////////////////////////// +////// GLFW platform API ////// +////////////////////////////////////////////////////////////////////////// + +uint64_t _glfwPlatformGetTimerValue(void) +{ +#if defined(CLOCK_MONOTONIC) + if (_glfw.posix_time.monotonic) + { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec; + } + else +#endif + { + struct timeval tv; + gettimeofday(&tv, NULL); + return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec; + } +} + +uint64_t _glfwPlatformGetTimerFrequency(void) +{ + return _glfw.posix_time.frequency; +} + |