High-rate sensor handling, split out of BB.TUI.State.
debounce_ms + last_seen back the event-log debounce in
BB.TUI.State.append_event/3; flush_ms + render_pending? drive the
coalesced sensor re-render in BB.TUI.App. Defaults: 1s debounce window,
~33ms (~30fps) flush. A debounce_ms of 0 disables debouncing.
Summary
Types
@type t() :: %BB.TUI.State.Throttle{ debounce_ms: non_neg_integer(), flush_ms: pos_integer(), last_seen: %{optional({list(), term()}) => integer()}, render_pending?: boolean() }