home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2006 March / Gamestar_82_2006-03_dvd.iso / DVDStar / Editace / quake4_sdkv10.exe / source / idlib / Timer.h < prev    next >
C/C++ Source or Header  |  2005-11-14  |  4KB  |  197 lines

  1.  
  2. #ifndef __TIMER_H__
  3. #define __TIMER_H__
  4.  
  5. /*
  6. ===============================================================================
  7.  
  8.     Clock tick counter. Should only be used for profiling.
  9.  
  10. ===============================================================================
  11. */
  12.  
  13. class idTimer {
  14. public:
  15.                     idTimer( void );
  16.                     idTimer( double clockTicks );
  17.                     ~idTimer( void );
  18.  
  19.     idTimer            operator+( const idTimer &t ) const;
  20.     idTimer            operator-( const idTimer &t ) const;
  21.     idTimer &        operator+=( const idTimer &t );
  22.     idTimer &        operator-=( const idTimer &t );
  23.  
  24.     void            Start( void );
  25.     void            Stop( void );
  26.     void            Clear( void );
  27.     double            ClockTicks( void ) const;
  28.     double            Milliseconds( void ) const;
  29.  
  30. private:
  31.     static double    base;
  32.     enum            {
  33.                         TS_STARTED,
  34.                         TS_STOPPED
  35.                     } state;
  36.     double            start;
  37.     double            clockTicks;
  38.  
  39.     void            InitBaseClockTicks( void ) const;
  40. };
  41.  
  42. /*
  43. =================
  44. idTimer::idTimer
  45. =================
  46. */
  47. ID_INLINE idTimer::idTimer( void ) {
  48.     state = TS_STOPPED;
  49.     clockTicks = 0.0;
  50. }
  51.  
  52. /*
  53. =================
  54. idTimer::idTimer
  55. =================
  56. */
  57. ID_INLINE idTimer::idTimer( double _clockTicks ) {
  58.     state = TS_STOPPED;
  59.     clockTicks = _clockTicks;
  60. }
  61.  
  62. /*
  63. =================
  64. idTimer::~idTimer
  65. =================
  66. */
  67. ID_INLINE idTimer::~idTimer( void ) {
  68. }
  69.  
  70. /*
  71. =================
  72. idTimer::operator+
  73. =================
  74. */
  75. ID_INLINE idTimer idTimer::operator+( const idTimer &t ) const {
  76.     assert( state == TS_STOPPED && t.state == TS_STOPPED );
  77.     return idTimer( clockTicks + t.clockTicks );
  78. }
  79.  
  80. /*
  81. =================
  82. idTimer::operator-
  83. =================
  84. */
  85. ID_INLINE idTimer idTimer::operator-( const idTimer &t ) const {
  86.     assert( state == TS_STOPPED && t.state == TS_STOPPED );
  87.     return idTimer( clockTicks - t.clockTicks );
  88. }
  89.  
  90. /*
  91. =================
  92. idTimer::operator+=
  93. =================
  94. */
  95. ID_INLINE idTimer &idTimer::operator+=( const idTimer &t ) {
  96.     assert( state == TS_STOPPED && t.state == TS_STOPPED );
  97.     clockTicks += t.clockTicks;
  98.     return *this;
  99. }
  100.  
  101. /*
  102. =================
  103. idTimer::operator-=
  104. =================
  105. */
  106. ID_INLINE idTimer &idTimer::operator-=( const idTimer &t ) {
  107.     assert( state == TS_STOPPED && t.state == TS_STOPPED );
  108.     clockTicks -= t.clockTicks;
  109.     return *this;
  110. }
  111.  
  112. /*
  113. =================
  114. idTimer::Start
  115. =================
  116. */
  117. ID_INLINE void idTimer::Start( void ) {
  118.     assert( state == TS_STOPPED );
  119.     state = TS_STARTED;
  120.     start = idLib::sys->GetClockTicks();
  121. }
  122.  
  123. /*
  124. =================
  125. idTimer::Stop
  126. =================
  127. */
  128. ID_INLINE void idTimer::Stop( void ) {
  129.     assert( state == TS_STARTED );
  130.     clockTicks += idLib::sys->GetClockTicks() - start;
  131.     if ( base < 0.0 ) {
  132.         InitBaseClockTicks();
  133.     }
  134.     if ( clockTicks > base ) {
  135.         clockTicks -= base;
  136.     }
  137.     state = TS_STOPPED;
  138. }
  139.  
  140. /*
  141. =================
  142. idTimer::Clear
  143. =================
  144. */
  145. ID_INLINE void idTimer::Clear( void ) {
  146.     clockTicks = 0.0;
  147. }
  148.  
  149. /*
  150. =================
  151. idTimer::ClockTicks
  152. =================
  153. */
  154. ID_INLINE double idTimer::ClockTicks( void ) const {
  155.     assert( state == TS_STOPPED );
  156.     return clockTicks;
  157. }
  158.  
  159. /*
  160. =================
  161. idTimer::Milliseconds
  162. =================
  163. */
  164. ID_INLINE double idTimer::Milliseconds( void ) const {
  165.     assert( state == TS_STOPPED );
  166.     return clockTicks / ( idLib::sys->ClockTicksPerSecond() * 0.001 );
  167. }
  168.  
  169.  
  170. /*
  171. ===============================================================================
  172.  
  173.     Report of multiple named timers.
  174.  
  175. ===============================================================================
  176. */
  177.  
  178. class idTimerReport {
  179. public:
  180.                     idTimerReport( void );
  181.                     ~idTimerReport( void );
  182.  
  183.     void            SetReportName( const char *name );
  184.     int                AddReport( const char *name );
  185.     void            Clear( void );
  186.     void            Reset( void );
  187.     void            PrintReport( void );
  188.     void            AddTime( const char *name, idTimer *time );
  189.  
  190. private:
  191.     idList<idTimer*>timers;
  192.     idStrList        names;
  193.     idStr            reportName;
  194. };
  195.  
  196. #endif /* !__TIMER_H__ */
  197.