StatifierUI.Kino.TraceStepper (StatifierUI v0.9.1)

Copy Markdown View Source

The persisted inspector's render loop (sui-2uz): a GenServer holding one immutable message list and the point in it the panes are showing.

StatifierUI.Kino.Updater is its live sibling. The two differ in exactly one thing - where the messages come from. The updater re-reads a StatifierUI.Trace.Subscriber on every render because the stream is still growing; a persisted trace is complete when the widget is built, so this holds the list and re-renders only when the selection moves. Both ask StatifierUI.Inspector where a move lands and what each pane should say, so the stepping vocabulary is one definition rather than two.

Started via Kino.start_child/1, so re-evaluating the cell terminates it. There is nothing to detach: no session, no subscriber, no monitor.

Summary

Functions

Returns a specification to start this module under a supervisor.

Renders every pane now.

Moves the selection one scrubber step (:first, :prev, :next, :live) and re-renders. On a persisted trace :live is the end of the recording rather than a tip that moves.

Jumps straight to macrostep n - what the "Jump to" select does, and what a scrubber alone cannot do on a long recording.

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

refresh(server)

@spec refresh(GenServer.server()) :: :ok

Renders every pane now.

scrub(server, move)

@spec scrub(GenServer.server(), :live | :first | :prev | :next) :: :ok

Moves the selection one scrubber step (:first, :prev, :next, :live) and re-renders. On a persisted trace :live is the end of the recording rather than a tip that moves.

select(server, n)

@spec select(GenServer.server(), non_neg_integer()) :: :ok

Jumps straight to macrostep n - what the "Jump to" select does, and what a scrubber alone cannot do on a long recording.