Self-hosted SSH + SFTP + RDP in a browser — MobaXterm replacement
Go to file
Vantz Stockwell 48f9af0824
Some checks failed
Build & Sign Wraith / Build Windows + Sign (push) Failing after 7s
perf: RDP dirty rectangle tracking — partial frame transfer
Root cause: Every GraphicsUpdate copied the full 8.3MB decoded image
into the front buffer, cloned all 8.3MB for IPC, and transferred all
8.3MB to the frontend — even when only a 100x100 pixel region changed.
During window drag, this created a 25MB/frame pipeline backup.

Fix:
- Track dirty rectangles from ironrdp's GraphicsUpdate(InclusiveRectangle)
- Write path: only copy changed rows from decoded image to front buffer
  (e.g. 100 rows × 1920 pixels = 768KB vs 8.3MB full frame)
- Accumulate dirty region as union of all rects since last get_frame
- Read path: if dirty region < 50% of frame, extract only the dirty
  rectangle bytes; otherwise fall back to full frame
- Binary IPC format: 8-byte header [x,y,w,h as u16 LE] + pixel data
- Frontend: putImageData at dirty rect offset instead of full frame
- Status bar: h-9 text-sm for 3440x1440 readability

During window drag (typical 300x400 dirty rect):
  Before: 8.3MB write + 8.3MB clone + 8.3MB IPC = 24.9MB per frame
  After:  480KB write + 480KB extract + 480KB IPC = 1.4MB per frame
  ~17x reduction in data movement per frame.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:38:26 -04:00
.gitea/workflows feat: migrate all artifacts to SeaweedFS — single source of truth 2026-03-26 15:52:10 -04:00
docs feat: MCP Phase 1 — scrollback buffer, terminal_read, terminal_execute 2026-03-24 23:00:32 -04:00
src perf: RDP dirty rectangle tracking — partial frame transfer 2026-03-30 10:38:26 -04:00
src-tauri perf: RDP dirty rectangle tracking — partial frame transfer 2026-03-30 10:38:26 -04:00
.gitignore chore: ignore worktree directories 2026-03-29 16:41:51 -04:00
AGENTS.md docs: rename Go reference from ../wraith to ../wraith-go-archive 2026-03-24 22:54:22 -04:00
CLAUDE.md feat: MCP Phase 1 — scrollback buffer, terminal_read, terminal_execute 2026-03-24 23:00:32 -04:00
index.html feat: Phase 1 complete — Tauri v2 foundation 2026-03-17 15:09:41 -04:00
package-lock.json feat: Tauri auto-updater + RDP vault credentials + sidebar persist 2026-03-25 12:42:01 -04:00
package.json feat: Tauri auto-updater + RDP vault credentials + sidebar persist 2026-03-25 12:42:01 -04:00
tsconfig.json feat: Phase 1 complete — Tauri v2 foundation 2026-03-17 15:09:41 -04:00
tsconfig.node.json feat: Phase 1 complete — Tauri v2 foundation 2026-03-17 15:09:41 -04:00
vite.config.ts feat: Phase 1 complete — Tauri v2 foundation 2026-03-17 15:09:41 -04:00