Merge pull request #194644 from microsoft/tyriar/192816

Fix term exception during font measurement
This commit is contained in:
Daniel Imms
2023-10-03 11:39:25 -07:00
committed by GitHub
3 changed files with 10 additions and 7 deletions
@@ -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
};
}
}
@@ -39,7 +39,9 @@ export interface IXtermCore {
}
},
_renderer: {
_renderLayers?: any[];
value?: {
_renderLayers?: any[];
}
};
_handleIntersectionChange: any;
};
@@ -839,10 +839,10 @@ export class XtermTerminal extends Disposable implements IXtermTerminal, IDetach
private async _measureRenderTime(): Promise<void> {
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