2025-04-27 07:49:33 -04:00

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;
}