Concrete perf metrics: live counters in --profile + benchmark suite
Live metrics (--profile): - New metricsTracker instruments OnPTYOut, viewport renderer, stdout writes, libghostty-vt Write/Title CGO calls, sidebar / tabbar / status draws (with cache-hit accounting), snapshot replays, and the chrome ticker (so we can see ticker fires that did nothing). - Writes metrics.jsonl (one snapshot per second) and metrics.json + summary.txt on exit, alongside the existing pprof files. - All record* methods are nil-safe so disabled paths pay only a cheap nil check; counters are atomic so the per-PTY-chunk hot path stays lock-free. Benchmark suite (go test -bench=.): - Three workload fixtures — plain ASCII, SGR-styled lines, and a ratatui-style cursor-shuffling burst — plus a containsOSC microbenchmark. Reports ns/op, MB/s, allocs/op, B/op. - Initial baseline numbers added to TODO under the perf-audit section, alongside two new findings (renderer allocs ~1 per 4 bytes on styled chunks; styled throughput tops out near 90 MB/s) those benchmarks surfaced.
This commit is contained in:
@@ -38,6 +38,10 @@ func formatShortDuration(d time.Duration) string {
|
||||
// computed main viewport, so the sidebar region is outside the child's
|
||||
// cursor range. We can redraw freely without fighting the child for cells.
|
||||
func (st *uiState) drawSidebar() {
|
||||
var entry time.Time
|
||||
if st.metrics != nil {
|
||||
entry = time.Now()
|
||||
}
|
||||
st.mu.Lock()
|
||||
palOpen := st.palette != nil
|
||||
focus := st.focusedID
|
||||
@@ -231,10 +235,16 @@ func (st *uiState) drawSidebar() {
|
||||
st.chromeCacheMu.Lock()
|
||||
if frame == st.sidebarCache {
|
||||
st.chromeCacheMu.Unlock()
|
||||
if st.metrics != nil {
|
||||
st.metrics.recordSidebar(time.Since(entry), true)
|
||||
}
|
||||
return
|
||||
}
|
||||
st.sidebarCache = frame
|
||||
st.chromeCacheMu.Unlock()
|
||||
if st.metrics != nil {
|
||||
defer func() { st.metrics.recordSidebar(time.Since(entry), false) }()
|
||||
}
|
||||
|
||||
st.outMu.Lock()
|
||||
// Save cursor; emit the sidebar; restore.
|
||||
|
||||
Reference in New Issue
Block a user