]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/timer.cpp
reformat code! now the code is only ugly on the *inside*
[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 {
73     static class Cached {
74         time_t m_base;
75     public:
76         Cached()
77         {
78             time(&m_base);
79         }
80
81         time_t base()
82         {
83             return m_base;
84         }
85     } cached;
86
87     timeval time;
88     gettimeofday(&time, 0);
89     return MillisecondTime((time.tv_sec - cached.base()) * 1000 + time.tv_usec / 1000);
90 }
91
92
93 #else
94
95 #include <ctime>
96
97 MillisecondTime MillisecondTime::current(){
98     return time_from_ticks<std::clock_t>( std::clock(), CLOCKS_PER_SEC );
99 }
100
101
102
103 #endif