fps.h

Go to the documentation of this file.
00001 /* MAINTAINER: Martin */
00002 
00003 #ifndef _FPS_H
00004 #define _FPS_H
00005 
00006 // TODO: implement better algorithm for fps computing
00007 class Fps
00008 {
00009 public:
00014         void init(unsigned int atime)
00015         { 
00016                 mFps = 0.0f; mFrameStamp = mFramesRendered = 0;
00017                 mTimeStamp = atime;
00018                 mUpdateTimeTreshold = DEFAULT_FPS_UPDATE_THRESHOLD;
00019         }
00020 
00024         void onFrameRendered(void)
00025         { ++mFramesRendered; }
00026 
00034         bool update(unsigned int atime)
00035         {
00036                 // overflow check
00037                 if (atime < mTimeStamp){
00038                         // skip one period
00039                         mFrameStamp = mFramesRendered;
00040                         mTimeStamp = atime;
00041                         return false;
00042                 }
00043 
00044                 atime -= mTimeStamp; // delta-time
00045         
00046                 if (atime >= getTreshold())
00047                 {
00048                         // if fps overflew, return old fps count
00049                         if (mFramesRendered >= mFrameStamp)
00050                                 mFps = float(1000 * (mFramesRendered - mFrameStamp)) / atime;
00051                         mFrameStamp = mFramesRendered;
00052                         mTimeStamp += atime;
00053                         return true;
00054                 }
00055                 return false;
00056         }
00057         
00062         unsigned int getTreshold(void)
00063         { return mUpdateTimeTreshold; }
00064 
00069         void setTreshold(unsigned int treshold_ms)
00070         { mUpdateTimeTreshold = treshold_ms; }
00071 
00076         unsigned int get(void)
00077         { return (unsigned int)mFps; }
00078 
00079 private:
00080         unsigned int mFramesRendered;           
00081         unsigned int mTimeStamp;                        
00082         unsigned int mFrameStamp;                       
00083         unsigned int mUpdateTimeTreshold;       
00084         float mFps;                                                     
00085 
00086 public:
00087         static const unsigned int DEFAULT_FPS_UPDATE_THRESHOLD = 100; 
00088 };
00089 /*
00090 class Fps2
00091 {
00092 public:
00093         Fps2(int bufferSize)
00094                 : mTimeStamps(bufferSize)
00095         { 
00096                 clear();
00097         }
00098         
00099         void clear()
00100         {
00101                 mCounter = mTimeStamps.size();  // how many buffer felds to fill
00102                 mIndex = 0;                                             // start at zero index
00103                 mTotal = 0;                                             // set sum of the buffer to zero
00104                 mFps = 0;                                               // reset fps
00105         }
00106 
00107         void onFrameRendered(unsigned int atime)
00108         {
00109                 int size = mTimeStamps.size();
00110                 int delta = atime - mTimeStamps[mIndex];        // delta time
00111                 mIndex = (mIndex + 1) % size;                           // shift head to tail
00112                 mTotal += delta;                                                        // add delta to total
00113 
00114                 // is the buffer full?
00115                 if (!mCounter)
00116                         mTotal -= mTimeStamps[mIndex];  // full -> subtract tail from total
00117                 else {
00118                         if (mCounter == size){ // the first time
00119                                 mTotal -= delta;
00120                         }
00121                         --mCounter;
00122                 }
00123                 
00124                 // set new time stamp (removes tail) and compute average fps
00125                 mTimeStamps[mIndex] = atime;
00126                 mFps = (mTotal > 0) ? (size - mCounter) / mTotal : 0; 
00127                 
00128                 mPreviousTime = atime;
00129         }
00130 
00131         unsigned int get(void)
00132         { return (unsigned int)mFps; }
00133 
00134 private:
00135         float mFps;                                                     ///< \brief the number of frames per second
00136         std::vector<unsigned int> mTimeStamps;
00137         int mIndex, mCounter, mPreviousTime;
00138         
00139 };
00140 */
00141 
00142 #endif

Generated on Wed Apr 12 13:55:28 2006 for bjs by  doxygen 1.4.5