Commit Graph
49 Commits
Author SHA1 Message Date
Samuel Onoja 0420e59cbe Reconcile DRM topology before resuming presentation 2026-10-02 09:33:19 +01:00
Samuel Onoja 8ad5293178 Model lock ownership explicitly and allow protected crash recovery 2026-10-02 08:48:01 +01:00
Samuel Onoja 181b7bce9a Register battery polling only for active automatic-refresh outputs 2026-10-02 08:18:47 +01:00
Samuel Onoja 79a968b0a6 Use lock idle deadlines and stop polling after display sleep 2026-10-02 08:18:01 +01:00
Samuel Onoja 96b0a9d097 Separate presentation facts from surface eligibility policy 2026-10-02 08:16:00 +01:00
Samuel Onoja bb78801720 Separate requested and applied output runtime power 2026-10-02 08:05:28 +01:00
Samuel Onoja 2f63cae54c Gate display frame callbacks on shared presentation visibility 2026-10-02 07:59:41 +01:00
Samuel Onoja 6b2974d0fa Track displayed surface visibility for idle inhibition 2026-10-02 07:57:15 +01:00
Samuel Onoja 6f2951c6b0 Scope redraw requests and avoid redundant animation fallback wakeups
Instrument redraw sources, per-output request coalescing, and animation fallback scheduling. Route local visual changes to their affected outputs while preserving deferred grab and gesture updates.

Schedule fallback recovery using each orphaned animation output's refresh interval, suppress it while a normal frame chain exists, and retain requested final frames after scheduling failures. Add mixed-refresh, cursor footprint, frame-chain, and disconnect regressions and document measurement limits.
2026-10-02 01:21:11 +01:00
Samuel Onoja 28e03a2624 Use analytic springs and instrument resize barriers
Share a stable damped oscillator solver across scalar and rectangle animations while preserving retarget and explicit no-crossing presentation policies. Add deterministic traces, scrolling and zoom continuity coverage, and pause-aware advancement.

Measure resize barrier and handoff timing behind resize-metrics, expose the feature through the release installer, and wait for the intended backend in isolated portal tests.
2026-10-02 00:49:52 +01:00
Samuel Onoja da60ecb719 micro optimization fixes 2026-10-01 20:47:05 +01:00
Samuel Onoja 0d7203f84b Migrate DRM outputs to Smithay DrmCompositor 2026-10-01 19:31:54 +01:00
Samuel Onoja 07bda5a21c Refactor window ownership and immutable frame sampling 2026-10-01 18:03:01 +01:00
Samuel Onoja 3d0c85c70a Wait for DRM presentation before releasing frame callbacks
Cancel callback-only timers when a frame is submitted and defer callback delivery until retirement. Cover a delayed timer and missed presentation deadline in the scheduler tests.

Clean up shader argument borrows and shell region decoding to pass Clippy.
2026-10-01 17:32:17 +01:00
Samuel Onoja a40b899b8c Schedule DRM frames against per-output presentation deadlines 2026-10-01 17:22:34 +01:00
Samuel Onoja 80527eabea Fix area screenshots on automatically positioned outputs 2026-10-01 13:39:58 +01:00
Samuel Onoja bdc3ba435f fix clippy warnings 2026-10-01 13:24:21 +01:00
Samuel Onoja cbf048566a Split shell, settings, and compositor into focused modules 2026-10-01 12:47:26 +01:00
Samuel Onoja a02925b2ee Add manual and battery-aware automatic display refresh switching 2026-10-01 08:08:08 +01:00
Samuel Onoja 46509f880a Fix compositor output routing and pointer hints; format imports 2026-09-30 06:39:58 +01:00
Samuel Onoja 83574451df Fix DRM callback pacing and shared animation timing 2026-09-30 05:39:51 +01:00
Samuel Onoja 35537b32c8 Dim and sleep locked displays after inactivity
Add adjustable lock-only inactivity delays, a smooth dimming fade and DRM display sleep without changing output layout. Input, session resume and policy changes wake displays. Pending flips retire before power-off, and protected fallback frames preserve the policy after an early locker crash while unlock ownership checks remain strict.

Reduce the password field and avatar, expose delays in Settings, document the practical swaylock comparison and remove the completed backlog.

Validation: independent review cleared; 255 compositor tests, 7 locker tests and 15 Settings tests pass; affected debug binaries rebuilt. Isolated visual smoke remains blocked by an unlocked nested screenshot timeout, matching the previously established baseline presentation limitation. Real DRM display sleep requires a live session check.
2026-09-30 05:10:04 +01:00
Samuel Onoja baca852ee9 Support isolated live window ScreenCast streams
Render selected toplevels through a private portal-only capture protocol, preserve logical snapshot geometry, and renegotiate PipeWire video on window resizing. Bound outstanding snapshots and retry temporary contention; stop on source closure and session locking.

