medfall

A super great game engine
Log | Files | Refs

posix_time.cc (2705B)


      1 //========================================================================
      2 // GLFW 3.3 POSIX - www.glfw.org
      3 //------------------------------------------------------------------------
      4 // Copyright (c) 2002-2006 Marcus Geelnard
      5 // Copyright (c) 2006-2016 Camilla Löwy <elmindreda@glfw.org>
      6 //
      7 // This software is provided 'as-is', without any express or implied
      8 // warranty. In no event will the authors be held liable for any damages
      9 // arising from the use of this software.
     10 //
     11 // Permission is granted to anyone to use this software for any purpose,
     12 // including commercial applications, and to alter it and redistribute it
     13 // freely, subject to the following restrictions:
     14 //
     15 // 1. The origin of this software must not be misrepresented; you must not
     16 //    claim that you wrote the original software. If you use this software
     17 //    in a product, an acknowledgment in the product documentation would
     18 //    be appreciated but is not required.
     19 //
     20 // 2. Altered source versions must be plainly marked as such, and must not
     21 //    be misrepresented as being the original software.
     22 //
     23 // 3. This notice may not be removed or altered from any source
     24 //    distribution.
     25 //
     26 //========================================================================
     27 
     28 #include "internal.h"
     29 
     30 #include <sys/time.h>
     31 #include <time.h>
     32 
     33 
     34 //////////////////////////////////////////////////////////////////////////
     35 //////                       GLFW internal API                      //////
     36 //////////////////////////////////////////////////////////////////////////
     37 
     38 // Initialise timer
     39 //
     40 void _glfwInitTimerPOSIX(void)
     41 {
     42 #if defined(CLOCK_MONOTONIC)
     43     struct timespec ts;
     44 
     45     if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
     46     {
     47         _glfw.timer.posix.monotonic = GLFW_TRUE;
     48         _glfw.timer.posix.frequency = 1000000000;
     49     }
     50     else
     51 #endif
     52     {
     53         _glfw.timer.posix.monotonic = GLFW_FALSE;
     54         _glfw.timer.posix.frequency = 1000000;
     55     }
     56 }
     57 
     58 
     59 //////////////////////////////////////////////////////////////////////////
     60 //////                       GLFW platform API                      //////
     61 //////////////////////////////////////////////////////////////////////////
     62 
     63 uint64_t _glfwPlatformGetTimerValue(void)
     64 {
     65 #if defined(CLOCK_MONOTONIC)
     66     if (_glfw.timer.posix.monotonic)
     67     {
     68         struct timespec ts;
     69         clock_gettime(CLOCK_MONOTONIC, &ts);
     70         return (uint64_t) ts.tv_sec * (uint64_t) 1000000000 + (uint64_t) ts.tv_nsec;
     71     }
     72     else
     73 #endif
     74     {
     75         struct timeval tv;
     76         gettimeofday(&tv, NULL);
     77         return (uint64_t) tv.tv_sec * (uint64_t) 1000000 + (uint64_t) tv.tv_usec;
     78     }
     79 }
     80 
     81 uint64_t _glfwPlatformGetTimerFrequency(void)
     82 {
     83     return _glfw.timer.posix.frequency;
     84 }
     85