prns_runtime_embassy/manifold/
timebase.rs1use embassy_time::Instant as EmbassyInstant;
2
3use crate::engine::InstantMillis;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub struct EmbassyTimebase {
7 raw_start: EmbassyInstant,
8 logical_start: InstantMillis,
9}
10
11impl EmbassyTimebase {
12 pub fn capture_now() -> Self {
13 let raw_start = EmbassyInstant::now();
14 Self {
15 raw_start,
16 logical_start: InstantMillis(raw_start.as_millis()),
17 }
18 }
19
20 pub fn start_at(logical_start: InstantMillis) -> Self {
21 Self {
22 raw_start: EmbassyInstant::now(),
23 logical_start,
24 }
25 }
26
27 pub fn now(&self) -> InstantMillis {
28 let elapsed = EmbassyInstant::now()
29 .saturating_duration_since(self.raw_start)
30 .as_millis();
31 InstantMillis(self.logical_start.0.saturating_add(elapsed))
32 }
33}