1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2024-12-14 00:48:44 +01:00
dxvk/src/util/util_time.h

50 lines
1.2 KiB
C
Raw Normal View History

#pragma once
#include <chrono>
#include <cstdint>
2019-11-26 16:05:44 +01:00
#if defined(_WIN32) && !defined(__WINE__)
#include <windows.h>
#endif
namespace dxvk {
2019-11-26 16:05:44 +01:00
#if defined(_WIN32) && !defined(__WINE__)
struct high_resolution_clock {
static constexpr bool is_steady = true;
using rep = int64_t;
using period = std::nano;
using duration = std::chrono::nanoseconds;
using time_point = std::chrono::time_point<high_resolution_clock>;
static inline time_point now() noexcept {
// Keep the frequency static, this doesn't change at all.
static const int64_t freq = get_frequency();
const int64_t counter = get_counter();
const int64_t whole = (counter / freq) * period::den;
const int64_t part = (counter % freq) * period::den / freq;
return time_point(duration(whole + part));
}
static inline int64_t get_frequency() {
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
return freq.QuadPart;
}
static inline int64_t get_counter() {
LARGE_INTEGER count;
QueryPerformanceCounter(&count);
return count.QuadPart;
}
};
#else
2019-11-26 16:05:44 +01:00
using high_resolution_clock = std::chrono::high_resolution_clock;
#endif
}