]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/timer.cpp
netradiant: strip 16-bit png to 8-bit, fix #153
[xonotic/netradiant.git] / radiant / timer.cpp
1 /*
2    Copyright (C) 2001-2006, William Joseph.
3    All Rights Reserved.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #include "timer.h"
23 #include "globaldefs.h"
24
25
26 #if GDEF_OS_WINDOWS
27
28 #include <windows.h>
29
30 MillisecondTime MillisecondTime::current(){
31         static class Cached
32         {
33         LONGLONG m_frequency;
34         LONGLONG m_base;
35 public:
36         Cached(){
37                 QueryPerformanceFrequency( (LARGE_INTEGER *) &m_frequency );
38                 QueryPerformanceCounter( (LARGE_INTEGER *) &m_base );
39         }
40         LONGLONG frequency(){
41                 return m_frequency;
42         }
43         LONGLONG base(){
44                 return m_base;
45         }
46         } cached;
47
48         if ( cached.frequency() > 0 ) {
49                 LONGLONG count;
50                 QueryPerformanceCounter( (LARGE_INTEGER *) &count );
51                 return time_from_ticks( count - cached.base(), cached.frequency() );
52         }
53         else
54         {
55 #if 1
56                 return MillisecondTime();
57 #else
58                 return time_from_ticks( timeGetTime(), 1000 );
59 #endif
60         }
61 }
62
63
64
65
66 #elif GDEF_OS_POSIX
67
68 #include <time.h>
69 #include "sys/time.h"
70
71 MillisecondTime MillisecondTime::current(){
72         static class Cached
73         {
74         time_t m_base;
75 public:
76         Cached(){
77                 time( &m_base );
78         }
79         time_t base(){
80                 return m_base;
81         }
82         } cached;
83
84         timeval time;
85         gettimeofday( &time, 0 );
86         return MillisecondTime( ( time.tv_sec - cached.base() ) * 1000 + time.tv_usec / 1000 );
87 }
88
89
90
91 #else
92
93 #include <ctime>
94
95 MillisecondTime MillisecondTime::current(){
96         return time_from_ticks<std::clock_t>( std::clock(), CLOCKS_PER_SEC );
97 }
98
99
100
101 #endif