#include "FrameCounter.h" #include "Timer.h" namespace LifeCore { FrameCounter::FrameCounter() :fps(0.0f), frame_range(50), avg_fps(0.0f), time_elapsed(0.0f), frame_id(0), time_elapsed_avg(0.0f), buffer_pos(0) { timer = new Timer(); prev_time = new float[frame_range]; for(int i = 0; i < frame_range; i++) prev_time[i] = 0.0f; } FrameCounter::~FrameCounter() { delete[] prev_time; } float FrameCounter::GetFps() { return fps; } float FrameCounter::GetFpsAvg() { return avg_fps; } float FrameCounter::GetTimeElapled() { return time_elapsed; } float FrameCounter::GetTimeElapsedAvg() { return time_elapsed_avg; } void FrameCounter::SetFrameRange(int range) { frame_range = range; buffer_pos = 0; if(prev_time!=0) delete[] prev_time; prev_time = new float[frame_range]; for(int i = 0; i < frame_range; i++) prev_time[i] = 0.0f; } int FrameCounter::GetFrameId() { return frame_id; } void FrameCounter::OnFrameEnd() { timer->Stop(); //get frame time elapsed time_elapsed = timer->getTimeElapsed(); //store time elapsed in buffer prev_time[frame_id % frame_range] = time_elapsed; //fix offset buffer_pos++; if(buffer_pos >= frame_range) buffer_pos = 0; fps = 1.0f / time_elapsed; //compute average time elapsed float sum = 0.0f; for(int i = 0; i < frame_range; i++) sum += prev_time[i]; time_elapsed_avg = sum / (float)frame_range; avg_fps = 1.0f / time_elapsed_avg; frame_id++; timer->Start(); } }