42 m_nDelayFrames = nDelayFrames;
58 m_fMinCycleTimeMS = FLT_MAX;
59 m_fMaxCycleTimeMS = -FLT_MAX;
66 int nCycleTime = calculateTimeDiff(m_nCycleSec, m_nCycleUSec,
true);
69 updateMembers(nCycleTime);
90 bool bValidTime = (m_nUpdates != 0);
91 int nOverallCycleTime = (1.0f / fFrameRate) * 1000000;
96 int nWantedUSec = (1.0f / fFrameRate) * 1000000;
103 nTimeDiff = calculateTimeDiff(m_nCycleSec, m_nCycleUSec);
105 }
while (nTimeDiff < nWantedUSec);
108 nOverallCycleTime = calculateTimeDiff(m_nCycleSec, m_nCycleUSec,
true);
111 calculateTimeDiff(m_nCycleSec, m_nCycleUSec,
true);
112 updateMembers(nOverallCycleTime);
124 return m_nUpdates > m_nDelayFrames;
136 if (m_nUpdates <= m_nDelayFrames)
147 if (m_nUpdates <= 10)
152 float fMeanTimeMS = 0.0f;
154 for (
int i = 0; i < 10; i++)
156 fMeanTimeMS += m_fLastCycleTimesMS[i];
159 return fMeanTimeMS / 10;
170 return m_fMinCycleTimeMS;
181 return m_fMaxCycleTimeMS;
188 FPSCounter::updateMembers(
int nCycleTime)
191 bool bValidTime = (m_nUpdates != 0);
194 recalculateFPS(nCycleTime);
198 recalculateStats(nCycleTime);
203 FPSCounter::recalculateFPS(
int nCycleUSec)
205 m_nIntervalTime += nCycleUSec;
208 if ((m_nUpdates % m_nDelayFrames == 0) && (m_nUpdates != 0))
211 float fTimeDiff = m_nIntervalTime / 1000000.0f;
212 m_fFPS = (1.0f / fTimeDiff) * m_nDelayFrames;
218 FPSCounter::recalculateStats(
int nCycleUSec)
220 float fTimeMS =
float(nCycleUSec) / 1000.0f;
222 if (fTimeMS < m_fMinCycleTimeMS)
224 m_fMinCycleTimeMS = fTimeMS;
227 if (fTimeMS > m_fMaxCycleTimeMS)
229 m_fMaxCycleTimeMS = fTimeMS;
232 m_fLastCycleTimesMS[(m_nUpdates - 1) % 10] = fTimeMS;
237 FPSCounter::calculateTimeDiff(
long& nSec,
long& nUSec,
bool bSetTime)
240 gettimeofday(&t,
nullptr);
241 int nTimeDiff = (t.tv_sec - nSec) * 1000000 + ((
int)t.tv_usec - nUSec);
void assureFPS(float fFrameRate)
Synchronize to FPS.
float getMeanCycleTimeMS()
Get mean cycle time over last 10 frames.
void recalculate()
recalculates the FPS statistics
float getMinCycleTimeMS()
Get minimum cycle time since start.
int getUpdates()
Get number of updates.
float getFPS()
Get frames per second.
FPSCounter(int nDelayFrames=10)
Constructs a new FPS counter.
void update()
Updates the FPS counter.
void reset()
Resets the FPS counter to its initial state.
bool getValid()
Get if calculated values are valid.
float getMaxCycleTimeMS()
Get maximum cycle time since start.