Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
41 lines
2.2 KiB
Markdown
41 lines
2.2 KiB
Markdown
# Background terminal rendering (#3278)
|
|
|
|
Inactive panes retain their live terminal and measured dimensions, but move
|
|
outside the viewport. This lets xterm's IntersectionObserver stop painting
|
|
without stopping output parsing or rebuilding the terminal on every tab switch.
|
|
The existing reveal, resize and WebGL recovery paths remain responsible for
|
|
restoring the current screen. No new output queue or lossy truncation is added.
|
|
|
|
## Regression coverage
|
|
|
|
Run `npm run test:terminal-background-rendering` with a graphical Electron
|
|
session (Linux CI uses xvfb). It bundles the production runtime and inactive
|
|
pane style helper, creates five real terminals, and verifies:
|
|
|
|
- The visible terminal paints while all four background terminals do not.
|
|
- Output is already parsed in each hidden terminal and dimensions stay valid.
|
|
- Twelve hide/reveal cycles repaint newly received output.
|
|
- A window-area resize does not collapse the hidden terminal's measured width.
|
|
- Cursor-addressed alternate-screen output survives hiding and a reveal resize.
|
|
- Two visible split panes paint while the remaining hidden panes do not.
|
|
|
|
Before this change, the first visibility assertion fails: each background pane
|
|
paints 12 frames instead of zero. The test does not claim to reproduce the
|
|
reporter's delayed high-CPU condition, and direct writes in this harness do not
|
|
exercise the complete SSH/output transport path.
|
|
|
|
## Local application validation
|
|
|
|
A separate Netcatty development instance with an isolated profile was tested on
|
|
macOS (M2 Max, 32GB), using five real local shell sessions. Four sessions emitted
|
|
continuous logs. The UI was exercised through tab switching, split creation,
|
|
focus mode, detaching back to a tab, closing the extra split, and window resizing.
|
|
Actual screen captures were checked for restored content. CPU comparisons use
|
|
that instance's renderer and GPU process metrics, not other applications.
|
|
|
|
This is a CPU optimization for invisible panes. It does not promise lower
|
|
history/GPU memory usage, nor establish the root cause of every #3278 report.
|
|
Remote SSH, Windows/Linux interactive recovery and the reporter's M4 environment
|
|
still require separate validation; this PR should reference rather than close
|
|
that issue automatically.
|