const NS_PER_S: u64 = 1_000_000_000;
fn timespec_to_ns(ts: libc::timespec) -> u64 {
(ts.tv_sec as u64) * NS_PER_S + (ts.tv_nsec as u64)
}
pub fn now_including_suspend() -> u64 {
let mut ts = libc::timespec {
tv_sec: 0,
tv_nsec: 0,
};
unsafe {
libc::clock_gettime(libc::CLOCK_BOOTTIME, &mut ts);
}
timespec_to_ns(ts)
}
pub fn now_awake() -> u64 {
let mut ts = libc::timespec {
tv_sec: 0,
tv_nsec: 0,
};
#[cfg(any(target_os = "linux", target_os = "android"))]
let clock = libc::CLOCK_MONOTONIC;
#[cfg(target_os = "freebsd")]
let clock = libc::CLOCK_UPTIME;
unsafe {
libc::clock_gettime(clock, &mut ts);
}
timespec_to_ns(ts)
}