From bf8b02801dd04092a2e62092c785870fece11dba Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 6 Sep 2020 15:19:26 -0700 Subject: [PATCH 1/4] Remove unwanted log --- .../workbench/contrib/terminal/browser/widgets/widgetManager.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts b/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts index 286a70c904421..032610dbea7a5 100644 --- a/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts @@ -36,7 +36,6 @@ export class TerminalWidgetManager implements IDisposable { dispose: () => { const current = this._attached.get(widget.id); if (current === widget) { - console.log('widget dispose', widget); this._attached.delete(widget.id); widget.dispose(); } From 47b0b0d2d51c5116b6a395133f591442b41fd2a8 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 6 Sep 2020 18:53:17 -0700 Subject: [PATCH 2/4] xterm@4.9.0-beta.25, xterm-addon-webgl@0.9.0-beta.1 Part of #69665 --- package.json | 4 ++-- remote/package.json | 4 ++-- remote/web/package.json | 4 ++-- remote/web/yarn.lock | 18 +++++++++--------- remote/yarn.lock | 18 +++++++++--------- yarn.lock | 18 +++++++++--------- 6 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 349b00bf3edf3..8956166cbdc73 100644 --- a/package.json +++ b/package.json @@ -71,10 +71,10 @@ "vscode-ripgrep": "^1.8.0", "vscode-sqlite3": "4.0.10", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.24", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0", + "xterm-addon-webgl": "0.9.0-beta.1", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, diff --git a/remote/package.json b/remote/package.json index 9889d63800e87..4258f46d2b5bc 100644 --- a/remote/package.json +++ b/remote/package.json @@ -20,10 +20,10 @@ "vscode-proxy-agent": "^0.5.2", "vscode-ripgrep": "^1.8.0", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.24", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0", + "xterm-addon-webgl": "0.9.0-beta.1", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, diff --git a/remote/web/package.json b/remote/web/package.json index 35155a77096d0..fc4855b4ab782 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -7,9 +7,9 @@ "semver-umd": "^5.5.7", "vscode-oniguruma": "1.3.1", "vscode-textmate": "5.2.0", - "xterm": "4.9.0-beta.24", + "xterm": "4.9.0-beta.25", "xterm-addon-search": "0.7.0", "xterm-addon-unicode11": "0.2.0", - "xterm-addon-webgl": "0.8.0" + "xterm-addon-webgl": "0.9.0-beta.1" } } diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index a19f4e291cc3c..a5498289c434f 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -37,12 +37,12 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== - -xterm@4.9.0-beta.24: - version "4.9.0-beta.24" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5" - integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== + +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== diff --git a/remote/yarn.lock b/remote/yarn.lock index 2ed9daf35556a..b4592d2166fa6 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -440,15 +440,15 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== - -xterm@4.9.0-beta.24: - version "4.9.0-beta.24" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5" - integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== + +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== yauzl@^2.9.2: version "2.10.0" diff --git a/yarn.lock b/yarn.lock index e771d018a2f8f..c0616048bdedb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10045,15 +10045,15 @@ xterm-addon-unicode11@0.2.0: resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c" integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q== -xterm-addon-webgl@0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f" - integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ== - -xterm@4.9.0-beta.24: - version "4.9.0-beta.24" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5" - integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg== +xterm-addon-webgl@0.9.0-beta.1: + version "0.9.0-beta.1" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2" + integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ== + +xterm@4.9.0-beta.25: + version "4.9.0-beta.25" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b" + integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg== y18n@^3.2.1: version "3.2.1" From ae71b56fc0b9e3672d3a6d74497bdc386ba534ea Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 6 Sep 2020 18:57:41 -0700 Subject: [PATCH 3/4] Clear webgl renderer texture on OS resume --- .../contrib/terminal/browser/terminalInstance.ts | 10 ++++++++-- .../electron-browser/terminalNativeContribution.ts | 6 +----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 79f07081f1f8d..e4f7215c89339 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -35,6 +35,7 @@ import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/te import type { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm'; import type { SearchAddon, ISearchOptions } from 'xterm-addon-search'; import type { Unicode11Addon } from 'xterm-addon-unicode11'; +import type { WebglAddon } from 'xterm-addon-webgl'; import { CommandTrackerAddon } from 'vs/workbench/contrib/terminal/browser/addons/commandTrackerAddon'; import { NavigationModeAddon } from 'vs/workbench/contrib/terminal/browser/addons/navigationModeAddon'; import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private'; @@ -105,6 +106,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { private _widgetManager: TerminalWidgetManager = this._instantiationService.createInstance(TerminalWidgetManager); private _linkManager: TerminalLinkManager | undefined; private _environmentInfo: { widget: EnvironmentVariableInfoWidget, disposable: IDisposable } | undefined; + private _webglAddon: WebglAddon | undefined; private _commandTrackerAddon: CommandTrackerAddon | undefined; private _navigationModeAddon: INavigationMode & ITerminalAddon | undefined; @@ -497,7 +499,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { xterm.open(this._xtermElement); if (this._configHelper.config.rendererType === 'experimentalWebgl') { this._terminalInstanceService.getXtermWebglConstructor().then(Addon => { - xterm.loadAddon(new Addon()); + this._webglAddon = new Addon(); + xterm.loadAddon(this._webglAddon); }); } @@ -767,7 +770,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { if (!this._xterm) { return; } - this._xterm.refresh(0, this._xterm.rows - 1); + this._webglAddon?.clearTextureAtlas(); + // TODO: Do other renderers? } public focus(force?: boolean): void { @@ -1228,6 +1232,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._safeSetOption('rightClickSelectsWord', config.rightClickBehavior === 'selectWord'); this._safeSetOption('wordSeparator', config.wordSeparators); if (config.rendererType !== 'experimentalWebgl') { + // TODO: Unset/dispose this._webglAddon + // Never set webgl as it's an addon not a rendererType this._safeSetOption('rendererType', config.rendererType === 'auto' ? 'canvas' : config.rendererType); } diff --git a/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts b/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts index 8f8919ebd0a20..0181e5049038e 100644 --- a/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts +++ b/src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts @@ -46,11 +46,7 @@ export class TerminalNativeContribution extends Disposable implements IWorkbench } private _onOsResume(): void { - const activeTab = this._terminalService.getActiveTab(); - if (!activeTab) { - return; - } - activeTab.terminalInstances.forEach(instance => instance.forceRedraw()); + this._terminalService.terminalInstances.forEach(instance => instance.forceRedraw()); } private async _onOpenFileRequest(request: INativeOpenFileRequest): Promise { From fee2d3610ce8967faddd5d120b43e0aad4726798 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 6 Sep 2020 19:08:34 -0700 Subject: [PATCH 4/4] Support hot swap on webgl renderer Fixes #85970 --- .../terminal/browser/terminalInstance.ts | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index e4f7215c89339..76de543e187d1 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -498,10 +498,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._container.appendChild(this._wrapperElement); xterm.open(this._xtermElement); if (this._configHelper.config.rendererType === 'experimentalWebgl') { - this._terminalInstanceService.getXtermWebglConstructor().then(Addon => { - this._webglAddon = new Addon(); - xterm.loadAddon(this._webglAddon); - }); + this._enableWebglRenderer(); } if (!xterm.element || !xterm.textarea) { @@ -771,7 +768,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { return; } this._webglAddon?.clearTextureAtlas(); - // TODO: Do other renderers? + // TODO: Do canvas renderer too? } public focus(force?: boolean): void { @@ -1231,15 +1228,26 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { this._safeSetOption('macOptionClickForcesSelection', config.macOptionClickForcesSelection); this._safeSetOption('rightClickSelectsWord', config.rightClickBehavior === 'selectWord'); this._safeSetOption('wordSeparator', config.wordSeparators); - if (config.rendererType !== 'experimentalWebgl') { - // TODO: Unset/dispose this._webglAddon - + if (config.rendererType === 'experimentalWebgl') { + this._enableWebglRenderer(); + } else { + this._webglAddon?.dispose(); + this._webglAddon = undefined; // Never set webgl as it's an addon not a rendererType this._safeSetOption('rendererType', config.rendererType === 'auto' ? 'canvas' : config.rendererType); } this._refreshEnvironmentVariableInfoWidgetState(this._processManager.environmentVariableInfo); } + private async _enableWebglRenderer(): Promise { + if (!this._xterm || this._webglAddon) { + return; + } + const Addon = await this._terminalInstanceService.getXtermWebglConstructor(); + this._webglAddon = new Addon(); + this._xterm.loadAddon(this._webglAddon); + } + private async _updateUnicodeVersion(): Promise { if (!this._xterm) { throw new Error('Cannot update unicode version before xterm has been initialized');