Skip to content

Commit d42cf24

Browse files
authored
Take into account already activated extensions when computing running locations (microsoft#184303)
Take into account already activated extensions when computing running locations (fixes microsoft#184180)
1 parent b833970 commit d42cf24

File tree

2 files changed

+23
-7
lines changed

2 files changed

+23
-7
lines changed

src/vs/workbench/services/extensions/common/abstractExtensionService.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ export abstract class AbstractExtensionService extends Disposable implements IEx
738738
}
739739

740740
protected _doCreateExtensionHostManager(extensionHost: IExtensionHost, initialActivationEvents: string[]): IExtensionHostManager {
741-
return createExtensionHostManager(this._instantiationService, extensionHost, initialActivationEvents, this._acquireInternalAPI());
741+
return createExtensionHostManager(this._instantiationService, extensionHost, initialActivationEvents, this._acquireInternalAPI(extensionHost));
742742
}
743743

744744
private _onExtensionHostCrashOrExit(extensionHost: IExtensionHostManager, code: number, signal: string | null): void {
@@ -1070,13 +1070,13 @@ export abstract class AbstractExtensionService extends Disposable implements IEx
10701070

10711071
//#region Called by extension host
10721072

1073-
private _acquireInternalAPI(): IInternalExtensionService {
1073+
private _acquireInternalAPI(extensionHost: IExtensionHost): IInternalExtensionService {
10741074
return {
10751075
_activateById: (extensionId: ExtensionIdentifier, reason: ExtensionActivationReason): Promise<void> => {
10761076
return this._activateById(extensionId, reason);
10771077
},
10781078
_onWillActivateExtension: (extensionId: ExtensionIdentifier): void => {
1079-
return this._onWillActivateExtension(extensionId);
1079+
return this._onWillActivateExtension(extensionId, extensionHost.runningLocation);
10801080
},
10811081
_onDidActivateExtension: (extensionId: ExtensionIdentifier, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationReason: ExtensionActivationReason): void => {
10821082
return this._onDidActivateExtension(extensionId, codeLoadingTime, activateCallTime, activateResolvedTime, activationReason);
@@ -1100,7 +1100,8 @@ export abstract class AbstractExtensionService extends Disposable implements IEx
11001100
}
11011101
}
11021102

1103-
private _onWillActivateExtension(extensionId: ExtensionIdentifier): void {
1103+
private _onWillActivateExtension(extensionId: ExtensionIdentifier, runningLocation: ExtensionRunningLocation): void {
1104+
this._runningLocations.set(extensionId, runningLocation);
11041105
const extensionStatus = this._getOrCreateExtensionStatus(extensionId);
11051106
extensionStatus.onWillActivate();
11061107
}

src/vs/workbench/services/extensions/common/extensionRunningLocationTracker.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)