mirror of
https://github.com/YutaItoh/3D-Eye-Tracker.git
synced 2025-09-26 23:39:12 +08:00
104 lines
1.9 KiB
C++
104 lines
1.9 KiB
C++
#ifndef __PUPIL_TRACKER_TIMER_H__
|
|
#define __PUPIL_TRACKER_TIMER_H__
|
|
|
|
#include "high_resolution_timer.hpp"
|
|
|
|
|
|
namespace eye_tracker {
|
|
|
|
class timer
|
|
{
|
|
public:
|
|
timer() :
|
|
m_timer(),
|
|
m_elapsed(0.0), m_paused(false)
|
|
{
|
|
}
|
|
|
|
void pause()
|
|
{
|
|
if (!m_paused)
|
|
{
|
|
m_elapsed += m_timer.elapsed();
|
|
m_paused = true;
|
|
}
|
|
}
|
|
void resume()
|
|
{
|
|
if (m_paused)
|
|
{
|
|
m_timer.restart();
|
|
m_paused = false;
|
|
}
|
|
}
|
|
|
|
double elapsed() const
|
|
{
|
|
if (m_paused)
|
|
return m_elapsed;
|
|
else
|
|
return m_elapsed + m_timer.elapsed();
|
|
}
|
|
|
|
struct pause_guard
|
|
{
|
|
pause_guard(timer& t) : m_t(t)
|
|
{
|
|
m_t.pause();
|
|
}
|
|
~pause_guard()
|
|
{
|
|
m_t.resume();
|
|
}
|
|
operator bool() const { return false; }
|
|
|
|
timer& m_t;
|
|
};
|
|
|
|
protected:
|
|
boost::high_resolution_timer m_timer;
|
|
double m_elapsed;
|
|
|
|
bool m_paused;
|
|
};
|
|
|
|
|
|
#define PAUSE_TIMER(t) if(timer::pause_guard const& _timer_pause_guard_(t)) {} else
|
|
|
|
class FrameRateCounter
|
|
{
|
|
public:
|
|
FrameRateCounter()
|
|
:frame_count_(0), kSkipFrameCount(50), fps_(0.0) {
|
|
timer_.pause();
|
|
}
|
|
~FrameRateCounter(){}
|
|
double fps(){ return fps_; }
|
|
size_t frame_count() { return frame_count_; }
|
|
void count(){
|
|
if (frame_count_++ == kSkipFrameCount){
|
|
timer_.resume();/// Wait measuring time until the process gets stabilized
|
|
}
|
|
fps_ = (frame_count_ - kSkipFrameCount) / timer_.elapsed();
|
|
return;
|
|
}
|
|
protected:
|
|
// Local variables initialized at the constructor
|
|
double time_total;
|
|
size_t frame_count_;
|
|
double fps_;
|
|
|
|
// Local variables
|
|
timer timer_;
|
|
const size_t kSkipFrameCount;
|
|
|
|
private:
|
|
// Prevent copying
|
|
FrameRateCounter(const FrameRateCounter& other);
|
|
FrameRateCounter& operator=(const FrameRateCounter& rhs);
|
|
};
|
|
|
|
}
|
|
|
|
#endif // __PUPIL_TRACKER_TIMER_H__
|