diff --git a/src/vs/workbench/api/electron-browser/mainThreadTelemetry.ts b/src/vs/workbench/api/electron-browser/mainThreadTelemetry.ts index 07bdce47df133f0756a65d104a26157f92ac8963..31727b376256f80efbe4576317a1fa336fc865aa 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadTelemetry.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadTelemetry.ts @@ -4,31 +4,28 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import { TPromise } from 'vs/base/common/winjs.base'; -import { ITelemetryService, ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry'; +import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { MainThreadTelemetryShape, MainContext, IExtHostContext } from '../node/extHost.protocol'; import { extHostNamedCustomer } from 'vs/workbench/api/electron-browser/extHostCustomers'; @extHostNamedCustomer(MainContext.MainThreadTelemetry) export class MainThreadTelemetry implements MainThreadTelemetryShape { - private _telemetryService: ITelemetryService; + private static _name = 'pluginHostTelemetry'; constructor( extHostContext: IExtHostContext, - @ITelemetryService telemetryService: ITelemetryService + @ITelemetryService private readonly _telemetryService: ITelemetryService ) { - this._telemetryService = telemetryService; + // } - public dispose(): void { + dispose(): void { + // } - public $publicLog(eventName: string, data?: any): void { + $publicLog(eventName: string, data: any = Object.create(null)): void { + data[MainThreadTelemetry._name] = true; this._telemetryService.publicLog(eventName, data); } - - public $getTelemetryInfo(): TPromise { - return this._telemetryService.getTelemetryInfo(); - } } diff --git a/src/vs/workbench/api/node/extHost.api.impl.ts b/src/vs/workbench/api/node/extHost.api.impl.ts index 2da07598d1784b17e248197c9150ea98067288fb..b18258e2c68d7de8701564792011c50e76b32526 100644 --- a/src/vs/workbench/api/node/extHost.api.impl.ts +++ b/src/vs/workbench/api/node/extHost.api.impl.ts @@ -43,7 +43,6 @@ import EditorCommon = require('vs/editor/common/editorCommon'); import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ExtHostExtensionService } from 'vs/workbench/api/node/extHostExtensionService'; import { TPromise } from 'vs/base/common/winjs.base'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { CancellationTokenSource } from 'vs/base/common/cancellation'; import * as vscode from 'vscode'; import * as paths from 'vs/base/common/paths'; @@ -74,10 +73,11 @@ function proposedApiFunction(extension: IExtensionDescription, fn: T): T { export function createApiFactory( initData: IInitData, threadService: ExtHostThreadService, - extensionService: ExtHostExtensionService, - telemetryService: ITelemetryService + extensionService: ExtHostExtensionService ): IExtensionApiFactory { + const mainThreadTelemetry = threadService.get(MainContext.MainThreadTelemetry); + // Addressable instances const extHostHeapService = threadService.set(ExtHostContext.ExtHostHeapService, new ExtHostHeapService()); const extHostDocumentsAndEditors = threadService.set(ExtHostContext.ExtHostDocumentsAndEditors, new ExtHostDocumentsAndEditors(threadService)); @@ -140,7 +140,7 @@ export function createApiFactory( return undefined; } this._seen.add(apiName); - return telemetryService.publicLog('apiUsage', { + return mainThreadTelemetry.$publicLog('apiUsage', { name: apiName, extension: extension.id }); @@ -475,7 +475,7 @@ export function createApiFactory( return extHostSCM.inputBox; }, createSourceControl(id: string, label: string) { - telemetryService.publicLog('registerSCMProvider', { + mainThreadTelemetry.$publicLog('registerSCMProvider', { extensionId: extension.id, providerId: id, providerLabel: label diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 34efeea7134d60c37d99ddaaa3d185f9daebea1e..5b891e16eb0ec51ecb83ca3cccbdfbb4f3dc1a4a 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -288,7 +288,6 @@ export interface MainThreadStorageShape extends IDisposable { export interface MainThreadTelemetryShape extends IDisposable { $publicLog(eventName: string, data?: any): void; - $getTelemetryInfo(): TPromise; } export interface MainThreadWorkspaceShape extends IDisposable { diff --git a/src/vs/workbench/api/node/extHostExtensionService.ts b/src/vs/workbench/api/node/extHostExtensionService.ts index 59adbb85a52d943e365a2e569df21082fdd4e701..c61be379275181ec34a66ecba7b90ab7be197acc 100644 --- a/src/vs/workbench/api/node/extHostExtensionService.ts +++ b/src/vs/workbench/api/node/extHostExtensionService.ts @@ -12,9 +12,8 @@ import { TPromise } from 'vs/base/common/winjs.base'; import { ExtensionDescriptionRegistry } from 'vs/workbench/services/extensions/node/extensionDescriptionRegistry'; import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { ExtHostStorage } from 'vs/workbench/api/node/extHostStorage'; -import { ITelemetryService } from 'vs/platform/telemetry/common/telemetry'; import { createApiFactory, initializeExtensionApi } from 'vs/workbench/api/node/extHost.api.impl'; -import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironment, IInitData, ExtHostExtensionServiceShape } from './extHost.protocol'; +import { MainContext, MainThreadExtensionServiceShape, IWorkspaceData, IEnvironment, IInitData, ExtHostExtensionServiceShape, MainThreadTelemetryShape } from './extHost.protocol'; import { IExtensionMemento, ExtensionsActivator, ActivatedExtension, IExtensionAPI, IExtensionContext, EmptyExtension, IExtensionModule } from 'vs/workbench/api/node/extHostExtensionActivator'; import { Barrier } from 'vs/workbench/services/extensions/node/barrier'; import { ExtHostThreadService } from 'vs/workbench/services/thread/node/extHostThreadService'; @@ -112,7 +111,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { private readonly _barrier: Barrier; private readonly _registry: ExtensionDescriptionRegistry; private readonly _threadService: ExtHostThreadService; - private readonly _telemetryService: ITelemetryService; + private readonly _mainThreadTelemetry: MainThreadTelemetryShape; private readonly _storage: ExtHostStorage; private readonly _storagePath: ExtensionStoragePath; private readonly _proxy: MainThreadExtensionServiceShape; @@ -121,18 +120,18 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { /** * This class is constructed manually because it is a service, so it doesn't use any ctor injection */ - constructor(initData: IInitData, threadService: ExtHostThreadService, telemetryService: ITelemetryService) { + constructor(initData: IInitData, threadService: ExtHostThreadService) { this._barrier = new Barrier(); this._registry = new ExtensionDescriptionRegistry(initData.extensions); this._threadService = threadService; - this._telemetryService = telemetryService; + this._mainThreadTelemetry = threadService.get(MainContext.MainThreadTelemetry); this._storage = new ExtHostStorage(threadService); this._storagePath = new ExtensionStoragePath(initData.workspace, initData.environment); this._proxy = this._threadService.get(MainContext.MainThreadExtensionService); this._activator = null; // initialize API first (i.e. do not release barrier until the API is initialized) - const apiFactory = createApiFactory(initData, threadService, this, this._telemetryService); + const apiFactory = createApiFactory(initData, threadService, this); initializeExtensionApi(this, apiFactory).then(() => { @@ -281,7 +280,7 @@ export class ExtHostExtensionService implements ExtHostExtensionServiceShape { private _doActivateExtension(extensionDescription: IExtensionDescription): TPromise { let event = getTelemetryActivationEvent(extensionDescription); - this._telemetryService.publicLog('activatePlugin', event); + this._mainThreadTelemetry.$publicLog('activatePlugin', event); if (!extensionDescription.main) { // Treat the extension as being empty => NOT AN ERROR CASE return TPromise.as(new EmptyExtension()); diff --git a/src/vs/workbench/api/node/extHostTelemetry.ts b/src/vs/workbench/api/node/extHostTelemetry.ts deleted file mode 100644 index cd9e4a1f9dadb4532d5017796e10f1878b7bf476..0000000000000000000000000000000000000000 --- a/src/vs/workbench/api/node/extHostTelemetry.ts +++ /dev/null @@ -1,46 +0,0 @@ -/*--------------------------------------------------------------------------------------------- - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. See License.txt in the project root for license information. - *--------------------------------------------------------------------------------------------*/ -'use strict'; - -import { notImplemented } from 'vs/base/common/errors'; -import { TPromise } from 'vs/base/common/winjs.base'; -import { ITelemetryService, ITelemetryInfo } from 'vs/platform/telemetry/common/telemetry'; -import { MainContext, MainThreadTelemetryShape, IMainContext } from './extHost.protocol'; - -export class RemoteTelemetryService implements ITelemetryService { - - _serviceBrand: any; - - private _name: string; - private _proxy: MainThreadTelemetryShape; - - constructor(name: string, mainContext: IMainContext) { - this._name = name; - this._proxy = mainContext.get(MainContext.MainThreadTelemetry); - } - - get isOptedIn(): boolean { - throw notImplemented(); - } - - getTelemetryInfo(): TPromise { - return this._proxy.$getTelemetryInfo(); - } - - publicLog(eventName: string, data?: any): TPromise { - data = data || Object.create(null); - data[this._name] = true; - this._proxy.$publicLog(eventName, data); - return TPromise.as(null); - } - - timedPublicLog(): any { - throw notImplemented(); - } - - addTelemetryAppender(): any { - throw notImplemented(); - } -} diff --git a/src/vs/workbench/node/extensionHostMain.ts b/src/vs/workbench/node/extensionHostMain.ts index 6a86d535038ff9bb2c5f732ba254003d8457a932..01e7f5091373e1440fc7b4ec8cf0e152a8ea7cd7 100644 --- a/src/vs/workbench/node/extensionHostMain.ts +++ b/src/vs/workbench/node/extensionHostMain.ts @@ -15,7 +15,6 @@ import { ExtHostThreadService } from 'vs/workbench/services/thread/node/extHostT import { IExtensionDescription } from 'vs/platform/extensions/common/extensions'; import { QueryType, ISearchQuery } from 'vs/platform/search/common/search'; import { DiskSearch } from 'vs/workbench/services/search/node/searchService'; -import { RemoteTelemetryService } from 'vs/workbench/api/node/extHostTelemetry'; import { IInitData, IEnvironment, IWorkspaceData, MainContext } from 'vs/workbench/api/node/extHost.protocol'; import * as errors from 'vs/base/common/errors'; // import * as watchdog from 'native-watchdog'; @@ -47,8 +46,7 @@ export class ExtensionHostMain { // services const threadService = new ExtHostThreadService(rpcProtocol); - const telemetryService = new RemoteTelemetryService('pluginHostTelemetry', threadService); - this._extensionService = new ExtHostExtensionService(initData, threadService, telemetryService); + this._extensionService = new ExtHostExtensionService(initData, threadService); // error forwarding and stack trace scanning const extensionErrors = new WeakMap();