//! Монотонные часы — B §8: lifecycle-таймеры/`Uptime` идут только вперёд, не прыгают при NTP/GPS-синке. //! На Linux `Instant` опирается на `CLOCK_MONOTONIC`. use std::sync::OnceLock; use std::time::Instant; static EPOCH: OnceLock = 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, "монотонные секунды не должны идти назад"); } }