diff options
Diffstat (limited to 'third_party/rust/zeitstempel/src/linux.rs')
-rw-r--r-- | third_party/rust/zeitstempel/src/linux.rs | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/third_party/rust/zeitstempel/src/linux.rs b/third_party/rust/zeitstempel/src/linux.rs new file mode 100644 index 0000000000..e8fb8500ca --- /dev/null +++ b/third_party/rust/zeitstempel/src/linux.rs @@ -0,0 +1,24 @@ +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) +} + +/// The time from a clock that cannot be set +/// and represents monotonic time since some unspecified starting point, +/// that also includes any time that the system is suspended. +/// +/// See [`clock_gettime`]. +/// +/// [`clock_gettime`]: https://manpages.debian.org/buster/manpages-dev/clock_gettime.3.en.html +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) +} |