diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 08:17:38 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:16 -0300 |
| commit | 6f7c79650857da578b9e6f8c49c772eb7c40bcae (patch) | |
| tree | d5e9dcfe134f67d497dfbb4b31a64811b1f6d345 /src/pardes.zig | |
| parent | ab668719385c94df3e274f71cb744f5917c1da7e (diff) | |
| download | pardes-6f7c79650857da578b9e6f8c49c772eb7c40bcae.tar.gz pardes-6f7c79650857da578b9e6f8c49c772eb7c40bcae.zip | |
GUI goldens settle on the window's idle, not two captures that agree
test/gui_golden.py hashed a scene once two captures 400 ms apart agreed;
on a loaded machine a slow frame agreed with itself before the scene's
change landed and every later hash moved up a scene. A test window now
writes a status file into its capture directory each loop step (gui.zig
writeTestStatus: step, frames captured, idle — nothing owes a frame,
nothing moves, nothing waits on the core's clock), and the harness waits
for an idle step two past the one current when it asks: a 9P write has
been served by then, so the frame is the scene's. Two things kept a
window from ever going idle, both fixed:
- Look-hover re-armed forever: resting on a word with nothing to open, the
hover wait ran its two frames, found nothing, cancelled, and the next
present's pointer refresh started it again: a frame every other frame
for as long as the pointer rested there, live too (CPU). The place last
refused is remembered (Pardes.look_hover_refused) until the pointer
moves off it.
- The virtual clock moved only on a wait that timed out, so a steady
trickle of events held it still; it now moves to the core's wake too
when an event cut the wait short and nothing owes a frame.
Captures go to a directory of their own, outside the session's (a file
written there every frame is a change in the directory its panes look
at). All 17 goldens match the file as recorded at oooopqyv; eight runs,
five alongside a ReleaseFast build and three with all 16 cores saturated
(load 13-19), were byte-identical, 14 s a run unloaded (was ~30).
Tests: the resting pointer lets the core go idle.
Diffstat (limited to 'src/pardes.zig')
| -rw-r--r-- | src/pardes.zig | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/pardes.zig b/src/pardes.zig index 72a90244..d6385e6f 100644 --- a/src/pardes.zig +++ b/src/pardes.zig @@ -4377,6 +4377,9 @@ pub const Pardes = struct { /// The look just run found nothing (look.zig missed). look_missed: bool = false, look_hover_wait: ?look.LookHoverWait = null, + /// The place a look-hover last found nothing to open: the pointer + /// resting there does not ask again every frame (look.noteLookHover). + look_hover_refused: ?look.LookHoverWait = null, look_hover_preview: ?look.LookHoverPreview = null, pdf_hover_preview: if (pdf_enabled) ?look.PdfWordPreview else void = if (pdf_enabled) null else {}, wheel_guard: u8 = 0, |
