revert(tui): drop DeferredMd, profiling showed it was neutral

Profiled with scripts/profile-tui.py under hold-PageUp + hold-wheel.
The placeholder → microtask-upgrade pattern did not reduce renderer
p99 (63ms → 63ms) or max (96ms → 142ms, slightly worse).  Each fresh
row still pays the Md cost — just on a follow-up commit instead of
inline — and the follow-up commit shows up as a second heavy frame
a few ms later.

The real bottlenecks turned out to be:

  1. wheel step too large (fixed in 7ca16eea)
  2. outer terminal ANSI parse throughput (diagnosing next)
  3. React commit frequency during hold-scroll (needs coalescing)

None of which DeferredMd addresses.  Clearing the complexity so the
next experiments land on a simpler substrate.
This commit is contained in:
Brooklyn Nicholson
2026-04-26 17:03:38 -05:00
parent 7ca16eea56
commit d3dedf10aa
3 changed files with 3 additions and 98 deletions

View File

@@ -9,7 +9,7 @@ import { boundedLiveRenderText, compactPreview, hasAnsi, isPasteBackedText, stri
import type { Theme } from '../theme.js'
import type { ActiveTool, DetailsMode, Msg, SectionVisibility } from '../types.js'
import { DeferredMd } from './deferredMarkdown.js'
import { Md } from './markdown.js'
import { StreamingMd } from './streamingMarkdown.js'
import { ToolTrail } from './thinking.js'
import { TodoPanel } from './todoPanel.js'
@@ -107,12 +107,7 @@ export const MessageLine = memo(function MessageLine({
// streamingMarkdown.tsx for the cost model.
<StreamingMd compact={compact} t={t} text={boundedLiveRenderText(msg.text)} />
) : (
// Deferred markdown: plain-text placeholder on first mount, upgrade
// to full Md on a queued microtask. Spreads the tokenizer + syntax
// cost off the scroll critical path so hold-PageUp doesn't hitch
// on fresh assistant rows entering overscan. See
// deferredMarkdown.tsx for the trade-offs.
<DeferredMd color={body} compact={compact} t={t} text={msg.text} />
<Md compact={compact} t={t} text={msg.text} />
)
}