atagen

monolith

public
Star0
Watch0
4cbf881c67bdf5ed57975d2232a462a489d02a68
1
ssh://brewery@pls.lobotomise.me:33/atagen/monolith.git
design/test-checklist.mdMarkdown40 lines3.6 KB

Test checklist for M5 to M7

Everything below landed while you were away and was only smoke-tested nested. Bare metal, multi-monitor and real apps are still unverified.

Build and run from the repo root in nushell.

nix develop -c cargo build --release -p monolith
nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --backend drm 2> monolith.log'

M5

  • VRR. The log line output connected should say vrr_capable=true for DP-2. Fullscreen vkcube and look for adaptive sync vrr=true, and check the monitor’s OSD shows a varying refresh rate. Leaving fullscreen should log vrr=false. The default is [output] vrr = "fullscreen", and "on" and "off" also work.
  • VRR cursor cap. With a fullscreen game below 165 fps, moving the mouse should not push the refresh rate up. Cursor-only frames are capped at 60 Hz.
  • Hotplug, a second monitor and the Intel pass, still open from before.

M6

  • layer-shell. waybar reserves its strip and tiles stay clear of it. A fullscreen window covers it. Its workspaces module should list the tags through ext-workspace.
  • Launchers. fuzzel takes the keyboard while open and gives it back on close. The launched app should land on the tag you were on when you launched it.
  • Session lock. swaylock hides everything, takes input and unlocks with your password. VT switching still works while locked. Killing swaylock leaves the session locked, which is what the protocol wants. Unlock it by starting swaylock again from a VT.
  • Idle. swayidle -w timeout 10 'notify-send idle' fires after 10 s without input. A playing mpv should hold it off while visible and stop holding it off once its tag is hidden.
  • Clipboard. wl-copy and wl-paste work both ways with foot or beer. Middle-click paste uses the primary selection.
  • Screenshots. grim and grim -g (slurp).
  • Portals. Needs xdg-desktop-portal-wlr installed and monolith’s package in your profile so share/xdg-desktop-portal/monolith-portals.conf is found. Screen sharing a whole output from a browser should work. Window sharing does not exist yet.
  • Xwayland. Run an X app, like xeyes, Steam or a Proton game. The log shows starting Xwayland on its first connection. Check keyboard input, fullscreen and menu placement. Dialogs should float. After the last X client closes, Xwayland exits and should start again for the next one.
  • Activation. Launch something slow from fuzzel on tag 2, switch to tag 3 before it appears. It should land on tag 2 and mark it urgent.

M7

  • Submit stall. It used to drop one frame every 6.2 s at 165 Hz. With vkcube running, the frame rate debug lines should read 165 of 165 indefinitely, with no frame missed its vblank in steady state.
  • vkcube black start. Is the half second of black at launch gone?
  • Fullscreen switches. Toggle fullscreen on vkcube a few times and look for slow frame lines. First-time imports now run on a worker thread.
  • Realtime, optional. SCHED_RR and the realtime Vulkan queue need CAP_SYS_NICE. To try them, wrap the binary with security.wrappers and capabilities = "cap_sys_nice+ep", then look for compositor thread runs SCHED_RR and queue global priority priority=Some(REALTIME). File capabilities make the loader ignore variables like VK_DRIVER_FILES.

Known

  • Nested monolith stops redrawing when the host compositor stops sending it frame callbacks, for example while its window is hidden. Clients inside then freeze until it is shown again.
  • See parked.md for what is left over.