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

}
