| #include "TimeHelpers.h" |
| |
| #define WIN32_LEAN_AND_MEAN |
| #include <windows.h> |
| |
| namespace UnitTest { |
| |
| Timer::Timer() |
| : m_threadHandle(::GetCurrentThread()) |
| , m_startTime(0) |
| { |
| #if defined(UNITTEST_WIN32) && (_MSC_VER == 1200) // VC6 doesn't have DWORD_PTR |
| typedef unsigned long DWORD_PTR; |
| #endif |
| |
| DWORD_PTR systemMask; |
| ::GetProcessAffinityMask(GetCurrentProcess(), &m_processAffinityMask, &systemMask); |
| ::SetThreadAffinityMask(m_threadHandle, 1); |
| ::QueryPerformanceFrequency(reinterpret_cast< LARGE_INTEGER* >(&m_frequency)); |
| ::SetThreadAffinityMask(m_threadHandle, m_processAffinityMask); |
| } |
| |
| void Timer::Start() |
| { |
| m_startTime = GetTime(); |
| } |
| |
| double Timer::GetTimeInMs() const |
| { |
| __int64 const elapsedTime = GetTime() - m_startTime; |
| double const seconds = double(elapsedTime) / double(m_frequency); |
| return seconds * 1000.0; |
| } |
| |
| __int64 Timer::GetTime() const |
| { |
| LARGE_INTEGER curTime; |
| ::SetThreadAffinityMask(m_threadHandle, 1); |
| ::QueryPerformanceCounter(&curTime); |
| ::SetThreadAffinityMask(m_threadHandle, m_processAffinityMask); |
| return curTime.QuadPart; |
| } |
| |
| void TimeHelpers::SleepMs(int ms) |
| { |
| ::Sleep(ms); |
| } |
| |
| } |