00001 #include "frame.h" 00002 00015 #include <cstdio> 00016 using namespace std; 00017 00018 GltFrameRate::GltFrameRate(const int sampleSize) 00019 : _frames(0), 00020 _step(0.200), 00021 _lastFrameRate(0.0), 00022 _lastFrameTime(0.0), 00023 _buffer(sampleSize) 00024 { 00025 _lastCalc = _timer.elapsed(); 00026 } 00027 00028 GltFrameRate::~GltFrameRate() 00029 { 00030 } 00031 00032 GltFrameRate & 00033 GltFrameRate::operator++() 00034 { 00035 _frames++; 00036 _buffer.push_back(_timer.elapsed()); 00037 00038 // Recalculate frame rate and frame time 00039 // if we have sufficient samples and 00040 // enough time has elapsed. 00041 00042 if (_buffer.size()>=2) 00043 { 00044 if ((_buffer.back()-_lastCalc)>=_step) 00045 { 00046 _lastCalc = _buffer.back(); 00047 _lastFrameTime = double(_buffer.back()-_buffer.front())/double(_buffer.size()-1); 00048 _lastFrameRate = 1.0/_lastFrameTime; 00049 } 00050 } 00051 00052 return *this; 00053 } 00054 00055 double GltFrameRate::elapsedTime() const { return _timer.elapsed(); } 00056 int GltFrameRate::totalFrames() const { return _frames; } 00057 00058 double GltFrameRate::frameRate() const { return _lastFrameRate; } 00059 double GltFrameRate::frameTime() const { return _lastFrameTime; } 00060 00061 std::string 00062 GltFrameRate::summary() const 00063 { 00064 char buffer[1024]; 00065 sprintf 00066 ( 00067 buffer, 00068 "%3.0lf fps", 00069 frameRate() 00070 ); 00071 return buffer; 00072 } 00073 00074 std::string 00075 GltFrameRate::detailed() const 00076 { 00077 char buffer[1024]; 00078 sprintf 00079 ( 00080 buffer, 00081 "%5.3lf sec %3.0lf fps", 00082 frameTime(), 00083 frameRate() 00084 ); 00085 return buffer; 00086 } 00087