atagen

monolith

public
Star0
Watch0
5c3ede3136244ca968fac6913c177d84f288b357
1
ssh://brewery@pls.lobotomise.me:33/atagen/monolith.git
design/test-checklist.mdMarkdown43 lines4.3 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 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.
  • Direct scanout. Fullscreen vkcube should log direct scanout scanout=true, and its frame rate lines should show scanned_out close to presented. If it logs scanout=false or never switches, the elements, overlay_planes and cursor_plane fields on that line show what was on screen with it.
  • Output rotation. [output.DP-1] transform = "90" with a position puts DP-1 on its side where you placed it. The output connected log line shows the transform and position. The pointer should cross between outputs where their edges meet.
  • CPU target. cpu_p99_us on the frame rate lines should stay under 500, the target in decisions.md.
  • NixOS module. Add the flake as an input, import monolith.nixosModules.default and set programs.monolith.enable = true. A monolith session appears in the display manager. With the default realtime-scheduling = true, the log should show compositor thread runs SCHED_RR and queue global priority priority=Some(REALTIME). Programs launched from monolith should not inherit CAP_SYS_NICE, which grep Cap /proc/(pgrep beer)/status shows as an all-zero CapAmb.

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.