Files
shturman/crates/shturman-common/src/clock.rs
T
2026-06-24 11:55:47 +03:00

26 lines
861 B
Rust

//! Монотонные часы — B §8: lifecycle-таймеры/`Uptime` идут только вперёд, не прыгают при NTP/GPS-синке.
//! На Linux `Instant` опирается на `CLOCK_MONOTONIC`.
use std::sync::OnceLock;
use std::time::Instant;
static EPOCH: OnceLock<Instant> = OnceLock::new();
/// Секунды от первого обращения в процессе (монотонно). Достаточно для стаб-`Uptime` (v0).
pub fn monotonic_secs() -> u64 {
let epoch = *EPOCH.get_or_init(Instant::now);
epoch.elapsed().as_secs()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn non_decreasing() {
let a = monotonic_secs();
let b = monotonic_secs();
assert!(b >= a, "монотонные секунды не должны идти назад");
}
}