mirror of
https://github.com/stablyai/orca.git
synced 2026-09-22 00:02:31 +00:00
fix: avoid quadratic trimming during fullscreen terminal redraws (#19214)
This commit is contained in:
@@ -10,6 +10,75 @@
|
||||
}
|
||||
},
|
||||
"gates": [
|
||||
{
|
||||
"id": "terminal-performance.padded-fullscreen-redraw",
|
||||
"title": "Fullscreen redraw padding does not stall terminal delivery",
|
||||
"maturity": "experimental",
|
||||
"protection": "partial",
|
||||
"owner": "terminal-runtime",
|
||||
"layer": "runtime-unit-and-electron-cdp",
|
||||
"surfaces": ["terminal transcript preview", "fullscreen TUI scrolling"],
|
||||
"platforms": ["macos", "linux", "windows"],
|
||||
"providers": ["local", "daemon", "ssh", "remote-runtime"],
|
||||
"coveredPlatforms": ["macos"],
|
||||
"coveredProviders": ["local", "daemon"],
|
||||
"coverageNotes": "The trim operation is platform-independent and preserves the same spaces/tabs policy for all providers. Real Pi 0.84.2 was exercised in a hidden macOS Electron renderer through CDP using a folder workspace.",
|
||||
"motivatingLinks": ["https://github.com/stablyai/orca/issues/14770"],
|
||||
"invariant": "Transcript preview trimming preserves internal whitespace and terminal read contents without quadratic main-process work on padded fullscreen redraws.",
|
||||
"oracle": "Preserve 32,000 spaces before a marker while trimming trailing spaces/tabs in both retained-row and carried-prefix redraw paths; four redraws must finish within 500 ms. Existing tail equivalence tests preserve cursor, retention, and pagination behavior.",
|
||||
"commands": [
|
||||
"ORCA_BACKGROUND_LAUNCH=1 pnpm test src/main/runtime/terminal-tail-whitespace.test.ts src/main/runtime/terminal-tail-buffer.test.ts src/main/runtime/retained-tail-redraw-window.equivalence.test.ts"
|
||||
],
|
||||
"testFiles": [
|
||||
"src/main/runtime/terminal-tail-whitespace.test.ts",
|
||||
"src/main/runtime/terminal-tail-buffer.test.ts",
|
||||
"src/main/runtime/retained-tail-redraw-window.equivalence.test.ts"
|
||||
],
|
||||
"assertionRefs": [
|
||||
{
|
||||
"file": "src/main/runtime/terminal-tail-whitespace.test.ts",
|
||||
"assertions": [
|
||||
"handles padded redraws across %i retained rows without stalling",
|
||||
"preserves terminal text while trimming spaces and tabs: %j"
|
||||
]
|
||||
}
|
||||
],
|
||||
"evidenceRuns": [
|
||||
{
|
||||
"date": "2026-09-06",
|
||||
"runner": "local",
|
||||
"platform": "macos",
|
||||
"command": "ORCA_BACKGROUND_LAUNCH=1 pnpm test src/main/runtime/terminal-tail-whitespace.test.ts src/main/runtime/terminal-tail-buffer.test.ts src/main/runtime/retained-tail-redraw-window.equivalence.test.ts",
|
||||
"result": "passed",
|
||||
"durationSeconds": 3.96,
|
||||
"summary": "17 tests passed. Before the fix both padding budget cases failed, taking approximately 1.7 seconds each."
|
||||
}
|
||||
],
|
||||
"runtimeBudget": {
|
||||
"p95Seconds": 30,
|
||||
"scope": "Three unit test files; padding cases allow 500 ms for four redraws."
|
||||
},
|
||||
"flakeHistory": {
|
||||
"status": "not-started",
|
||||
"evidence": "Initial local red/green validation; no CI soak history yet."
|
||||
},
|
||||
"redGreenEvidence": {
|
||||
"status": "complete",
|
||||
"evidence": "Both padding budget cases fail with regex trimming and pass with the existing linear trim. A 60-event CDP wheel stream in Pi fullscreen had about 2.1 seconds of output tail before the fix and 14 ms after rebuilding."
|
||||
},
|
||||
"performanceBudget": {
|
||||
"required": true,
|
||||
"evidence": "The main CPU profile attributed 3.1 seconds to redraw-row whitespace trimming. Reusing the linear trim adds no timers, caches, provider calls, or output dropping."
|
||||
},
|
||||
"knownGaps": [
|
||||
"The user manually compared the fixed dev app with production and confirmed improved responsiveness. A live Terminal.app comparison was not exercised; timing measurements used CDP wheel events.",
|
||||
"Linux, Windows, and live SSH rendering were not exercised; the shared trimming behavior is covered by unit tests."
|
||||
],
|
||||
"promotionCriteria": [
|
||||
"Complete CI soak requirements and retain the padding budget and tail equivalence oracles."
|
||||
],
|
||||
"demotionRule": "Keep experimental until CI soak is stable; investigate any budget failure without weakening transcript preservation."
|
||||
},
|
||||
{
|
||||
"id": "ssh.localhost-terminal-agent-hooks",
|
||||
"title": "Localhost SSH terminal and agent hooks reach the owning pane",
|
||||
|
||||
@@ -293,7 +293,7 @@ function appendNormalizedToMultilineTailBuffer(
|
||||
const line = rewritten[index]!
|
||||
const lastChar = line.charCodeAt(line.length - 1)
|
||||
if (lastChar === 32 || lastChar === 9) {
|
||||
rewritten[index] = line.replace(/[ \t]+$/g, '')
|
||||
rewritten[index] = trimTerminalLineRight(line)
|
||||
}
|
||||
}
|
||||
for (const line of windowed.lines) {
|
||||
|
||||
@@ -185,7 +185,7 @@ function finalizeRetainedTerminalRows(
|
||||
newlyCompletedLines: string[]
|
||||
} {
|
||||
let truncated = initialTruncated
|
||||
let retainedRows = rows.map((row) => ({ ...row, text: row.text.replace(/[ \t]+$/g, '') }))
|
||||
let retainedRows = rows.map((row) => ({ ...row, text: trimTerminalLineRight(row.text) }))
|
||||
|
||||
if (retainedRows.length > MAX_TAIL_LINES + 1) {
|
||||
const removeCount = retainedRows.length - (MAX_TAIL_LINES + 1)
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import { performance } from 'node:perf_hooks'
|
||||
import { describe, expect, it } from 'vitest'
|
||||
import { appendNormalizedToTailBuffer } from './terminal-tail-buffer'
|
||||
import { trimTerminalLineRight } from './terminal-tail-line-controls'
|
||||
|
||||
describe('terminal redraw whitespace', () => {
|
||||
it.each([
|
||||
['hello \t', 'hello'],
|
||||
[' \thello \t world \t', ' \thello \t world'],
|
||||
[' \t', ''],
|
||||
['hello\u00a0 \t', 'hello\u00a0'],
|
||||
['hello\n', 'hello\n']
|
||||
])('preserves terminal text while trimming spaces and tabs: %j', (input, expected) => {
|
||||
expect(trimTerminalLineRight(input)).toBe(expected)
|
||||
})
|
||||
|
||||
it.each([2, 20])('handles padded redraws across %i retained rows without stalling', (rows) => {
|
||||
const padded = `${' '.repeat(32_000)}marker \t`
|
||||
const previousLines = Array.from({ length: rows }, (_, index) =>
|
||||
index === 0 ? padded : `row ${index}`
|
||||
)
|
||||
const start = performance.now()
|
||||
let result: ReturnType<typeof appendNormalizedToTailBuffer> | undefined
|
||||
for (let frame = 0; frame < 4; frame += 1) {
|
||||
result = appendNormalizedToTailBuffer(previousLines, 'footer', '\x1b[1A\rupdated')
|
||||
}
|
||||
const elapsedMs = performance.now() - start
|
||||
expect(result?.lines[0]).toBe(`${' '.repeat(32_000)}marker`)
|
||||
// Interior padding made the trailing-whitespace regex backtrack quadratically.
|
||||
expect(elapsedMs).toBeLessThan(500)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user