From 29dd4e77de87d76b7c37e889e7e6f8f8781d9d11 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Thu, 13 Dec 2018 11:22:13 +0100 Subject: [PATCH] Keep track of activating extensions --- .../api/electron-browser/mainThreadExtensionService.ts | 7 +++++-- src/vs/workbench/api/node/extHost.protocol.ts | 3 ++- src/vs/workbench/api/node/extHostExtensionService.ts | 3 ++- .../extensions/electron-browser/extensionService.ts | 9 ++++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts b/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts index da5059d81a3..3384488f2b4 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadExtensionService.ts @@ -30,8 +30,11 @@ export class MainThreadExtensionService implements MainThreadExtensionServiceSha $localShowMessage(severity: Severity, msg: string): void { this._extensionService._logOrShowMessage(severity, msg); } - $onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void { - this._extensionService._onExtensionActivated(extensionId, startup, codeLoadingTime, activateCallTime, activateResolvedTime, activationEvent); + $onWillActivateExtension(extensionId: string): void { + this._extensionService._onWillActivateExtension(extensionId); + } + $onDidActivateExtension(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void { + this._extensionService._onDidActivateExtension(extensionId, startup, codeLoadingTime, activateCallTime, activateResolvedTime, activationEvent); } $onExtensionRuntimeError(extensionId: string, data: SerializedError): void { const error = new Error(); diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index f1f5a4156ab..024fca4e640 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -538,7 +538,8 @@ export interface MainThreadTaskShape extends IDisposable { export interface MainThreadExtensionServiceShape extends IDisposable { $localShowMessage(severity: Severity, msg: string): void; - $onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void; + $onWillActivateExtension(extensionId: string): void; + $onDidActivateExtension(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void; $onExtensionActivationFailed(extensionId: string): void; $onExtensionRuntimeError(extensionId: string, error: SerializedError): void; $addMessage(extensionId: string, severity: Severity, message: string): void; diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 0ec3a8b249f..3905dfb9825 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -345,10 +345,11 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { // --- impl private _activateExtension(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason): Promise { + this._mainThreadExtensionsProxy.$onWillActivateExtension(extensionDescription.id); return this._doActivateExtension(extensionDescription, reason).then((activatedExtension) => { const activationTimes = activatedExtension.activationTimes; let activationEvent = (reason instanceof ExtensionActivatedByEvent ? reason.activationEvent : null); - this._mainThreadExtensionsProxy.$onExtensionActivated(extensionDescription.id, activationTimes.startup, activationTimes.codeLoadingTime, activationTimes.activateCallTime, activationTimes.activateResolvedTime, activationEvent); + this._mainThreadExtensionsProxy.$onDidActivateExtension(extensionDescription.id, activationTimes.startup, activationTimes.codeLoadingTime, activationTimes.activateCallTime, activationTimes.activateResolvedTime, activationEvent); this._logExtensionActivationTimes(extensionDescription, reason, 'success', activationTimes); return activatedExtension; }, (err) => { diff --git a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts index e59005035e2..fad35505c53 100644 --- a/src/vs/workbench/services/extensions/electron-browser/extensionService.ts +++ b/src/vs/workbench/services/extensions/electron-browser/extensionService.ts @@ -61,6 +61,7 @@ export class ExtensionService extends Disposable implements IExtensionService { // --- Members used per extension host process private _extensionHostProcessManagers: ExtensionHostProcessManager[]; + private _extensionHostActiveExtensions: { [id: string]: boolean; }; private _extensionHostProcessActivationTimes: { [id: string]: ActivationTimes; }; private _extensionHostExtensionRuntimeErrors: { [id: string]: Error[]; }; @@ -84,6 +85,7 @@ export class ExtensionService extends Disposable implements IExtensionService { this._extensionScanner = this._instantiationService.createInstance(CachedExtensionScanner); this._extensionHostProcessManagers = []; + this._extensionHostActiveExtensions = Object.create(null); this._extensionHostProcessActivationTimes = Object.create(null); this._extensionHostExtensionRuntimeErrors = Object.create(null); @@ -143,6 +145,7 @@ export class ExtensionService extends Disposable implements IExtensionService { this._extensionHostProcessManagers[i].dispose(); } this._extensionHostProcessManagers = []; + this._extensionHostActiveExtensions = Object.create(null); this._extensionHostProcessActivationTimes = Object.create(null); this._extensionHostExtensionRuntimeErrors = Object.create(null); @@ -518,7 +521,11 @@ export class ExtensionService extends Disposable implements IExtensionService { } } - public _onExtensionActivated(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void { + public _onWillActivateExtension(extensionId: string): void { + this._extensionHostActiveExtensions[extensionId] = true; + } + + public _onDidActivateExtension(extensionId: string, startup: boolean, codeLoadingTime: number, activateCallTime: number, activateResolvedTime: number, activationEvent: string): void { this._extensionHostProcessActivationTimes[extensionId] = new ActivationTimes(startup, codeLoadingTime, activateCallTime, activateResolvedTime, activationEvent); this._onDidChangeExtensionsStatus.fire([extensionId]); }