oa_gateway_bench/
clock.rsuse std::collections::HashMap;
use std::sync::Mutex;
use std::time::Instant;
pub(crate) struct SeqClock {
origin: Instant,
sent_ns: Mutex<HashMap<u64, u64>>,
}
impl SeqClock {
#[must_use]
pub(crate) fn new() -> Self {
Self {
origin: Instant::now(),
sent_ns: Mutex::new(HashMap::new()),
}
}
pub(crate) fn stamp(&self, seq: u64) -> u64 {
let ns = self.origin.elapsed().as_nanos() as u64;
self.sent_ns.lock().expect("seq clock").insert(seq, ns);
ns
}
#[must_use]
pub(crate) fn latency_ns(&self, seq: u64) -> Option<u64> {
let sent = *self.sent_ns.lock().expect("seq clock").get(&seq)?;
Some(self.origin.elapsed().as_nanos() as u64 - sent)
}
#[must_use]
pub(crate) fn sent_ns(&self, seq: u64) -> Option<u64> {
self.sent_ns.lock().expect("seq clock").get(&seq).copied()
}
}