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);