summaryrefslogtreecommitdiffstats
path: root/headtrack_stereo_demo/src/ticktimer.h
blob: e577255584d99051d9296131895cc52213b7d07e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#ifndef _TICKTIMER_H
#define _TICKTIMER_H

#include <ctime>
#include <iostream>

class TickTimer
{
public:
  TickTimer(double f_dUpdateDelta)
  {
    m_dUpdateDelta = f_dUpdateDelta;
    m_iNrOfTicks = 0;
    m_dTicksPS = m_dRawTicksPS = m_dAvgTicksPS = m_dRawAvgTicksPS = 0.0;
  }

  void tick()
  {
    //DWORD  l_CurClock = timeGetTime();
    time_t  l_CurClock = clock();
    if (m_iNrOfTicks == 0)
    {
      m_FirstClock = m_LastClock = l_CurClock;
    }
        
    //update the ticks per second, based on the last tick period
    m_dRawTicksPS = (double)CLOCKS_PER_SEC / (double)(l_CurClock - m_LastClock);
    //m_dRawTicksPS = 1000.0 / (double)(l_CurClock - m_LastClock);
    double delta = (m_dRawTicksPS - m_dTicksPS);
    if ( (delta >= m_dUpdateDelta) || (delta <= -m_dUpdateDelta) )
      m_dTicksPS = m_dRawTicksPS;

    m_LastClock = l_CurClock;

    //update the ticks per second, based on the average tick period
    m_iNrOfTicks++;
    m_dRawAvgTicksPS = (double)m_iNrOfTicks/((double)(m_LastClock - m_FirstClock)/(double)CLOCKS_PER_SEC);
    //m_dRawAvgTicksPS = (double)m_iNrOfTicks/((double)(m_LastClock - m_FirstClock)/1000.0);
    delta = (m_dRawAvgTicksPS - m_dAvgTicksPS);
    if ( (delta >= m_dUpdateDelta) || (delta <= -m_dUpdateDelta) )
      m_dAvgTicksPS = m_dRawAvgTicksPS;
  }

  inline double getTicksPerSecond() { return m_dTicksPS; }
  inline double getRawTicksPerSecond() { return m_dRawTicksPS; }
  inline double getAvgTicksPerSecond() { return m_dAvgTicksPS; }
  inline double getRawAvgTicksPerSecond() { return m_dRawAvgTicksPS; }

private:
  int     m_iNrOfTicks;
  double  m_dUpdateDelta,
          m_dTicksPS,
          m_dRawTicksPS,
          m_dAvgTicksPS,
          m_dRawAvgTicksPS;
  clock_t m_FirstClock,
          m_LastClock;
  /*DWORD   m_FirstClock,
          m_LastClock;*/
};

#endif //_TICKTIMER_H