Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

XFuFPSCount.cpp

Go to the documentation of this file.
00001 /*! \file 
00002  * X-Forge Util <br>
00003  * Copyright 2000-2003 Fathammer Ltd
00004  * 
00005  * \brief Frame rate counter class
00006  * 
00007  * $Id: XFuFPSCount.cpp,v 1.5 2003/08/12 13:34:08 lars Exp $
00008  * $Date: 2003/08/12 13:34:08 $
00009  * $Revision: 1.5 $
00010  */
00011 
00012 #include <xfcore/XFcCore.h>
00013 #include <xfutil/XFuFPSCount.h>
00014 
00015 XFuFPSCount::XFuFPSCount()
00016 {
00017     mTicks = NULL;
00018     mTickCount = 0;
00019     mCurrentTick = 0;
00020 }
00021 
00022 XFuFPSCount::~XFuFPSCount()
00023 {
00024     delete[] mTicks;
00025 }
00026 
00027 
00028 XFuFPSCount * XFuFPSCount::create(INT32 aFrameInterval)
00029 {
00030     XFuFPSCount * t = new XFuFPSCount;
00031     
00032     if (t == NULL) 
00033         return NULL;
00034     
00035     // Minimum number of tick stamps is 2.
00036     if (aFrameInterval < 2) 
00037         aFrameInterval = 2;
00038 
00039     t->mTickCount = aFrameInterval;
00040     
00041     t->mTicks = new INT32[aFrameInterval];
00042     
00043     if (t->mTicks == NULL)
00044     {
00045         delete t;
00046         return NULL;
00047     }
00048 
00049     INT32 i;
00050     for (i = 0; i < aFrameInterval; i++)
00051         t->mTicks[i] = 0xffffff;
00052 
00053     return t;
00054 }
00055     
00056 void XFuFPSCount::tick()
00057 {
00058     mCurrentTick++;
00059     if (mCurrentTick >= mTickCount)
00060         mCurrentTick = 0;
00061     mTicks[mCurrentTick] = XFcCore::getTick();
00062 }
00063 
00064 REAL XFuFPSCount::getFPS()
00065 {
00066     INT32 v = (mCurrentTick + 1);
00067     if (v >= mTickCount) v = 0;
00068     INT32 delta = mTicks[mCurrentTick] - mTicks[v];
00069     if (mTickCount < 2)
00070         return 0;
00071     if (delta < 1)
00072         return 0; // actually, this should be 'infinite'
00073     return REALi(1000) / ((REAL)(delta) / (REAL)(mTickCount - 1));
00074 }
00075 
00076 

   
X-Forge Documentation
Confidential
Copyright © 2002-2003 Fathammer
   
Documentation generated
with doxygen
by Dimitri van Heesch