Revive terminal procs in parallel

Part of #185393
This commit is contained in:
Daniel Imms
2023-06-23 15:43:42 -07:00
parent d5f6bc6a83
commit 4350ccddbb
+34 -28
View File
@@ -204,36 +204,42 @@ export class PtyService extends Disposable implements IPtyService {
@traceRpc
async reviveTerminalProcesses(state: ISerializedTerminalState[], dateTimeFormatLocale: string) {
const promises: Promise<void>[] = [];
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<void> {
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