summaryrefslogtreecommitdiff
path: root/third_party/crunch/example2/timer.h
blob: 636b731d88eced9661888fa074a36274acb6542a (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
// File: timer.h
// A simple high-precision, platform independent timer class.
#pragma once

typedef unsigned long long timer_ticks;

class timer
{
public:
   timer();
   timer(timer_ticks start_ticks);

   void start();
   void start(timer_ticks start_ticks);

   void stop();

   double get_elapsed_secs() const;
   inline double get_elapsed_ms() const { return get_elapsed_secs() * 1000.0f; }
   timer_ticks get_elapsed_us() const;

   static void init();
   static inline timer_ticks get_ticks_per_sec() { return g_freq; }
   static timer_ticks get_init_ticks();
   static timer_ticks get_ticks();
   static double ticks_to_secs(timer_ticks ticks);
   static inline double ticks_to_ms(timer_ticks ticks) { return ticks_to_secs(ticks) * 1000.0f; }
   static inline double get_secs() { return ticks_to_secs(get_ticks()); }
   static inline double get_ms() { return ticks_to_ms(get_ticks()); }

private:
   static timer_ticks g_init_ticks;
   static timer_ticks g_freq;
   static double g_inv_freq;

   timer_ticks m_start_time;
   timer_ticks m_stop_time;

   bool m_started : 1;
   bool m_stopped : 1;
};