Skip to content

[CI] Add rendering benchmarks + thresholds (frame time, cache hit rates, allocations) #127

Description

@benyblack

Area: tests/NovaTerminal.Benchmarks/, .github/workflows/

Summary

The rendering pipeline has excellent performance engineering — column-level dirty spans, LRU row-picture cache, pooled snapshots with an enforced <=24 KB/frame allocation test, per-typeface shaping caches — but none of it is protected by CI. Benchmarks cover parser throughput, reflow, and scrollback eviction only; the throughput gate is parser-only. A regression that silently defeats the row cache (e.g., accidental per-frame invalidation) would pass CI cleanly.

Proposed fix

  1. Add a headless render benchmark: capture snapshot -> draw to offscreen SKSurface; assert frame-time and draw-path allocation thresholds.
  2. Track and assert glyph-cache and row-cache hit rates via the existing RendererStatistics.
  3. Add a sustained-output stress case (cat-largefile equivalent) asserting render stays decoupled from parse rate.
  4. Gate in nightly first; promote to PR CI once thresholds are stable. Relates to [CI] Re-gate headless App.Tests (blocked on AvaloniaUI/Avalonia#21467) #117 (coverage) and [CI] Wire dormant SharpFuzz harness into nightly; add parser + resize fuzz targets #124 (fuzzing) as the third leg of CI hardening.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions