Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/crates/wasi-common/src/sync/clocks.rs
1693 views
1
use crate::clocks::{WasiClocks, WasiMonotonicClock, WasiSystemClock};
2
use cap_std::time::{Duration, Instant, SystemTime};
3
use cap_std::{AmbientAuthority, ambient_authority};
4
use cap_time_ext::{MonotonicClockExt, SystemClockExt};
5
6
pub struct SystemClock(cap_std::time::SystemClock);
7
8
impl SystemClock {
9
pub fn new(ambient_authority: AmbientAuthority) -> Self {
10
SystemClock(cap_std::time::SystemClock::new(ambient_authority))
11
}
12
}
13
impl WasiSystemClock for SystemClock {
14
fn resolution(&self) -> Duration {
15
self.0.resolution()
16
}
17
fn now(&self, precision: Duration) -> SystemTime {
18
self.0.now_with(precision)
19
}
20
}
21
22
pub struct MonotonicClock(cap_std::time::MonotonicClock);
23
impl MonotonicClock {
24
pub fn new(ambient_authority: AmbientAuthority) -> Self {
25
MonotonicClock(cap_std::time::MonotonicClock::new(ambient_authority))
26
}
27
}
28
impl WasiMonotonicClock for MonotonicClock {
29
fn resolution(&self) -> Duration {
30
self.0.resolution()
31
}
32
fn now(&self, precision: Duration) -> Instant {
33
self.0.now_with(precision)
34
}
35
}
36
37
pub fn clocks_ctx() -> WasiClocks {
38
WasiClocks::new()
39
.with_system(SystemClock::new(ambient_authority()))
40
.with_monotonic(MonotonicClock::new(ambient_authority()))
41
}
42
43