Observation on the Linux dev box (native Wayland, GNOME 50, 3840x2160 panel at 200 %) with the DisplayXR browser (browser-pvt #167) and the demos: the phase-snapped drag is 3D-stable (no shimmer) but the window itself moves jerkily — it wiggles/steps while being dragged, noticeably worse than the same drag on Windows, which is smooth.
Mechanism (per docs/specs/runtime/wayland-window-geometry.md §8 and the session memory): Windows snaps each step before the window moves (app-owned drag, per-step snap_window_rect, sub-lattice precision). Wayland cannot position its own window, so the GNOME extension corrects each compositor-applied move after mutter places it (position-changed → move_frame to the nearest table entry), and the table is a grid at kLatticeCell = 3 logical px (6 device px at 200 %). Two candidate causes, not yet separated:
- Quantization: the window only lands on the 3-px table grid, so a slow drag advances in visible steps.
- Correct-after-apply: if the raw position is painted for even one frame before
move_frame lands (the spec claims the correction precedes the paint — worth measuring with DISPLAYXR_DEBUG=1's per-frame audit), the window oscillates between raw and corrected positions.
Asks: measure which it is (frame audit: how many frames paint off-table; whether corrections alternate sign); if (1), a finer table (cell 1–2 px where the lens allows, or interpolating along the drag vector) — the lattice period on this panel is what bounds it; if (2), a mutter-side hook (the Meta.ExternalConstraint path once mutter makes new_rect writable — upstream request drafted) or predicting the next position from pointer velocity so the correction is applied to the upcoming move. Windows is the reference for feel. Not a regression — filed from the 2026-09-26 panel session.
Observation on the Linux dev box (native Wayland, GNOME 50, 3840x2160 panel at 200 %) with the DisplayXR browser (browser-pvt #167) and the demos: the phase-snapped drag is 3D-stable (no shimmer) but the window itself moves jerkily — it wiggles/steps while being dragged, noticeably worse than the same drag on Windows, which is smooth.
Mechanism (per
docs/specs/runtime/wayland-window-geometry.md§8 and the session memory): Windows snaps each step before the window moves (app-owned drag, per-stepsnap_window_rect, sub-lattice precision). Wayland cannot position its own window, so the GNOME extension corrects each compositor-applied move after mutter places it (position-changed→move_frameto the nearest table entry), and the table is a grid atkLatticeCell= 3 logical px (6 device px at 200 %). Two candidate causes, not yet separated:move_framelands (the spec claims the correction precedes the paint — worth measuring withDISPLAYXR_DEBUG=1's per-frame audit), the window oscillates between raw and corrected positions.Asks: measure which it is (frame audit: how many frames paint off-table; whether corrections alternate sign); if (1), a finer table (cell 1–2 px where the lens allows, or interpolating along the drag vector) — the lattice period on this panel is what bounds it; if (2), a mutter-side hook (the
Meta.ExternalConstraintpath once mutter makesnew_rectwritable — upstream request drafted) or predicting the next position from pointer velocity so the correction is applied to the upcoming move. Windows is the reference for feel. Not a regression — filed from the 2026-09-26 panel session.