github.com/Konstantin8105/c4go@v0.0.0-20240505174241-768bb1c65a51/tests/raylib/external/glfw/src/posix_time.c (about)

     1  //========================================================================
     2  // GLFW 3.4 POSIX - www.glfw.org
     3  //------------------------------------------------------------------------
     4  // Copyright (c) 2002-2006 Marcus Geelnard
     5  // Copyright (c) 2006-2017 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  // It is fine to use C99 in this file because it will not be built with VS
    28  //========================================================================
    29  
    30  #include "internal.h"
    31  
    32  #include <unistd.h>
    33  #include <sys/time.h>
    34  
    35  
    36  //////////////////////////////////////////////////////////////////////////
    37  //////                       GLFW platform API                      //////
    38  //////////////////////////////////////////////////////////////////////////
    39  
    40  void _glfwPlatformInitTimer(void)
    41  {
    42      _glfw.timer.posix.clock = CLOCK_REALTIME;
    43      _glfw.timer.posix.frequency = 1000000000;
    44  
    45  #if defined(_POSIX_MONOTONIC_CLOCK)
    46      struct timespec ts;
    47      if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
    48          _glfw.timer.posix.clock = CLOCK_MONOTONIC;
    49  #endif
    50  }
    51  
    52  uint64_t _glfwPlatformGetTimerValue(void)
    53  {
    54      struct timespec ts;
    55      clock_gettime(_glfw.timer.posix.clock, &ts);
    56      return (uint64_t) ts.tv_sec * _glfw.timer.posix.frequency + (uint64_t) ts.tv_nsec;
    57  }
    58  
    59  uint64_t _glfwPlatformGetTimerFrequency(void)
    60  {
    61      return _glfw.timer.posix.frequency;
    62  }
    63