From 499fe3f0ecf515705721a6ab4d66592f2f4a58a7 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Mon, 2 Oct 2023 11:40:26 -0700 Subject: [PATCH 1/2] Fix term exception during font measurement Fixes #192816 Fixes #194438 Fixes #194156 --- .../contrib/terminal/browser/terminalConfigHelper.ts | 9 +++++---- .../contrib/terminal/browser/xterm-private.d.ts | 4 +++- .../contrib/terminal/browser/xterm/xtermTerminal.ts | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts b/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts index fd27c75f4f7..d0b86a3dbf1 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts @@ -191,15 +191,16 @@ export class TerminalConfigHelper extends Disposable implements IBrowserTerminal } // Get the character dimensions from xterm if it's available - if (xtermCore) { - if (xtermCore._renderService && xtermCore._renderService.dimensions?.css.cell.width && xtermCore._renderService.dimensions?.css.cell.height) { + if (xtermCore?._renderService._renderer.value) { + const cellDims = xtermCore._renderService.dimensions.css.cell; + if (cellDims?.width && cellDims?.height) { return { fontFamily, fontSize, letterSpacing, lineHeight, - charHeight: xtermCore._renderService.dimensions.css.cell.height / lineHeight, - charWidth: xtermCore._renderService.dimensions.css.cell.width - Math.round(letterSpacing) / window.devicePixelRatio + charHeight: cellDims.height / lineHeight, + charWidth: cellDims.width - Math.round(letterSpacing) / window.devicePixelRatio }; } } diff --git a/src/vs/workbench/contrib/terminal/browser/xterm-private.d.ts b/src/vs/workbench/contrib/terminal/browser/xterm-private.d.ts index 7be81115a66..77592d9e033 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm-private.d.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm-private.d.ts @@ -39,7 +39,9 @@ export interface IXtermCore { } }, _renderer: { - _renderLayers?: any[]; + value?: { + _renderLayers?: any[]; + } }; _handleIntersectionChange: any; }; diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts index ac1a2096320..de0fc6f8d5a 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/xtermTerminal.ts @@ -837,10 +837,10 @@ export class XtermTerminal extends Disposable implements IXtermTerminal, IDetach private async _measureRenderTime(): Promise { const frameTimes: number[] = []; - if (!this._core._renderService?._renderer._renderLayers) { + if (!this._core._renderService?._renderer.value?._renderLayers) { return; } - const textRenderLayer = this._core._renderService._renderer._renderLayers[0]; + const textRenderLayer = this._core._renderService._renderer.value._renderLayers[0]; const originalOnGridChanged = textRenderLayer?.onGridChanged; const evaluateCanvasRenderer = () => { // Discard first frame time as it's normal to take longer From bbe37fe98768c750e788f639e83b505152e2b011 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:12:31 -0700 Subject: [PATCH 2/2] Fix tests --- .../workbench/contrib/terminal/browser/terminalConfigHelper.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts b/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts index d0b86a3dbf1..552d69c615e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalConfigHelper.ts @@ -191,7 +191,7 @@ export class TerminalConfigHelper extends Disposable implements IBrowserTerminal } // Get the character dimensions from xterm if it's available - if (xtermCore?._renderService._renderer.value) { + if (xtermCore?._renderService?._renderer.value) { const cellDims = xtermCore._renderService.dimensions.css.cell; if (cellDims?.width && cellDims?.height) { return {