@@ -38,6 +38,10 @@ export class ExtensionRunningLocationTracker {
3838 @IExtensionManifestPropertiesService private readonly _extensionManifestPropertiesService : IExtensionManifestPropertiesService ,
3939 ) { }
4040
41+ public set ( extensionId : ExtensionIdentifier , runningLocation : ExtensionRunningLocation ) {
42+ this . _runningLocation . set ( extensionId , runningLocation ) ;
43+ }
44+
4145 public readExtensionKinds ( extensionDescription : IExtensionDescription ) : ExtensionKind [ ] {
4246 if ( extensionDescription . isUnderDevelopment && this . _environmentService . extensionDevelopmentKind ) {
4347 return this . _environmentService . extensionDevelopmentKind ;
@@ -196,10 +200,14 @@ export class ExtensionRunningLocationTracker {
196200 }
197201
198202 public computeRunningLocation ( localExtensions : IExtensionDescription [ ] , remoteExtensions : IExtensionDescription [ ] , isInitialAllocation : boolean ) : ExtensionIdentifierMap < ExtensionRunningLocation | null > {
199- return this . _doComputeRunningLocation ( localExtensions , remoteExtensions , isInitialAllocation ) . runningLocation ;
203+ return this . _doComputeRunningLocation ( this . _runningLocation , localExtensions , remoteExtensions , isInitialAllocation ) . runningLocation ;
200204 }
201205
202- private _doComputeRunningLocation ( localExtensions : IExtensionDescription [ ] , remoteExtensions : IExtensionDescription [ ] , isInitialAllocation : boolean ) : { runningLocation : ExtensionIdentifierMap < ExtensionRunningLocation | null > ; maxLocalProcessAffinity : number ; maxLocalWebWorkerAffinity : number } {
206+ private _doComputeRunningLocation ( existingRunningLocation : ExtensionIdentifierMap < ExtensionRunningLocation | null > , localExtensions : IExtensionDescription [ ] , remoteExtensions : IExtensionDescription [ ] , isInitialAllocation : boolean ) : { runningLocation : ExtensionIdentifierMap < ExtensionRunningLocation | null > ; maxLocalProcessAffinity : number ; maxLocalWebWorkerAffinity : number } {
207+ // Skip extensions that have an existing running location
208+ localExtensions = localExtensions . filter ( extension => ! existingRunningLocation . has ( extension . identifier ) ) ;
209+ remoteExtensions = remoteExtensions . filter ( extension => ! existingRunningLocation . has ( extension . identifier ) ) ;
210+
203211 const extensionHostKinds = determineExtensionHostKinds (
204212 localExtensions ,
205213 remoteExtensions ,
@@ -247,11 +255,18 @@ export class ExtensionRunningLocationTracker {
247255 result . set ( extension . identifier , new LocalWebWorkerRunningLocation ( affinity ) ) ;
248256 }
249257
258+ // Add extensions that already have an existing running location
259+ for ( const [ extensionIdKey , runningLocation ] of existingRunningLocation ) {
260+ if ( runningLocation ) {
261+ result . set ( extensionIdKey , runningLocation ) ;
262+ }
263+ }
264+
250265 return { runningLocation : result , maxLocalProcessAffinity : maxAffinity , maxLocalWebWorkerAffinity : maxLocalWebWorkerAffinity } ;
251266 }
252267
253268 public initializeRunningLocation ( localExtensions : IExtensionDescription [ ] , remoteExtensions : IExtensionDescription [ ] ) : void {
254- const { runningLocation, maxLocalProcessAffinity, maxLocalWebWorkerAffinity } = this . _doComputeRunningLocation ( localExtensions , remoteExtensions , true ) ;
269+ const { runningLocation, maxLocalProcessAffinity, maxLocalWebWorkerAffinity } = this . _doComputeRunningLocation ( this . _runningLocation , localExtensions , remoteExtensions , true ) ;
255270 this . _runningLocation = runningLocation ;
256271 this . _maxLocalProcessAffinity = maxLocalProcessAffinity ;
257272 this . _maxLocalWebWorkerAffinity = maxLocalWebWorkerAffinity ;
0 commit comments