diff --git a/src/vs/workbench/api/node/extHostExtensionActivator.ts b/src/vs/workbench/api/node/extHostExtensionActivator.ts index aa1108d2ef5bffa5256b0042027e69590e94a6a3..48475d388f8539c0545b69105d6c8afce57bcd3e 100644 --- a/src/vs/workbench/api/node/extHostExtensionActivator.ts +++ b/src/vs/workbench/api/node/extHostExtensionActivator.ts @@ -42,6 +42,14 @@ export interface IExtensionAPI { // _extensionAPIBrand: any; } +/* __GDPR__FRAGMENT__ + "ExtensionActivationTimes" : { + "startup": { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "codeLoadingTime" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "activateCallTime" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true }, + "activateResolvedTime" : { "classification": "SystemMetaData", "purpose": "PerformanceAndHealth", "isMeasurement": true } + } +*/ export class ExtensionActivationTimes { public static readonly NONE = new ExtensionActivationTimes(false, -1, -1, -1); diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 7b74cca1e079643532b76218575dcfc96af39a0a..ad1a7e2246f123ab21a8dbebe2ab4f2d7b10f6e7 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -313,13 +313,33 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { const activationTimes = activatedExtension.activationTimes; let activationEvent = (reason instanceof ExtensionActivatedByEvent ? reason.activationEvent : null); this._proxy.$onExtensionActivated(extensionDescription.id, activationTimes.startup, activationTimes.codeLoadingTime, activationTimes.activateCallTime, activationTimes.activateResolvedTime, activationEvent); + this._logExtensionActivationTimes(extensionDescription, reason, 'success', activationTimes); return activatedExtension; }, (err) => { this._proxy.$onExtensionActivationFailed(extensionDescription.id); + this._logExtensionActivationTimes(extensionDescription, reason, 'failure'); throw err; }); } + private _logExtensionActivationTimes(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason, outcome: string, activationTimes?: ExtensionActivationTimes) { + let event = getTelemetryActivationEvent(extensionDescription, reason); + /* __GDPR__ + "extensionActivationTimes" : { + "${include}": [ + "${TelemetryActivationEvent}", + "${ExtensionActivationTimes}" + ], + "outcome" : { "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this._mainThreadTelemetry.$publicLog('extensionActivationTimes', { + ...event, + ...(activationTimes || {}), + outcome, + }); + } + private _doActivateExtension(extensionDescription: IExtensionDescription, reason: ExtensionActivationReason): Promise { let event = getTelemetryActivationEvent(extensionDescription, reason); /* __GDPR__