• v1.11.1 a2770d3edf

    perf: double-buffered RDP frames + frontend rAF throttling
    All checks were successful
    Build & Sign Wraith / Build Windows + Sign (push) Successful in 4m20s

    Ghost released this 2026-03-30 13:19:40 +00:00 | 19 commits to main since this release

    Root cause: RDP was unresponsive due to frame pipeline bottleneck.

    • get_frame() held tokio::Mutex while cloning 8.3MB, blocking the
      RDP session thread from writing new frames (mutex contention)
    • Frontend fetched on every backend event with no coalescing
    • Every GraphicsUpdate emitted an IPC event, flooding the frontend

    Fix:

    • Double-buffer: back_buffer (tokio::Mutex, write path) and
      front_buffer (std::sync::RwLock, read path) — reads never block writes
    • get_frame() now synchronous, reads from front_buffer via RwLock
    • Backend throttles frame events to every other GraphicsUpdate
    • Frontend coalesces events via requestAnimationFrame
    • RdpView props now reactive (computed) for correct resize behavior
    • rdp_get_frame command no longer async (no .await needed)
    • screenshot_png_base64 no longer async

    Co-Authored-By: Claude Opus 4.6 (1M context) noreply@anthropic.com

    Downloads