#pragma once
#include <chrono>
#include <cstdint>
namespace ableton
{
namespace platforms
{
namespace windows
{
struct Clock
{
using Ticks = std::int64_t;
using Micros = std::chrono::microseconds;
Clock()
{
LARGE_INTEGER frequency;
QueryPerformanceFrequency(&frequency);
mTicksToMicros = 1.0e6 / static_cast<double>(frequency.QuadPart);
}
Micros ticksToMicros(const Ticks ticks) const
{
return Micros{llround(mTicksToMicros * static_cast<double>(ticks))};
}
Ticks microsToTicks(const Micros micros) const
{
return static_cast<Ticks>(static_cast<double>(micros.count()) / mTicksToMicros);
}
Ticks ticks() const
{
LARGE_INTEGER count;
QueryPerformanceCounter(&count);
return count.QuadPart;
}
std::chrono::microseconds micros() const { return ticksToMicros(ticks()); }
double mTicksToMicros;
};
} } }