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