Validation: portal unit tests (31), capture budget unit, private-bus portal contracts, and real nested/PipeWire isolation, workspace, resize, close and paused-lock tests pass. Independent review cleared. Monitor restore integration timed out on both this build and the unchanged previous compositor under the current nested host.
2026-09-30 04:02:33 +01:00
Samuel Onoja 0ab5f2e05b Add isolated window screenshot targets with native selection 2026-09-29 23:54:32 +01:00
Samuel Onoja 67192c0c04 Speed up per-frame layout, hit testing, and stacking paths
Split ScrollingLayout validation so the per-frame geometry solve only
checks scalars and keeps the full tree validation behind debug_assert,
removing a HashSet build from every frame. Replace the per-region Vec
in decode_regions with a stack array via as_chunks, and skip the window
hit test in PointerMotion when Overview is not presenting, where
visual_scale_for_window returns 1.0 regardless.

Guard sync_window_stacking behind a check that the space already matches
the target order with uniform z_index, avoiding an O(n^2) raise_element
loop on every redraw. Narrow window_under_visual to the space iterator
outside Overview, keeping the collected and sorted candidate list for
the Overview branch where front-to-back order is load-bearing.

Raise rust-version to 1.98 and clear the resulting Clippy findings
across the workspace: let-chain collapses, clamp, and while-let loops.
2026-09-29 09:49:04 +01:00
Samuel Onoja da5397940b Measure render attempts that produce no damage 2026-09-27 07:01:31 +01:00
Samuel Onoja 23991d5bd8 Add native Settings and complete live configuration reload
Add compact branded Settings with safe atomic edits, external config refresh and a draggable sidebar. Reconcile services, update connected displays and input devices, apply live layout policy and window rules, and resolve initial floating placement before tiled insertion. Package the Settings launcher and shared Ferese icon.
2026-09-26 20:31:05 +01:00
Samuel Onoja 672b4e2b60 Add live config reload, session locking and managed daemons
Refine focus gradients, shell workspace controls and popup motion. Correct floating stacking and preserve client-chosen dialog sizes. Add lock protocol probes and session integration.
2026-09-26 19:03:37 +01:00
Samuel Onoja 0709484efb Overhaul resize presentation and wallpaper rendering
Coordinate native-pixel resize handoffs, fractional geometry and shared animation timing. Delegate wallpaper rendering to the compositor, advertise DMA-BUF device feedback, and improve callback pacing and render metrics.

Handle monitor-local shell surfaces, lid-driven output evacuation and workspace restoration.
2026-09-26 14:50:14 +01:00
Samuel Onoja 36d52373a1 feat: report blur rendering workload 2026-09-25 05:49:52 +01:00
Samuel Onoja 07de17a399 feat: configure and inspect DRM outputs 2026-09-25 04:32:19 +01:00
Samuel Onoja 4eb456fb2b feat: report optional render performance metrics 2026-09-25 04:19:08 +01:00
Samuel Onoja 2f83c58040 feat: configure keyboard and touchpad input 2026-09-25 02:50:19 +01:00
Samuel Onoja f0862348c9 fix: honor screencopy cursor overlay requests 2026-09-25 02:31:18 +01:00
Samuel Onoja 5fce7227ed feat: identify DRM outputs by EDID 2026-09-25 01:50:54 +01:00
Samuel Onoja 1934cef705 feat: manage multiple DRM output pipelines 2026-09-25 01:47:55 +01:00
Samuel Onoja 42ad4e1f68 feat: track focused output workspaces 2026-09-25 01:41:51 +01:00
Samuel Onoja 20b468c6ac feat: support authorized screencopy 2026-09-25 01:36:07 +01:00
Samuel Onoja 05f801aee6 feat: support renderer-validated dma-buf imports 2026-09-25 01:26:16 +01:00
Samuel Onoja 41e493728c feat: render layer shell surfaces 2026-09-24 16:54:33 +01:00
Samuel Onoja a2a80b70b5 fix: send frame callbacks to cursor surfaces 2026-09-24 16:49:14 +01:00
Samuel Onoja a9c70b0c2d fix: redraw direct output after session resume 2026-09-24 16:45:28 +01:00
Samuel Onoja bf512cdd9b feat: support direct session vt switching 2026-09-24 16:44:18 +01:00
Samuel Onoja bf10a2f838 fix: advertise direct renderer shm formats 2026-09-24 16:38:35 +01:00
Samuel Onoja 74bdc04c10 fix: resume direct rendering after session activation 2026-09-24 16:36:49 +01:00
Samuel Onoja 179495f2c6 feat: render and present direct drm frames 2026-09-24 16:36:13 +01:00
Samuel Onoja 9fdbb8e625 feat: select primary drm connector 2026-09-24 16:23:05 +01:00
Samuel Onoja c101b2cf8b feat: open primary drm rendering device 2026-09-24 16:20:27 +01:00
Samuel Onoja c50dd98685 feat: initialize direct session backend 2026-09-24 16:15:11 +01:00