| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "BsTimer.h"
- #include "BsBitwise.h"
- #ifndef WIN32_LEAN_AND_MEAN
- # define WIN32_LEAN_AND_MEAN
- #endif
- #if !defined(NOMINMAX) && defined(_MSC_VER)
- # define NOMINMAX // Required to stop windows.h messing up std::min
- #endif
- #include "windows.h"
- namespace BansheeEngine
- {
- struct Timer::Data
- {
- clock_t zeroClock;
- LARGE_INTEGER startTime;
- LARGE_INTEGER frequency;
- };
- Timer::Timer()
- {
- m = bs_new<Data>();
- reset();
- }
- Timer::~Timer()
- {
- bs_delete(m);
- }
- void Timer::reset()
- {
- QueryPerformanceFrequency(&m->frequency);
- QueryPerformanceCounter(&m->startTime);
- m->zeroClock = clock();
- }
- unsigned long Timer::getMilliseconds()
- {
- LARGE_INTEGER curTime;
- QueryPerformanceCounter(&curTime);
- LONGLONG newTime = curTime.QuadPart - m->startTime.QuadPart;
-
- // Scale by 1000 for milliseconds
- unsigned long newTicks = (unsigned long)(1000 * newTime / m->frequency.QuadPart);
- return newTicks;
- }
- unsigned long Timer::getStartMs() const
- {
- unsigned long newTicks = (unsigned long)(1000 * m->startTime.QuadPart / m->frequency.QuadPart);
- return newTicks;
- }
- unsigned long Timer::getMicroseconds()
- {
- LARGE_INTEGER curTime;
- QueryPerformanceCounter(&curTime);
- LONGLONG newTime = curTime.QuadPart - m->startTime.QuadPart;
-
- // Scale by 1000000 for microseconds
- unsigned long newMicro = (unsigned long)(1000000 * newTime / m->frequency.QuadPart);
- return newMicro;
- }
- unsigned long Timer::getMillisecondsCPU()
- {
- clock_t newClock = clock();
- return (unsigned long)((float)(newClock - m->zeroClock) / ((float)CLOCKS_PER_SEC / 1000.0f));
- }
- unsigned long Timer::getMicrosecondsCPU()
- {
- clock_t newClock = clock();
- return (unsigned long)((float)(newClock - m->zeroClock) / ((float)CLOCKS_PER_SEC / 1000000.0f));
- }
- }
|