Subversion Repositories gelsvn

Rev

Blame | Last modification | View Log | RSS feed

#ifndef TIMER_H
#define TIMER_H

#include <ctime>

class Timer
{
 public:
  Timer() : t1(0), t2(0) { }
  
  void start()
  {
    t1 = std::clock();
  }

  double split()
  {
    return (std::clock() - t1) / static_cast<double>(CLOCKS_PER_SEC);
  }

  void stop()
  {
    t2 = std::clock();
  }
  
  double get_time()
  {
    return (t2 - t1) / static_cast<double>(CLOCKS_PER_SEC);
  }

 private:
  int t1;
  int t2;
};

class FrameRateTimer : public Timer
{
 public:
  FrameRateTimer(int avg = 40) : average(avg), fps(0.0) { }

  void set_average(int avg) 
  {
    average = avg;
  }

  double get_fps()
  {
    one_frame();
    return fps;
  }

 private:
  int average;
  double fps;

  void one_frame()
  {
    static int i = 0;

    if(i >= average)
    {
      stop();
      fps = average / get_time();
      i = 0;
    }
    if(i == 0)
      start();

    i++; 
  }
};

#endif