From 4350ccddbba68f1f2f2bccf0938e828bd2479a67 Mon Sep 17 00:00:00 2001 From: Daniel Imms <2193314+Tyriar@users.noreply.github.com> Date: Fri, 23 Jun 2023 15:43:42 -0700 Subject: [PATCH] Revive terminal procs in parallel Part of #185393 --- src/vs/platform/terminal/node/ptyService.ts | 62 +++++++++++---------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index d976de219a3..da33525f5a5 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -204,36 +204,42 @@ export class PtyService extends Disposable implements IPtyService { @traceRpc async reviveTerminalProcesses(state: ISerializedTerminalState[], dateTimeFormatLocale: string) { + const promises: Promise[] = []; for (const terminal of state) { - const restoreMessage = localize('terminal-history-restored', "History restored"); - // TODO: We may at some point want to show date information in a hover via a custom sequence: - // new Date(terminal.timestamp).toLocaleDateString(dateTimeFormatLocale) - // new Date(terminal.timestamp).toLocaleTimeString(dateTimeFormatLocale) - const newId = await this.createProcess( - { - ...terminal.shellLaunchConfig, - cwd: terminal.processDetails.cwd, - color: terminal.processDetails.color, - icon: terminal.processDetails.icon, - name: terminal.processDetails.titleSource === TitleEventSource.Api ? terminal.processDetails.title : undefined, - initialText: terminal.replayEvent.events[0].data + formatMessageForTerminal(restoreMessage, { loudFormatting: true }) - }, - terminal.processDetails.cwd, - terminal.replayEvent.events[0].cols, - terminal.replayEvent.events[0].rows, - terminal.unicodeVersion, - terminal.processLaunchConfig.env, - terminal.processLaunchConfig.executableEnv, - terminal.processLaunchConfig.options, - true, - terminal.processDetails.workspaceId, - terminal.processDetails.workspaceName, - true, - terminal.replayEvent.events[0].data - ); - // Don't start the process here as there's no terminal to answer CPR - this._revivedPtyIdMap.set(terminal.id, { newId, state: terminal }); + promises.push(this._reviveTerminalProcess(terminal)); } + await Promise.all(promises); + } + + private async _reviveTerminalProcess(terminal: ISerializedTerminalState): Promise { + const restoreMessage = localize('terminal-history-restored', "History restored"); + // TODO: We may at some point want to show date information in a hover via a custom sequence: + // new Date(terminal.timestamp).toLocaleDateString(dateTimeFormatLocale) + // new Date(terminal.timestamp).toLocaleTimeString(dateTimeFormatLocale) + const newId = await this.createProcess( + { + ...terminal.shellLaunchConfig, + cwd: terminal.processDetails.cwd, + color: terminal.processDetails.color, + icon: terminal.processDetails.icon, + name: terminal.processDetails.titleSource === TitleEventSource.Api ? terminal.processDetails.title : undefined, + initialText: terminal.replayEvent.events[0].data + formatMessageForTerminal(restoreMessage, { loudFormatting: true }) + }, + terminal.processDetails.cwd, + terminal.replayEvent.events[0].cols, + terminal.replayEvent.events[0].rows, + terminal.unicodeVersion, + terminal.processLaunchConfig.env, + terminal.processLaunchConfig.executableEnv, + terminal.processLaunchConfig.options, + true, + terminal.processDetails.workspaceId, + terminal.processDetails.workspaceName, + true, + terminal.replayEvent.events[0].data + ); + // Don't start the process here as there's no terminal to answer CPR + this._revivedPtyIdMap.set(terminal.id, { newId, state: terminal }); } @traceRpc