Skip to content

[PROBE / do-not-merge] frame-paced mouse synth + ctrl_shortcuts CI instrumentation#183

Closed
borisbat wants to merge 2 commits into
bbatkin/ci-windows-cachingfrom
bbatkin/synth-mouse-probe
Closed

[PROBE / do-not-merge] frame-paced mouse synth + ctrl_shortcuts CI instrumentation#183
borisbat wants to merge 2 commits into
bbatkin/ci-windows-cachingfrom
bbatkin/synth-mouse-probe

Conversation

@borisbat

@borisbat borisbat commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Closed — superseded by #184 (clean mouse-fix PR off master). Probe served its purpose: validated the frame-paced mouse fix on real windows CI (test_layout_helpers PASS) and captured the ctrl_shortcuts failure state (host returns null during subtest 3 — host-side death, deferred with the docking crash).

borisbat and others added 2 commits June 5, 2026 18:33
…frame

advance_mouse_timeline fired every event with t_ms <= now_ms (wall-clock), so on a
coarse frame (the windows CI runner, where each test also eats ~10s of host spawn) the
press and the destination move collapse into ONE frame: imgui sees the button go down
with the cursor already at the end, so the splitter/slider activates with a zero
per-frame delta and never moves. test_layout_helpers' real-drag subtest fails exactly
this way on windows-latest (value/geometry unchanged) while passing on mac/ubuntu and on
a fast local box.

Keys already solved this: imgui_key_chord / imgui_key_play are frame-paced (t_ms read as
a frame index, one event-group per frame). Mirror it for the mouse:

- imgui_live_core: mouse_frame_paced / mouse_frame_no; advance_mouse_timeline steps the
  threshold by frame index when paced (the existing lerp then interpolates one cursor
  delta per frame); MousePlayArgs.frame_paced opts in. Wall-clock callers (move_to /
  click_at / plain play) are byte-identical.
- imgui_playwright: drag() emits a frame-indexed timeline with frame_paced=true, so
  press -> sweep -> release each land on their own frame regardless of dt. drag_to()
  inherits via drag().

Reproduced locally by throttling the headless harness frame loop to 300ms/frame
(test_layout_helpers drag FAIL -> PASS after this change); drag_drop / io_synth_drag
stay green at the same throttle. Clicks/recordings (wall-clock) are untouched.

Also clears 4 pre-existing LINT012 surfaced by touching the file (_input on the
status/stop live_command handlers, matching imgui_snapshot's pattern).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…CI diagnosis

Throwaway. On the windows-CI failure the enriched message prints the actual
NAME_INPUT value, io.active_widget, focus, and key-timeline drain (playing + queue
idx/total), which disambiguates activation-race vs keys-lost vs insert-not-replace vs
timeline-stall. Revert after the failure state is captured.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant