package time Tick :: struct { _nsec: i64, // relative amount } tick_now :: proc() -> Tick { return _tick_now() } tick_diff :: proc(start, end: Tick) -> Duration { d := end._nsec - start._nsec return Duration(d) } tick_lap_time :: proc(prev: ^Tick) -> Duration { d: Duration t := tick_now() if prev._nsec != 0 { d = tick_diff(prev^, t) } prev^ = t return d } tick_since :: proc(start: Tick) -> Duration { return tick_diff(start, tick_now()) } @(deferred_in_out=_tick_duration_end) SCOPED_TICK_DURATION :: proc(d: ^Duration) -> Tick { return tick_now() } _tick_duration_end :: proc(d: ^Duration, t: Tick) { d^ = tick_since(t) }