Path: blob/main/crates/wasi-common/src/sync/clocks.rs
1693 views
use crate::clocks::{WasiClocks, WasiMonotonicClock, WasiSystemClock};1use cap_std::time::{Duration, Instant, SystemTime};2use cap_std::{AmbientAuthority, ambient_authority};3use cap_time_ext::{MonotonicClockExt, SystemClockExt};45pub struct SystemClock(cap_std::time::SystemClock);67impl SystemClock {8pub fn new(ambient_authority: AmbientAuthority) -> Self {9SystemClock(cap_std::time::SystemClock::new(ambient_authority))10}11}12impl WasiSystemClock for SystemClock {13fn resolution(&self) -> Duration {14self.0.resolution()15}16fn now(&self, precision: Duration) -> SystemTime {17self.0.now_with(precision)18}19}2021pub struct MonotonicClock(cap_std::time::MonotonicClock);22impl MonotonicClock {23pub fn new(ambient_authority: AmbientAuthority) -> Self {24MonotonicClock(cap_std::time::MonotonicClock::new(ambient_authority))25}26}27impl WasiMonotonicClock for MonotonicClock {28fn resolution(&self) -> Duration {29self.0.resolution()30}31fn now(&self, precision: Duration) -> Instant {32self.0.now_with(precision)33}34}3536pub fn clocks_ctx() -> WasiClocks {37WasiClocks::new()38.with_system(SystemClock::new(ambient_authority()))39.with_monotonic(MonotonicClock::new(ambient_authority()))40}414243