perf: add ghostty-bench and bring terminal throughput to Zig parity
Adds crates/ghostty-bench, a port of ZIG/src/benchmark and src/synthetic: the ghostty-bench binary (terminal-stream, terminal-parser, codepoint-width, grapheme-break, is-symbol, osc-parser, screen-clone with Zig's CLI) and ghostty-synthetic data generators (+ascii, +utf8, +osc, plus a Rust-only +sgr mode). Measured against Ghostty's own ghostty-bench built with Zig 0.15.2 (ReleaseFast) vs --profile production, the hot paths were optimized without behaviour changes: - Terminal::print single-lookup fast path for width-1 chars mid-line - page grapheme allocator: bitmap first-fit instead of a linear scan (was 38% of utf8 stream time; randomized equivalence test added) - plain cells skip per-cell work in clear_cells and row cloning - ASCII fast path + strict hand-written UTF-8 decoder (exhaustive equivalence test against std) - parser/OSC parser split into inlined fast and state-change paths - RenderState allocates grapheme vectors only for grapheme rows - Page::assert_integrity no-op stub so the production profile builds terminal-stream is now at parity (ascii 1.08x, utf8 0.97x, SGR 1.04x of Zig's time). Still slower: screen-clone (~2.6x, zero-filling fresh cell Vecs vs Zig's lazily-zeroed mmap), osc-parser (1.9x), and the raw parser on SGR data (1.5x). Full table in docs/rewrite/notes/perf-P1.md. Test Plan: - cargo test --workspace (no failures) - cargo run --profile production -p ghostty-bench -- +terminal-stream --data=<file> and compare with Zig's ghostty-bench
This commit is contained in:
1 parent
8048ee6a05
commit
0c4f0ee412
18 files changed
+2195
-82
No files matched your search
Generated
+13
@@ -1245,6 +1245,16 @@ dependencies = [
|
||||
"wayland-protocols-plasma",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ghostty-bench"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"ghostty-terminal",
|
||||
"ghostty-unicode",
|
||||
"ghostty-vt",
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ghostty-cli"
|
||||
version = "0.1.0"
|
||||
@@ -1255,6 +1265,7 @@ dependencies = [
|
||||
"ghostty-font",
|
||||
"ghostty-input",
|
||||
"ghostty-os",
|
||||
"ghostty-vt",
|
||||
"log",
|
||||
"ratatui",
|
||||
"tempfile",
|
||||
@@ -1269,6 +1280,7 @@ dependencies = [
|
||||
"const_format",
|
||||
"ghostty-input",
|
||||
"ghostty-os",
|
||||
"ghostty-terminal",
|
||||
"ghostty-vt",
|
||||
"log",
|
||||
"onig",
|
||||
@@ -1339,6 +1351,7 @@ name = "ghostty-os"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"gettext-rs",
|
||||
"ghostty-vt",
|
||||
"log",
|
||||
"nix 0.31.3",
|
||||
"rustix",
|
||||
|
||||
Reference in new issue
Block a user