starnix_sync/
atomic_time.rs
1use std::sync::atomic::{AtomicI64, Ordering};
8
9#[derive(Debug, Default)]
11pub struct AtomicMonotonicInstant(AtomicI64);
12
13impl From<zx::MonotonicInstant> for AtomicMonotonicInstant {
14 fn from(t: zx::MonotonicInstant) -> Self {
15 Self::new(t)
16 }
17}
18
19impl AtomicMonotonicInstant {
20 pub fn new(time: zx::MonotonicInstant) -> Self {
22 Self(AtomicI64::new(time.into_nanos()))
23 }
24
25 pub fn load(&self, order: Ordering) -> zx::MonotonicInstant {
27 let Self(atomic_time) = self;
28 zx::Instant::from_nanos(atomic_time.load(order))
29 }
30
31 pub fn store(&self, val: zx::MonotonicInstant, order: Ordering) {
33 let Self(atomic_time) = self;
34 atomic_time.store(val.into_nanos(), order)
35 }
36}