OpenGL ES SDK for Android ARM Developer Center
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Timer.cpp
Go to the documentation of this file.
1 /* Copyright (c) 2012-2017, ARM Limited and Contributors
2  *
3  * SPDX-License-Identifier: MIT
4  *
5  * Permission is hereby granted, free of charge,
6  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation the rights to
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
14  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
16  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
17  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19  */
20 
21 #include "Timer.h"
22 
23 #if defined(_WIN32)
24 
25 #include <cstdio>
26 #include <windows.h>
27 
28 namespace MaliSDK
29 {
30  Timer::Timer()
31  {
32  LARGE_INTEGER l;
33  QueryPerformanceFrequency(&l);
34  invFreq = 1.0f / l.QuadPart;
35  lastInterval = 0.0f;
36  frameCount = 0;
37  lastFpsUpdate = 0.0f;
38  reset();
39  fps = 0.0f;
40  lastTime = 0.0f;
41  }
42 
43  void Timer::reset()
44  {
45  LARGE_INTEGER l;
46  QueryPerformanceCounter(&l);
47  resetStamp = (((double)l.QuadPart) * invFreq);
48  }
49 
50  float Timer::getTime()
51  {
52  LARGE_INTEGER l;
53  QueryPerformanceCounter(&l);
54  return (float)(((double)l.QuadPart) * invFreq - resetStamp);
55  }
56 
57  float Timer::getInterval()
58  {
59  float time = getTime();
60  float interval = time - lastInterval;
61  lastInterval = time;
62  return interval;
63  }
64 
65  float Timer::getFPS()
66  {
67  float time = getTime();
68  frameCount++;
69  if (time-lastFpsUpdate > 1.0f)
70  {
71  fps = (float)frameCount / (time-lastFpsUpdate);
72  lastFpsUpdate = time;
73  frameCount = 0;
74  }
75  return fps;
76  }
77 }
78 #else
79 
80 #include <sys/time.h>
81 
82 namespace MaliSDK
83 {
85  : startTime()
86  , currentTime()
87  , lastIntervalTime(0.0f)
88  , frameCount(0)
89  , fpsTime(0.0f)
90  , fps(0.0f)
91  {
92  startTime.tv_sec = 0;
93  startTime.tv_usec = 0;
94  currentTime.tv_sec = 0;
95  currentTime.tv_usec = 0;
96 
97  reset();
98  }
99 
101  {
102  gettimeofday(&startTime, NULL);
103  lastIntervalTime = 0.0;
104 
105  frameCount = 0;
106  fpsTime = 0.0f;
107  }
108 
110  {
111  gettimeofday(&currentTime, NULL);
112  float seconds = (currentTime.tv_sec - startTime.tv_sec);
113  float milliseconds = (float(currentTime.tv_usec - startTime.tv_usec)) / 1000000.0f;
114  return seconds + milliseconds;
115  }
116 
118  {
119  float time = getTime();
120  float interval = time - lastIntervalTime;
121  lastIntervalTime = time;
122  return interval;
123  }
124 
126  {
127  if (getTime() - fpsTime > 1.0f)
128  {
129  fps = static_cast<float>(frameCount) / (getTime() - fpsTime);
130  frameCount = 0;
131  fpsTime = getTime();
132  }
133  ++frameCount;
134  return fps;
135  }
136 }
137 #endif
138 
139 namespace MaliSDK
140 {
141  bool Timer::isTimePassed(float seconds)
142  {
143  float time = getTime();
144  if (time - lastTime > seconds)
145  {
146  lastTime = time;
147  return true;
148  }
149  return false;
150  }
151 }
Timer()
Default Constructor.
Definition: Timer.cpp:84
float getTime()
Returns the time passed since object creation or since reset() was last called.
Definition: Timer.cpp:109
float getFPS()
Returns the FPS (Frames Per Second).
Definition: Timer.cpp:125
float fps
Definition: Timer.h:41
void reset()
Resets the timer to 0.0f.
Definition: Timer.cpp:100
timeval currentTime
Definition: Timer.h:50
float lastTime
Definition: Timer.h:42
GLfloat GLfloat f
Definition: gl2ext.h:2707
timeval startTime
Definition: Timer.h:49
float getInterval()
Returns the time passed since getInterval() was last called.
Definition: Timer.cpp:117
float lastIntervalTime
Definition: Timer.h:51
float fpsTime
Definition: Timer.h:52
precision highp float
Definition: hiz_cull.cs:37
int frameCount
Definition: Timer.h:40
bool isTimePassed(float seconds=1.0f)
Tests if 'seconds' seconds have passed since reset() or this method was called.
Definition: Timer.cpp:141
uniform float time
Definition: spawn.cs:50