atagen

monolith

public
Star0
Watch0

Commit 82a6f2fca59f

tarball

atagen <boss@atagen.co>2026-10-16 23:19 UTC

2 files changed+45-3
design: add the M5 to M7 test checklist and refresh parked items
Modified file: design/parked.md+5 additions−3 deletions
@@ -4,9 +4,10 @@ Issues found while building, with the milestone that owns them.
44
55 ## M7
66
7-- vkcube shows a black window for about half a second at startup since early import, first-buffer holds and explicit sync landed. A spans log of a launch tells which.
8-- Every 1024th queue submit on NVIDIA stalls for 2.5 to 15 ms, one dropped frame every 6.2 s at 165 Hz. See research/nvidia.md.
9-- First-time dmabuf imports (15 to 27 ms each on NVIDIA) and direct scanout setup on fullscreen still land on the main thread and cost about ten frames per transition.
7+- vkcube showed a black window for about half a second at startup. First-time dmabuf imports now run on a worker thread, which was the likeliest cause. Needs a re-test on bare metal, with a spans log if it persists.
8+- Direct scanout setup on a fullscreen switch (framebuffer creation for client buffers) still runs on the main thread inside `render_frame`. Measure its cost before moving it.
9+- shm uploads still copy damaged rows into staging on the main thread. Moving the copy off-thread races the client reusing its buffer after release, so measure a full-screen shm redraw first and only move it if it shows up.
10+- SCHED_RR and the realtime queue priority both need CAP_SYS_NICE, which monolith does not have when started normally.
1011
1112 ## After M6
1213
@@ -14,3 +15,4 @@ Issues found while building, with the milestone that owns them.
1415 - Taskbars want wlr-foreign-toplevel-management, which smithay does not ship.
1516 - X11 windows do not raise in X stacking order on focus, which only matters for overlapping floating X windows.
1617 - Dialogs from xdg toplevels with a parent tile like any window. X11 dialogs, transients and fixed-size windows float.
18+- Some programs open an X connection just to probe, vkcube among them, which starts Xwayland lazily even though they draw through Wayland.
Added file: design/test-checklist.md+40 additions
@@ -0,0 +1,40 @@
1+# Test checklist for M5 to M7
2+
3+Everything below landed while you were away and was only smoke-tested nested. Bare metal, multi-monitor and real apps are still unverified.
4+
5+Build and run from the repo root in nushell.
6+
7+```nu
8+nix develop -c cargo build --release -p monolith
9+nix develop -c sh -c 'RUST_LOG=monolith=debug target/release/monolith run --backend drm 2> monolith.log'
10+```
11+
12+## M5
13+
14+- [ ] **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.
15+- [ ] **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.
16+- [ ] Hotplug, a second monitor and the Intel pass, still open from before.
17+
18+## M6
19+
20+- [ ] **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.
21+- [ ] **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.
22+- [ ] **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.
23+- [ ] **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.
24+- [ ] **Clipboard.** `wl-copy` and `wl-paste` work both ways with foot or beer. Middle-click paste uses the primary selection.
25+- [ ] **Screenshots.** `grim` and `grim -g (slurp)`.
26+- [ ] **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.
27+- [ ] **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.
28+- [ ] **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.
29+
30+## M7
31+
32+- [ ] **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.
33+- [ ] **vkcube black start.** Is the half second of black at launch gone?
34+- [ ] **Fullscreen switches.** Toggle fullscreen on vkcube a few times and look for `slow frame` lines. First-time imports now run on a worker thread.
35+- [ ] **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`.
36+
37+## Known
38+
39+- 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.
40+- See `parked.md` for what is left over.