use crate::{SuspendUnawareInstant, NANOS_PER_SECOND};
use windows_sys::Win32;
const WINDOWS_PERF_INTERVAL_SIZE_NS: u64 = 100;
fn query_unbiased_interrupt_time_precise() -> u64 {
let mut res: u64 = 0;
unsafe {
Win32::System::WindowsProgramming::QueryUnbiasedInterruptTimePrecise(&mut res);
}
res
}
pub fn now() -> SuspendUnawareInstant {
let nanos_per_second_u64 = NANOS_PER_SECOND as u64;
let nano_intervals = query_unbiased_interrupt_time_precise();
let secs = nano_intervals / ((nanos_per_second_u64) / WINDOWS_PERF_INTERVAL_SIZE_NS);
let nanos = ((nano_intervals % nanos_per_second_u64) * 100) % nanos_per_second_u64;
SuspendUnawareInstant {
secs,
nanos: nanos as u32,
}
}