summaryrefslogtreecommitdiff
path: root/u_platform.c
blob: a3c8a9392e2060e5fc0f623aa2c987582a7fad9f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
=======================================================================
This file is part of Redman's RT.

Redman's RT is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

Redman's RT is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with Redman's RT.  If not, see <http://www.gnu.org/licenses/>.
=======================================================================
*/

#include "common.h"

#ifdef PLATFORM_POSIX  
  #include <time.h>
#endif

// U_Clock: measure time with 1ms precision
uint64_t U_Clock( void )
{
  return SDL_GetTicks( );
}

// U_Microclock: measure time with 1us precision
uint64_t U_Microclock( void )
{
#ifdef PLATFORM_POSIX
  struct timespec t;
  clock_gettime( CLOCK_MONOTONIC, &t );
  return t.tv_sec * 1000000 + t.tv_nsec / 1000;
#else
  //TODO: win32 timers here
  return SDL_GetTicks( ) * 1000;
#endif
}

// U_Nanoclock: measure time with 1ns precision
uint64_t U_Nanoclock( void )
{
#ifdef PLATFORM_POSIX
  struct timespec t;
  clock_gettime( CLOCK_MONOTONIC, &t );
  return t.tv_sec * 1000000000 + t.tv_nsec;
#else
  //TODO: win32 timers here
  return SDL_GetTicks( ) * 1000000;
#endif
}