94 lines
1.7 KiB
C++
94 lines
1.7 KiB
C++
#include "PassportAssert.hpp"
|
|
#include "PassportTimer.hpp"
|
|
|
|
void PassportTimer::setToNow(PassportTime& t)
|
|
{
|
|
#ifdef SOLARIS
|
|
gettimeofday(&t, NULL);
|
|
#elif defined(WIN32)
|
|
bool worked = (QueryPerformanceCounter(&t) != 0);
|
|
PassportAssert(worked);
|
|
#else
|
|
gettimeofday(&t);
|
|
#endif
|
|
}
|
|
|
|
double PassportTimer::difference(PassportTime& t1,
|
|
PassportTime& t2)
|
|
{
|
|
#ifndef WIN32
|
|
double sec = double(t1.tv_sec - t2.tv_sec);
|
|
double usec = double(t1.tv_usec - t2.tv_usec);
|
|
|
|
usec /= double(1000000.0);
|
|
|
|
return sec + usec;
|
|
#else
|
|
|
|
// ------------------------
|
|
// calculate the difference
|
|
LONGLONG diff = t1.QuadPart - t2.QuadPart;
|
|
|
|
// -----------------------
|
|
// get the number of ticks
|
|
// per second.
|
|
PassportTime freq;
|
|
bool worked = (QueryPerformanceFrequency(&freq) != 0);
|
|
PassportAssert(worked);
|
|
|
|
// -----------------------
|
|
// return the difference
|
|
// in seconds
|
|
return (double(diff) / double(freq.QuadPart));
|
|
#endif
|
|
}
|
|
|
|
PassportTimer::PassportTimer ( )
|
|
:mRunning(false), mCumulativeTime(double(0.0))
|
|
{
|
|
//empty
|
|
}
|
|
|
|
void PassportTimer::start ( )
|
|
{
|
|
if (mRunning)
|
|
return;
|
|
|
|
mRunning = true;
|
|
setToNow(mStartTime);
|
|
};
|
|
|
|
double PassportTimer::elapsedTime()
|
|
{
|
|
if (mRunning)
|
|
{
|
|
PassportTime now;
|
|
setToNow(now);
|
|
return difference(now, mStartTime) +
|
|
mCumulativeTime;
|
|
}
|
|
else
|
|
return mCumulativeTime;
|
|
}
|
|
|
|
void PassportTimer::stop ( )
|
|
{
|
|
if (!mRunning)
|
|
return;
|
|
|
|
mRunning = false;
|
|
PassportTime now;
|
|
setToNow(now);
|
|
mCumulativeTime += difference(now, mStartTime);
|
|
};
|
|
|
|
void PassportTimer::reset ( )
|
|
{
|
|
stop();
|
|
mCumulativeTime = double(0.0);
|
|
};
|
|
|
|
void PassportTimer_deletor(void *obj)
|
|
{ delete (PassportTimer *) obj;
|
|
}
|