summaryrefslogtreecommitdiff
path: root/gui-wm/wayfire/tests/render-regression/README.md
blob: a7783239b082264db3f7bbe70903d4911d252d86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Cube repaint and stacking regressions

Run these tests as a regular desktop user after installing the package. They
start a separate headless Wayfire with three outputs and never enable autostart.
Pass a prepared source tree from the same Wayfire revision: the fixture needs
the private cube control signal declarations.

```sh
python3 run.py --source /path/to/prepared/wayfire-0.11.0
```

Requires the installed Wayfire development headers, digitalrain sampler plugin,
Alacritty, grim, wlr-randr, Python/Pillow, pkg-config and a C++ compiler. The GLES
render device defaults to `/dev/dri/renderD128`; override `WLR_RENDER_DRM_DEVICE`
if needed. The temporary fixture plugin is never installed. Logs and snapshots
remain in the temporary directory printed by the runner.

The tests cover:

- A settled cube schedules no continuous rendering on three static outputs.
- A partial repaint modifies only its requested pixels, including a negative
  output position, scale 2, and a 90-degree output transform.
- A real Wayland window held during cube rotation stays below overlay, screensaver and
  lock-layer surfaces. The lock test checks layer ordering, not lock protocol
  authentication or security.
- Content changes, movement/resizing, removal and remapping update cached cube
  textures. The live composition is compared with a fresh desktop render.

With 0.11.0-r2, the static test produced 732 render passes per second across the
three outputs, partial rendering changed pixels outside every damage region,
and held windows appeared above both higher layers. The r3 patch brings those
three measurements to zero. `--baseline` reports the known stacking/damage
failures without aborting, for before/after checks.

The fixture explicitly damages and disables synthetic rectangles on removal:
`color_rect_view_t::close()` emits an unmap signal but does not do the surface
damage/disable sequence that a real Wayland surface performs.

Revision 4 adds panel and overlay regressions in `layer-check.py`. A top-layer
panel included by `cube/rotate_layer_shell` must render on all three workspace
textures, including empty neighboring workspaces. Overlay surfaces must cover
all desktop content during cube rotation, with both fixed and rotating panels.
On r3, a 100x20 panel rendered 2,000 pixels on its current workspace and zero
on either neighbor; the overlay test exposed 173,249 desktop pixels. Revision
4 renders 2,000 panel pixels on each workspace and zero pixels above overlays.

To test a build before installation, pass `--wayfire /path/to/build/src/wayfire`
and `--plugin-dir /path/to/build/plugins/cube`. The plugin path is appended
after the temporary fixture directory and before the installed plugin directory.