@@ -87,6 +87,9 @@ class LocalTerminalBackend extends BaseTerminalBackend implements ITerminalBacke
87
87
this . _proxy = ProxyChannel . toService < IPtyService > ( getDelayedChannel ( clientEventually . p . then ( client => client . getChannel ( TerminalIpcChannels . PtyHostWindow ) ) ) ) ;
88
88
this . _connectToDirectProxy ( clientEventually ) ;
89
89
} ) ) ;
90
+
91
+ // Eagerly fetch the backend's environment for memoization
92
+ this . getEnvironment ( ) ;
90
93
}
91
94
92
95
private async _connectToDirectProxy ( clientEventually : DeferredPromise < MessagePortClient > ) : Promise < void > {
@@ -242,6 +245,7 @@ class LocalTerminalBackend extends BaseTerminalBackend implements ITerminalBacke
242
245
return this . _proxy . getEnvironment ( ) ;
243
246
}
244
247
248
+ @memoize
245
249
async getShellEnvironment ( ) : Promise < IProcessEnvironment > {
246
250
return this . _shellEnvironmentService . getShellEnv ( ) ;
247
251
}
@@ -279,22 +283,24 @@ class LocalTerminalBackend extends BaseTerminalBackend implements ITerminalBacke
279
283
// Re-resolve the environments and replace it on the state so local terminals use a fresh
280
284
// environment
281
285
mark ( 'code/terminal/willGetReviveEnvironments' ) ;
282
- for ( const state of parsed ) {
283
- const freshEnv = await this . _resolveEnvironmentForRevive ( variableResolver , state . shellLaunchConfig ) ;
284
- state . processLaunchConfig . env = freshEnv ;
285
- }
286
+ await Promise . all ( parsed . map ( state => new Promise < void > ( r => {
287
+ this . _resolveEnvironmentForRevive ( variableResolver , state . shellLaunchConfig ) . then ( freshEnv => {
288
+ state . processLaunchConfig . env = freshEnv ;
289
+ r ( ) ;
290
+ } ) ;
291
+ } ) ) ) ;
286
292
mark ( 'code/terminal/didGetReviveEnvironments' ) ;
287
293
288
294
mark ( 'code/terminal/willReviveTerminalProcesses' ) ;
289
- await this . _localPtyService . reviveTerminalProcesses ( parsed , Intl . DateTimeFormat ( ) . resolvedOptions ( ) . locale ) ;
295
+ await this . _proxy . reviveTerminalProcesses ( parsed , Intl . DateTimeFormat ( ) . resolvedOptions ( ) . locale ) ;
290
296
mark ( 'code/terminal/didReviveTerminalProcesses' ) ;
291
297
this . _storageService . remove ( TerminalStorageKeys . TerminalBufferState , StorageScope . WORKSPACE ) ;
292
298
// If reviving processes, send the terminal layout info back to the pty host as it
293
299
// will not have been persisted on application exit
294
300
const layoutInfo = this . _storageService . get ( TerminalStorageKeys . TerminalLayoutInfo , StorageScope . WORKSPACE ) ;
295
301
if ( layoutInfo ) {
296
302
mark ( 'code/terminal/willSetTerminalLayoutInfo' ) ;
297
- await this . _localPtyService . setTerminalLayoutInfo ( JSON . parse ( layoutInfo ) ) ;
303
+ await this . _proxy . setTerminalLayoutInfo ( JSON . parse ( layoutInfo ) ) ;
298
304
mark ( 'code/terminal/didSetTerminalLayoutInfo' ) ;
299
305
this . _storageService . remove ( TerminalStorageKeys . TerminalLayoutInfo , StorageScope . WORKSPACE ) ;
300
306
}
@@ -303,7 +309,7 @@ class LocalTerminalBackend extends BaseTerminalBackend implements ITerminalBacke
303
309
}
304
310
}
305
311
306
- return this . _localPtyService . getTerminalLayoutInfo ( layoutArgs ) ;
312
+ return this . _proxy . getTerminalLayoutInfo ( layoutArgs ) ;
307
313
}
308
314
309
315
private async _resolveEnvironmentForRevive ( variableResolver : terminalEnvironment . VariableResolver | undefined , shellLaunchConfig : IShellLaunchConfig ) : Promise < IProcessEnvironment > {
0 commit comments