
CHANGELOG 0.3.0.md — Notepad
Added
- An automated headless graphics smoke for the compositor:
desktop --selftest
starts the compositor, imports the scanout, launches a real client and
deterministically validates multi-window composition and the advance of the
GPU's present timeline, also exercising maximize/restore/minimize/move.
Exposed as .uild.ps1 desktop-smoke (token DESKTOP SMOKE PASS/FAIL),
closing a graphics path that used to be tested only by hand.
- New desktop client apps:
filesapp (browsing /disk with a preview) and
aboutapp (a system summary), wired into the Start menu.
- Explicit policy and traceability for adopting components inspired by
SerenityOS, with new documentation in
docs/third-party/THIRD_PARTY_ADOPTION.md and
docs/third-party/THIRD_PARTY_PROVENANCE.md.
- A reusable 2D graphics layer
sxgfx in the POSIX SDK v1, with sx_bitmap,
sx_painter, alpha blending, clipping and sx_rect_set for handling multiple
damage rects from userland.
- A
display facade inspired by DisplayConnector over the virtio-gpu
backend, with connector properties, surface import/release, present batching,
a timeline and waitable events exportable to userland.
- The
SAVANXP_GPU_CLIENT_SURFACE_VERSION_3 graphics contract for client apps,
based on section_create/map_view plus dirty rect batches and
submit/retire/shutdown events instead of the legacy present pipe.
- A new, wider public ABI on
/dev/gpu0 for explicit present tracking, batching
and connector capabilities, including the timeline, waits/events and
property/scanout queries without owning the display.
- A real multi-window desktop compositor, with simultaneous overlays, simple
z-order, an active window, dragging from the title bar and a close button in
the top right corner.
- A bitmap asset pipeline of our own for the desktop, with embedded PNG icons
and art generated inside the repository for the taskbar, Start menu, title bars
and side strip, removing the dependency on SerenityOS assets.
- Wider
virtio-gpu statistics with end-to-end per-frame latency, including
accumulated samples and the worst case observed.
Changed
- The system reports itself as
v0.3.0 in the kernel, the shell, uname,
sysinfo, aboutapp and the other components consuming the shared version.
virtio-gpu's background progress stops depending on the input subsystem and
is pumped from a kernel device service invoked on the timer and on blocking
waits.
- The
desktop leaves behind the single fullscreen client model and moves to a
surface compositor with multi-rectangle invalidation, composition by clipping
and batched presents to the primary scanout.
- The
desktop's main loop is decoupled into layout/render/menu/session, keeping
a single binary but better separating the responsibilities of the compositor,
the background shell and the overlay windows.
shellapp, doomgeneric and the other client apps migrate to the async
version 3 surface channel; the terminal forces a full redraw when scrolling
moves the history, to avoid visual artifacts in the window.
- Compositor-GPU synchronization moves to an explicit timeline and to retiring
the previous frame before recycling the visible backbuffer, reducing logical
tearing and improving the desktop's pacing.
- The Start menu and the taskbar get several passes of visual and behavioral
polish: a cleaner layout, a bitmap sidebar, text that fits better, stable
hover and better feedback for the active client.
- Overlay windows can now be moved inside the desktop's work area and closed
straight from their title bar with a classic shell-style cross.
- The desktop's embedded art is now generated from the repository's own assets,
replacing the temporary references used during the SerenityOS-inspired
prototyping.
gputest --smoke now also validates the present timeline and the driver's
explicit pacing, not just internal stats/stages.
- The persistent
build/disk.img flow is re-validated after every large batch of
changes, with doomgeneric as the real non-regression test.
virtio-gpu reorganizes its internal state around an Adapter with separate
substates for transport, display, cursor, presents and runtime, leaving a
better base for fine-grained locking and more predictable recovery.
virtio-gpu's background work is split into explicit phases of queue draining,
pipeline advance and config event processing, with short atomic serialization
for virtqueue submit/drain.
- The present timeline now recognizes
present_cookie as a real correlation
even with coalescing, range retirement and damage batching.
- The partial presentation path can now update the active front buffer without a
full clone when the resource is idle, and imported batches keep real rects for
TRANSFER_TO_HOST_2D and RESOURCE_FLUSH before falling back to the bounding
rect only if the internal capacity runs out.
- The
desktop starts using the waitable present event exported by /dev/gpu0
as a readiness hint to reduce unnecessary polling of the timeline, keeping
WAIT_PRESENT as the strong synchronization.
virtio-gpu's display/scanout event handling is hardened: a failed refresh now
triggers deliberate degradation and recovery instead of staying a silent
failure of the hotplug/config path.
gputest --smoke raises driver coverage by validating waitable present and
scanout handles, together with a light soak of partial presents and repeated
refreshes to catch pacing and recovery regressions earlier.
- The surface reservation and pending slot timeouts in
virtio-gpu are now
treated as symptoms of a real pipeline stall, entering degraded mode and
attempting recovery just like the other critical waits.
virtio-gpu's recovery avoids simultaneous reentry and gputest --smoke
hardens event coverage by also checking that the handles go back to unsignalled
after event_reset, with a somewhat more aggressive soak.
gputest adds a dedicated --soak mode to exercise the /dev/gpu0 backend
for longer with a deterministic mix of full presents, partial presents, event
waits and scanout refreshes, without slowing down the normal smoke.
build.ps1 adds the gpu-soak command, reusing /SMOKE as the runner
selector so init can launch gputest --soak in QEMU and report SOAK PASS/FAIL tokens suitable for automated validation.
virtio-gpu's recovery becomes less global in non-critical domains: a failure
to rearm the cursor now degrades to a software cursor and non-critical imported
surfaces can be dropped locally during recovery instead of tipping over the
device's whole rearm.
virtio-gpu's scanout refreshes become transactional over the connector
cache: if the host delivers an incomplete event or rearming the primary fails,
the driver restores the previous state and only escalates to global recovery
when it cannot even keep the primary scanout.
gputest --soak now accepts an iteration count and also covers imported
surfaces through GPU_IOC_IMPORT_SECTION and
GPU_IOC_PRESENT_SURFACE_BATCH, with build.ps1 gpu-soak -GpuSoakIterations N
to repeat longer runs without touching the normal smoke.
- The
desktop compositor fixes the pacing of its imported presents by using
the real timeline to generate present_cookie, avoiding retiring frames before
the GPU is done and reducing visible tearing in heavy apps.
- The SDK's
gfx runtime stops exposing as a direct backbuffer the same shared
buffer the compositor reads: each client draws into a private backbuffer and
the runtime copies to the shared surface only once the previous frame has been
composed, eliminating the frame backlog without waiting for the GPU's final
retirement.
- The client surface protocol adds
composed_sequence to separate desktop
composition from GPU retirement; the compositor signals progress as soon as it
copies the frame into the visible backbuffer and keeps retired_sequence for
the present's real retirement.
- The
desktop limits how many mouse events it drains per frame so that
dragging windows does not accumulate a large backlog before composing again.
poll() stops treating every device as always readable: /dev/input0 and
/dev/mouse0 expose real queue readiness, reducing the compositor's busy loop
when there are no pending events.
- The
desktop's mouse handling moves to reading blocks per frame and coalescing
consecutive movements with the same button state, following SerenityOS's
WindowServer pattern so as not to compose a frame per raw packet.
sx_rect_set fixes the merging of adjacent rectangles so it does not join
separate areas that merely share an edge coordinate, avoiding artificially huge
dirty rects when moving windows.
doomgeneric and the compositor now print the concrete present or invalid
batch error when a client surface fails, making visual regressions easier to
diagnose.
Version 0.3.02026-06-180 changes