diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.test.ts b/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.test.ts index f3a3d4dc1a5..ad25839c9b5 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.test.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.test.ts @@ -78,14 +78,14 @@ describe('parked terminal viewport frames', () => { expect(local.serialize).not.toHaveBeenCalled() }) - it('replays a matching-grid frame and rebuilds WebGL after parsing', async () => { + it('replays a matching-grid frame and repaints after reveal layout settles', async () => { const matching = makePane(1, 'matching') const stale = makePane(2, 'stale') - const rebuildPaneWebgl = vi.fn() + const scheduleRevealRepaint = vi.fn() const manager = { getPanes: () => [matching.pane, stale.pane], - hasWebglRenderer: () => true, - rebuildPaneWebgl + hasWebglRenderer: () => false, + scheduleRevealRepaint } as unknown as PaneManager const replayingPanesRef = { current: new Map() } @@ -113,7 +113,7 @@ describe('parked terminal viewport frames', () => { ) expect(mocks.replayIntoTerminalAsync.mock.calls[0]?.[3].shouldReleaseRenderPause()).toBe(true) await Promise.resolve() - expect(rebuildPaneWebgl).toHaveBeenCalledWith(1) + expect(scheduleRevealRepaint).toHaveBeenCalledOnce() expect(consumeParkedTerminalViewportFrameMarker(matching.pane)).toBe(true) expect(consumeParkedTerminalViewportFrameMarker(matching.pane)).toBe(false) }) diff --git a/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.ts b/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.ts index 4b6ddc00086..fe96201dec6 100644 --- a/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.ts +++ b/src/renderer/src/components/terminal-pane/terminal-parked-viewport-frame.ts @@ -84,11 +84,10 @@ export function replayParkedTerminalViewportFrames(args: { void replay.then(() => { if ( pane.container.dataset[PARKED_VIEWPORT_FRAME_DATASET_KEY] === 'true' && - args.isVisible() && - args.manager.hasWebglRenderer(pane.id) + args.isVisible() ) { - // Why: WebGL attached to the empty remount can retain a blank render model until reactivated after parsing. - args.manager.rebuildPaneWebgl(pane.id) + // Why: the immediate refresh can precede measurable layout; repaint the parsed frame after reveal settles. + args.manager.scheduleRevealRepaint() } }) replayed += 1