Skip to content

Commit a4befc3

Browse files
authored
Merge pull request microsoft#106203 from microsoft/tyriar/webgl
Hot swap support and force redraw on resume with webgl renderer
2 parents 0d8cc5e + fee2d36 commit a4befc3

9 files changed

Lines changed: 53 additions & 44 deletions

File tree

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@
7171
"vscode-ripgrep": "^1.8.0",
7272
"vscode-sqlite3": "4.0.10",
7373
"vscode-textmate": "5.2.0",
74-
"xterm": "4.9.0-beta.24",
74+
"xterm": "4.9.0-beta.25",
7575
"xterm-addon-search": "0.7.0",
7676
"xterm-addon-unicode11": "0.2.0",
77-
"xterm-addon-webgl": "0.8.0",
77+
"xterm-addon-webgl": "0.9.0-beta.1",
7878
"yauzl": "^2.9.2",
7979
"yazl": "^2.4.3"
8080
},

remote/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@
2020
"vscode-proxy-agent": "^0.5.2",
2121
"vscode-ripgrep": "^1.8.0",
2222
"vscode-textmate": "5.2.0",
23-
"xterm": "4.9.0-beta.24",
23+
"xterm": "4.9.0-beta.25",
2424
"xterm-addon-search": "0.7.0",
2525
"xterm-addon-unicode11": "0.2.0",
26-
"xterm-addon-webgl": "0.8.0",
26+
"xterm-addon-webgl": "0.9.0-beta.1",
2727
"yauzl": "^2.9.2",
2828
"yazl": "^2.4.3"
2929
},

remote/web/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
"semver-umd": "^5.5.7",
88
"vscode-oniguruma": "1.3.1",
99
"vscode-textmate": "5.2.0",
10-
"xterm": "4.9.0-beta.24",
10+
"xterm": "4.9.0-beta.25",
1111
"xterm-addon-search": "0.7.0",
1212
"xterm-addon-unicode11": "0.2.0",
13-
"xterm-addon-webgl": "0.8.0"
13+
"xterm-addon-webgl": "0.9.0-beta.1"
1414
}
1515
}

remote/web/yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ xterm-addon-unicode11@0.2.0:
3737
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c"
3838
integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q==
3939

40-
xterm-addon-webgl@0.8.0:
41-
version "0.8.0"
42-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f"
43-
integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ==
44-
45-
xterm@4.9.0-beta.24:
46-
version "4.9.0-beta.24"
47-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5"
48-
integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg==
40+
xterm-addon-webgl@0.9.0-beta.1:
41+
version "0.9.0-beta.1"
42+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2"
43+
integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ==
44+
45+
xterm@4.9.0-beta.25:
46+
version "4.9.0-beta.25"
47+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b"
48+
integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg==

remote/yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -440,15 +440,15 @@ xterm-addon-unicode11@0.2.0:
440440
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c"
441441
integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q==
442442

443-
xterm-addon-webgl@0.8.0:
444-
version "0.8.0"
445-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f"
446-
integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ==
447-
448-
xterm@4.9.0-beta.24:
449-
version "4.9.0-beta.24"
450-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5"
451-
integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg==
443+
xterm-addon-webgl@0.9.0-beta.1:
444+
version "0.9.0-beta.1"
445+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2"
446+
integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ==
447+
448+
xterm@4.9.0-beta.25:
449+
version "4.9.0-beta.25"
450+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b"
451+
integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg==
452452

453453
yauzl@^2.9.2:
454454
version "2.10.0"

src/vs/workbench/contrib/terminal/browser/terminalInstance.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import { TerminalProcessManager } from 'vs/workbench/contrib/terminal/browser/te
3535
import type { Terminal as XTermTerminal, IBuffer, ITerminalAddon } from 'xterm';
3636
import type { SearchAddon, ISearchOptions } from 'xterm-addon-search';
3737
import type { Unicode11Addon } from 'xterm-addon-unicode11';
38+
import type { WebglAddon } from 'xterm-addon-webgl';
3839
import { CommandTrackerAddon } from 'vs/workbench/contrib/terminal/browser/addons/commandTrackerAddon';
3940
import { NavigationModeAddon } from 'vs/workbench/contrib/terminal/browser/addons/navigationModeAddon';
4041
import { XTermCore } from 'vs/workbench/contrib/terminal/browser/xterm-private';
@@ -105,6 +106,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
105106
private _widgetManager: TerminalWidgetManager = this._instantiationService.createInstance(TerminalWidgetManager);
106107
private _linkManager: TerminalLinkManager | undefined;
107108
private _environmentInfo: { widget: EnvironmentVariableInfoWidget, disposable: IDisposable } | undefined;
109+
private _webglAddon: WebglAddon | undefined;
108110
private _commandTrackerAddon: CommandTrackerAddon | undefined;
109111
private _navigationModeAddon: INavigationMode & ITerminalAddon | undefined;
110112

@@ -496,9 +498,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
496498
this._container.appendChild(this._wrapperElement);
497499
xterm.open(this._xtermElement);
498500
if (this._configHelper.config.rendererType === 'experimentalWebgl') {
499-
this._terminalInstanceService.getXtermWebglConstructor().then(Addon => {
500-
xterm.loadAddon(new Addon());
501-
});
501+
this._enableWebglRenderer();
502502
}
503503

504504
if (!xterm.element || !xterm.textarea) {
@@ -767,7 +767,8 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
767767
if (!this._xterm) {
768768
return;
769769
}
770-
this._xterm.refresh(0, this._xterm.rows - 1);
770+
this._webglAddon?.clearTextureAtlas();
771+
// TODO: Do canvas renderer too?
771772
}
772773

773774
public focus(force?: boolean): void {
@@ -1227,13 +1228,26 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
12271228
this._safeSetOption('macOptionClickForcesSelection', config.macOptionClickForcesSelection);
12281229
this._safeSetOption('rightClickSelectsWord', config.rightClickBehavior === 'selectWord');
12291230
this._safeSetOption('wordSeparator', config.wordSeparators);
1230-
if (config.rendererType !== 'experimentalWebgl') {
1231+
if (config.rendererType === 'experimentalWebgl') {
1232+
this._enableWebglRenderer();
1233+
} else {
1234+
this._webglAddon?.dispose();
1235+
this._webglAddon = undefined;
12311236
// Never set webgl as it's an addon not a rendererType
12321237
this._safeSetOption('rendererType', config.rendererType === 'auto' ? 'canvas' : config.rendererType);
12331238
}
12341239
this._refreshEnvironmentVariableInfoWidgetState(this._processManager.environmentVariableInfo);
12351240
}
12361241

1242+
private async _enableWebglRenderer(): Promise<void> {
1243+
if (!this._xterm || this._webglAddon) {
1244+
return;
1245+
}
1246+
const Addon = await this._terminalInstanceService.getXtermWebglConstructor();
1247+
this._webglAddon = new Addon();
1248+
this._xterm.loadAddon(this._webglAddon);
1249+
}
1250+
12371251
private async _updateUnicodeVersion(): Promise<void> {
12381252
if (!this._xterm) {
12391253
throw new Error('Cannot update unicode version before xterm has been initialized');

src/vs/workbench/contrib/terminal/browser/widgets/widgetManager.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ export class TerminalWidgetManager implements IDisposable {
3636
dispose: () => {
3737
const current = this._attached.get(widget.id);
3838
if (current === widget) {
39-
console.log('widget dispose', widget);
4039
this._attached.delete(widget.id);
4140
widget.dispose();
4241
}

src/vs/workbench/contrib/terminal/electron-browser/terminalNativeContribution.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,7 @@ export class TerminalNativeContribution extends Disposable implements IWorkbench
4646
}
4747

4848
private _onOsResume(): void {
49-
const activeTab = this._terminalService.getActiveTab();
50-
if (!activeTab) {
51-
return;
52-
}
53-
activeTab.terminalInstances.forEach(instance => instance.forceRedraw());
49+
this._terminalService.terminalInstances.forEach(instance => instance.forceRedraw());
5450
}
5551

5652
private async _onOpenFileRequest(request: INativeOpenFileRequest): Promise<void> {

yarn.lock

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10045,15 +10045,15 @@ xterm-addon-unicode11@0.2.0:
1004510045
resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.2.0.tgz#9ed0c482b353908bba27778893ca80823382737c"
1004610046
integrity sha512-rjFDItPc/IDoSiEnoDFwKroNwLD/7t9vYKENjrcKVZg5tgJuuUj8D4rZtP6iVCjSB1LTLYmUs4L/EmCqIyLR/Q==
1004710047

10048-
xterm-addon-webgl@0.8.0:
10049-
version "0.8.0"
10050-
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.8.0.tgz#4bc6bb4dbfea5b0d2d7978d6c5cef922d584fb4f"
10051-
integrity sha512-dlpYPsv0C9S6v6+T/h/d/otSbdUTizMJdxvSoS34tUpMOHev6iW7Zqt5KRFqYxl4vCqpDk9Wmhb3fKL3kwX5fQ==
10052-
10053-
xterm@4.9.0-beta.24:
10054-
version "4.9.0-beta.24"
10055-
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.24.tgz#48f0990c6d32ad3a9bcc4fb49531d7effdaccea5"
10056-
integrity sha512-CIVxxxbBiSw1WOMkIjjivaiIC9jNgih4klfWsRGx0qiDF5nbzHuLXkPTt+yAQUu9FCyTUwECm9Pkl3gUsSaGKg==
10048+
xterm-addon-webgl@0.9.0-beta.1:
10049+
version "0.9.0-beta.1"
10050+
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.9.0-beta.1.tgz#e0a4e9b71db7ef8182064236844caf32833214c2"
10051+
integrity sha512-yyIYfehzaqaOTOTjSapA3sEcaGDIPn0xAiWyRIWyW5zwTZIo7FA+O4IzhgAT9b7ioJWLcPoHPUA0OFNHAx20vQ==
10052+
10053+
xterm@4.9.0-beta.25:
10054+
version "4.9.0-beta.25"
10055+
resolved "https://registry.yarnpkg.com/xterm/-/xterm-4.9.0-beta.25.tgz#c229a144184ab7b3c3afdaff76f9d81bac58933b"
10056+
integrity sha512-NJHwuS7Qsoq/Yuobl+Au4rgol/oBNj4pGoR2R6IRnXODS5RDE4spHDofWKiUkDMlNZtPPku1W7k1kFnonDIhhg==
1005710057

1005810058
y18n@^3.2.1:
1005910059
version "3.2.1"

0 commit comments

Comments
 (0)