diff --git a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts index dc966dd5cbf..b27dcf1b64c 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadEditors.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadEditors.ts @@ -140,6 +140,11 @@ export class MainThreadEditors implements MainThreadEditorsShape { $tryShowEditor(id: string, position: EditorPosition): TPromise { // check how often this is used + /* __GDPR__ + "api.deprecated" : { + "function" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this._telemetryService.publicLog('api.deprecated', { function: 'TextEditor.show' }); let mainThreadEditor = this._documentsAndEditors.getEditor(id); @@ -155,6 +160,11 @@ export class MainThreadEditors implements MainThreadEditorsShape { $tryHideEditor(id: string): TPromise { // check how often this is used + /* __GDPR__ + "api.deprecated" : { + "function" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this._telemetryService.publicLog('api.deprecated', { function: 'TextEditor.hide' }); let mainThreadEditor = this._documentsAndEditors.getEditor(id); diff --git a/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts b/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts index 3e4127cd39b..577b4649acd 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadSaveParticipant.ts @@ -266,6 +266,11 @@ export class SaveParticipant implements ISaveParticipant { }); return sequence(promiseFactory).then(() => { + /* __GDPR__ + "saveParticipantStats" : { + } + */ + // TODO: We need to move off dynamic property names as we can't declare them statically in the registry. this._telemetryService.publicLog('saveParticipantStats', stats); }); } diff --git a/src/vs/workbench/browser/composite.ts b/src/vs/workbench/browser/composite.ts index 0fba1254c67..8d2782a6ccd 100644 --- a/src/vs/workbench/browser/composite.ts +++ b/src/vs/workbench/browser/composite.ts @@ -108,6 +108,11 @@ export abstract class Composite extends Component implements IComposite { // Only submit telemetry data when not running from an integration test if (this._telemetryService && this._telemetryService.publicLog) { const eventName: string = 'compositeOpen'; + /* __GDPR__ + "compositeOpen" : { + "composite" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this._telemetryService.publicLog(eventName, { composite: this.getId() }); } } @@ -121,6 +126,12 @@ export abstract class Composite extends Component implements IComposite { if (this._telemetryService && this._telemetryService.publicLog) { const eventName: string = 'compositeShown'; this._telemetryData.composite = this.getId(); + /* __GDPR__ + "compositeShown" : { + "timeSpent" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "composite": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this._telemetryService.publicLog(eventName, this._telemetryData); } } diff --git a/src/vs/workbench/browser/parts/compositePart.ts b/src/vs/workbench/browser/parts/compositePart.ts index 4c9a6580090..ff110ab1c76 100644 --- a/src/vs/workbench/browser/parts/compositePart.ts +++ b/src/vs/workbench/browser/parts/compositePart.ts @@ -309,6 +309,12 @@ export abstract class CompositePart extends Part { // Log in telemetry if (this.telemetryService) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: this.nameForTelemetry }); } }); diff --git a/src/vs/workbench/browser/parts/editor/editorGroupsControl.ts b/src/vs/workbench/browser/parts/editor/editorGroupsControl.ts index 46d5f7e644e..bc6477e0c2f 100644 --- a/src/vs/workbench/browser/parts/editor/editorGroupsControl.ts +++ b/src/vs/workbench/browser/parts/editor/editorGroupsControl.ts @@ -443,6 +443,9 @@ export class EditorGroupsControl extends Themable implements IEditorGroupsContro // Log this fact in telemetry if (this.telemetryService) { + /* __GDPR__ + "workbenchEditorMaximized" : {} + */ this.telemetryService.publicLog('workbenchEditorMaximized'); } diff --git a/src/vs/workbench/browser/parts/editor/editorPart.ts b/src/vs/workbench/browser/parts/editor/editorPart.ts index 8d53e32d0d0..56035c39b9a 100644 --- a/src/vs/workbench/browser/parts/editor/editorPart.ts +++ b/src/vs/workbench/browser/parts/editor/editorPart.ts @@ -166,6 +166,13 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService this.revealIfOpen = editorConfig.revealIfOpen; + /* __GDPR__ + "workbenchEditorConfiguration" : { + "${include}": [ + "${IWorkbenchEditorConfiguration}" + ] + } + */ this.telemetryService.publicLog('workbenchEditorConfiguration', editorConfig); } else { this.tabOptions = { @@ -248,10 +255,24 @@ export class EditorPart extends Part implements IEditorPart, IEditorGroupService } private onEditorOpened(identifier: EditorIdentifier): void { + /* __GDPR__ + "editorOpened" : { + "${include}": [ + "${EditorTelemetryDescriptor}" + ] + } + */ this.telemetryService.publicLog('editorOpened', identifier.editor.getTelemetryDescriptor()); } private onEditorClosed(event: EditorCloseEvent): void { + /* __GDPR__ + "editorClosed" : { + "${include}": [ + "${EditorTelemetryDescriptor}" + ] + } + */ this.telemetryService.publicLog('editorClosed', event.editor.getTelemetryDescriptor()); } diff --git a/src/vs/workbench/browser/parts/editor/titleControl.ts b/src/vs/workbench/browser/parts/editor/titleControl.ts index 24f2303b131..0f3c92d3834 100644 --- a/src/vs/workbench/browser/parts/editor/titleControl.ts +++ b/src/vs/workbench/browser/parts/editor/titleControl.ts @@ -259,6 +259,12 @@ export abstract class TitleControl extends Themable implements ITitleAreaControl // Log in telemetry if (this.telemetryService) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: 'editorPart' }); } })); diff --git a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts index 10d32871c4b..903b83c6011 100644 --- a/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts +++ b/src/vs/workbench/browser/parts/quickopen/quickOpenController.ts @@ -552,6 +552,12 @@ export class QuickOpenController extends Component implements IQuickOpenService const registry = Registry.as(Extensions.Quickopen); const handlerDescriptor = registry.getQuickOpenHandler(prefix) || registry.getDefaultQuickOpenHandler(); + /* __GDPR__ + "quickOpenWidgetShown" : { + "mode" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "quickNavigate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('quickOpenWidgetShown', { mode: handlerDescriptor.getId(), quickNavigate: quickNavigateConfiguration }); // Trigger onOpen diff --git a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts index 1091ddda968..3714236aa0a 100644 --- a/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts +++ b/src/vs/workbench/browser/parts/statusbar/statusbarPart.ts @@ -293,6 +293,12 @@ class StatusBarEntryItem implements IStatusbarItem { const action = this.instantiationService.createInstance(builtInActionDescriptor.syncDescriptor); if (action.enabled) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: action.id, from: 'status bar' }); (action.run() || TPromise.as(null)).done(() => { action.dispose(); diff --git a/src/vs/workbench/common/actions.ts b/src/vs/workbench/common/actions.ts index cc950f797ba..24a43473a4b 100644 --- a/src/vs/workbench/common/actions.ts +++ b/src/vs/workbench/common/actions.ts @@ -170,6 +170,12 @@ function triggerAndDisposeAction(instantitationService: IInstantiationService, t const from = args && args.from || 'keybinding'; if (telemetryService) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ telemetryService.publicLog('workbenchActionExecuted', { id: actionInstance.id, from }); } diff --git a/src/vs/workbench/common/editor.ts b/src/vs/workbench/common/editor.ts index a058c6e902a..9e4b4959580 100644 --- a/src/vs/workbench/common/editor.ts +++ b/src/vs/workbench/common/editor.ts @@ -203,6 +203,11 @@ export abstract class EditorInput implements IEditorInput { * Subclasses should extend if they can contribute. */ public getTelemetryDescriptor(): object { + /* __GDPR__FRAGMENT__ + "EditorTelemetryDescriptor" : { + "typeId" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return { typeId: this.getTypeId() }; } @@ -792,6 +797,19 @@ export const EditorOpenPositioning = { }; export interface IWorkbenchEditorConfiguration { + /* __GDPR__FRAGMENT__ + "IWorkbenchEditorConfiguration" : { + "showTabs" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "tabCloseButton": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "showIcons": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "enablePreview": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "enablePreviewFromQuickOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "closeOnFileDelete": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "openPositioning": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "revealIfOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "swipeToNavigate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ workbench: { editor: { showTabs: boolean; diff --git a/src/vs/workbench/common/editor/resourceEditorInput.ts b/src/vs/workbench/common/editor/resourceEditorInput.ts index 3c33a6d16ec..e77eff68f22 100644 --- a/src/vs/workbench/common/editor/resourceEditorInput.ts +++ b/src/vs/workbench/common/editor/resourceEditorInput.ts @@ -72,6 +72,11 @@ export class ResourceEditorInput extends EditorInput { const descriptor = super.getTelemetryDescriptor(); descriptor['resource'] = telemetryURIDescriptor(this.resource); + /* __GDPR__FRAGMENT__ + "EditorTelemetryDescriptor" : { + "resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return descriptor; } diff --git a/src/vs/workbench/common/editor/untitledEditorInput.ts b/src/vs/workbench/common/editor/untitledEditorInput.ts index dac7180d617..a3f23f877c3 100644 --- a/src/vs/workbench/common/editor/untitledEditorInput.ts +++ b/src/vs/workbench/common/editor/untitledEditorInput.ts @@ -254,6 +254,11 @@ export class UntitledEditorInput extends EditorInput implements IEncodingSupport const descriptor = super.getTelemetryDescriptor(); descriptor['resource'] = telemetryURIDescriptor(this.getResource()); + /* __GDPR__FRAGMENT__ + "EditorTelemetryDescriptor" : { + "resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return descriptor; } diff --git a/src/vs/workbench/electron-browser/nodeCachedDataManager.ts b/src/vs/workbench/electron-browser/nodeCachedDataManager.ts index c21787e2e28..e275bac0b75 100644 --- a/src/vs/workbench/electron-browser/nodeCachedDataManager.ts +++ b/src/vs/workbench/electron-browser/nodeCachedDataManager.ts @@ -32,6 +32,12 @@ export class NodeCachedDataManager { // log each failure separately if (err) { + /* __GDPR__ + "cachedDataError" : { + "errorCode" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "path": { "endPoint": "none", "classification": "CustomerContent", "purpose": "PerformanceAndHealth" } + } + */ this._telemetryService.publicLog('cachedDataError', { errorCode: err.errorCode, path: basename(err.path) @@ -40,6 +46,13 @@ export class NodeCachedDataManager { } // log summary + /* __GDPR__ + "cachedDataInfo" : { + "didRequestCachedData" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "didRejectCachedData": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "didProduceCachedData": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" } + } + */ this._telemetryService.publicLog('cachedDataInfo', { didRequestCachedData: Boolean(global.require.getConfig().nodeCachedDataDir), didRejectCachedData, diff --git a/src/vs/workbench/electron-browser/shell.ts b/src/vs/workbench/electron-browser/shell.ts index fd99f05e00a..cf5cf8098cd 100644 --- a/src/vs/workbench/electron-browser/shell.ts +++ b/src/vs/workbench/electron-browser/shell.ts @@ -199,6 +199,25 @@ export class WorkbenchShell { // Telemetry: workspace info const { filesToOpen, filesToCreate, filesToDiff } = this.configuration; + /* __GDPR__ + "workspaceLoad" : { + "userAgent" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "windowSize": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "emptyWorkbench": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "workbench.filesToOpen": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "workbench.filesToCreate": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "workbench.filesToDiff": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "customKeybindingsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "theme": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "language": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "BusinessInsight" }, + "experiments": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "BusinessInsight" }, + "pinnedViewlets": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "restoredViewlet": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "restoredEditors": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "pinnedViewlets": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "startupKind": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + } + */ this.telemetryService.publicLog('workspaceLoad', { userAgent: navigator.userAgent, windowSize: { innerHeight: window.innerHeight, innerWidth: window.innerWidth, outerHeight: window.outerHeight, outerWidth: window.outerWidth }, @@ -221,6 +240,13 @@ export class WorkbenchShell { this.timerService.restoreEditorsDuration = info.restoreEditorsDuration; this.timerService.restoreViewletDuration = info.restoreViewletDuration; this.extensionService.onReady().done(() => { + /* __GDPR__ + "startupTime" : { + "${include}": [ + "${IStartupMetrics}" + ] + } + */ this.telemetryService.publicLog('startupTime', this.timerService.startupMetrics); }); @@ -288,6 +314,12 @@ export class WorkbenchShell { const idleMonitor = new IdleMonitor(2 * 60 * 1000); // 2 minutes const listener = idleMonitor.onStatusChange(status => + /* __GDPR__ + "UserIdleStart" : {} + */ + /* __GDPR__ + "UserIdleStop" : {} + */ this.telemetryService.publicLog(status === UserStatus.Active ? TelemetryService.IDLE_STOP_EVENT_NAME : TelemetryService.IDLE_START_EVENT_NAME diff --git a/src/vs/workbench/electron-browser/window.ts b/src/vs/workbench/electron-browser/window.ts index 622cf14e8d3..0223d59c2d9 100644 --- a/src/vs/workbench/electron-browser/window.ts +++ b/src/vs/workbench/electron-browser/window.ts @@ -145,6 +145,12 @@ export class ElectronWindow extends Themable { } this.commandService.executeCommand(request.id, ...args).done(_ => { + /* __GDPR__ + "commandExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('commandExecuted', { id: request.id, from: request.from }); }, err => { this.messageService.show(Severity.Error, err); diff --git a/src/vs/workbench/parts/debug/browser/debugActionsWidget.ts b/src/vs/workbench/parts/debug/browser/debugActionsWidget.ts index 78aefdb3d52..3c1e657aa10 100644 --- a/src/vs/workbench/parts/debug/browser/debugActionsWidget.ts +++ b/src/vs/workbench/parts/debug/browser/debugActionsWidget.ts @@ -102,6 +102,12 @@ export class DebugActionsWidget extends Themable implements IWorkbenchContributi // log in telemetry if (this.telemetryService) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: e.action.id, from: 'debugActionsWidget' }); } })); @@ -141,6 +147,11 @@ export class DebugActionsWidget extends Themable implements IWorkbenchContributi private storePosition(): void { const position = parseFloat(this.$el.getComputedStyle().left) / window.innerWidth; this.storageService.store(DEBUG_ACTIONS_WIDGET_POSITION_KEY, position, StorageScope.WORKSPACE); + /* __GDPR__ + "debug.actionswidgetposition" : { + "position" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog(DEBUG_ACTIONS_WIDGET_POSITION_KEY, { position }); } diff --git a/src/vs/workbench/parts/debug/electron-browser/debugEditorContribution.ts b/src/vs/workbench/parts/debug/electron-browser/debugEditorContribution.ts index bcb12909cf6..a8205753a6f 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugEditorContribution.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugEditorContribution.ts @@ -411,6 +411,9 @@ export class DebugEditorContribution implements IDebugEditorContribution { } public addLaunchConfiguration(): TPromise { + /* __GDPR__ + "debug/addLaunchConfiguration" : {} + */ this.telemetryService.publicLog('debug/addLaunchConfiguration'); let configurationsArrayPosition: Position; const model = this.editor.getModel(); diff --git a/src/vs/workbench/parts/debug/electron-browser/debugService.ts b/src/vs/workbench/parts/debug/electron-browser/debugService.ts index 2b53058eb9f..58799a8b1af 100644 --- a/src/vs/workbench/parts/debug/electron-browser/debugService.ts +++ b/src/vs/workbench/parts/debug/electron-browser/debugService.ts @@ -341,6 +341,7 @@ export class DebugService implements debug.IDebugService { // only log telemetry events from debug adapter if the adapter provided the telemetry key // and the user opted in telemetry if (session.customTelemetryService && this.telemetryService.isOptedIn) { + // TODO Need to move off dynamic event names or properties. They cannot be registered upfront. session.customTelemetryService.publicLog(event.body.output, event.body.data); } @@ -607,6 +608,9 @@ export class DebugService implements debug.IDebugService { } public addReplExpression(name: string): TPromise { + /* __GDPR__ + "debugService/addReplExpression" : {} + */ this.telemetryService.publicLog('debugService/addReplExpression'); return this.model.addReplExpression(this.viewModel.focusedProcess, this.viewModel.focusedStackFrame, name) // Evaluate all watch expressions and fetch variables again since repl evaluation might have changed some. @@ -909,6 +913,17 @@ export class DebugService implements debug.IDebugService { } this.updateStateAndEmit(session.getId(), debug.State.Running); + /* __GDPR__ + "debugSessionStart" : { + "type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "breakpointCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "exceptionBreakpoints": { "endPoint": "none", "classification": "CustomerContent", "purpose": "FeatureInsight" }, + "watchExpressionsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "extensionName": { "endPoint": "none", "classification": "PublicPersonalData", "purpose": "FeatureInsight" }, + "isBuiltin": { "endPoint": "none", "classification": "SystemMetaData", "purpose": ",FeatureInsight" }, + "launchJsonExists": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return this.telemetryService.publicLog('debugSessionStart', { type: configuration.type, breakpointCount: this.model.getBreakpoints().length, @@ -925,6 +940,12 @@ export class DebugService implements debug.IDebugService { } const errorMessage = error instanceof Error ? error.message : error; + /* __GDPR__ + "debugMisconfiguration" : { + "type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "error": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('debugMisconfiguration', { type: configuration ? configuration.type : undefined, error: errorMessage }); this.updateStateAndEmit(session.getId(), debug.State.Inactive); if (!session.disconnected) { @@ -1039,6 +1060,15 @@ export class DebugService implements debug.IDebugService { private onSessionEnd(session: RawDebugSession): void { const bpsExist = this.model.getBreakpoints().length > 0; const process = this.model.getProcesses().filter(p => p.getId() === session.getId()).pop(); + /* __GDPR__ + "debugSessionStop" : { + "type" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "success": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "sessionLengthInSeconds": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "breakpointCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "watchExpressionsCount": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('debugSessionStop', { type: process && process.configuration.type, success: session.emittedStopped || !bpsExist, diff --git a/src/vs/workbench/parts/debug/electron-browser/rawDebugSession.ts b/src/vs/workbench/parts/debug/electron-browser/rawDebugSession.ts index 992f4a6d673..e0972aee21e 100644 --- a/src/vs/workbench/parts/debug/electron-browser/rawDebugSession.ts +++ b/src/vs/workbench/parts/debug/electron-browser/rawDebugSession.ts @@ -164,8 +164,18 @@ export class RawDebugSession extends V8Protocol implements debug.ISession { const errorMessage = errorResponse ? errorResponse.message : ''; const telemetryMessage = error ? debug.formatPII(error.format, true, error.variables) : errorMessage; if (error && error.sendTelemetry) { + /* __GDPR__ + "debugProtocolErrorResponse" : { + "error" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('debugProtocolErrorResponse', { error: telemetryMessage }); if (this.customTelemetryService) { + /* __GDPR__ + "debugProtocolErrorResponse" : { + "error" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.customTelemetryService.publicLog('debugProtocolErrorResponse', { error: telemetryMessage }); } } diff --git a/src/vs/workbench/parts/extensions/browser/extensionEditor.ts b/src/vs/workbench/parts/extensions/browser/extensionEditor.ts index 16b88273dd3..ac9343e7034 100644 --- a/src/vs/workbench/parts/extensions/browser/extensionEditor.ts +++ b/src/vs/workbench/parts/extensions/browser/extensionEditor.ts @@ -265,6 +265,13 @@ export class ExtensionEditor extends BaseEditor { this.transientDisposables = dispose(this.transientDisposables); + /* __GDPR__ + "extensionGallery:openExtension" : { + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ this.telemetryService.publicLog('extensionGallery:openExtension', extension.telemetryData); this.extensionReadme = new Cache(() => extension.getReadme()); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts index d49a036b406..2bb34cc14b2 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionTipsService.ts @@ -114,6 +114,12 @@ export class ExtensionTipsService implements IExtensionTipsService { const exeBased = distinct(this._exeBasedRecommendations); + /* __GDPR__ + "extensionRecommendations:unfiltered" : { + "fileBased" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "exeBased": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:unfiltered', { fileBased, exeBased }); return distinct([...fileBased, ...exeBased]); @@ -247,6 +253,12 @@ export class ExtensionTipsService implements IExtensionTipsService { this.choiceService.choose(Severity.Info, message, options, 2).done(choice => { switch (choice) { case 0: + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'show', extensionId: name }); return recommendationsAction.run(); case 1: this.importantRecommendationsIgnoreList.push(id); @@ -255,12 +267,30 @@ export class ExtensionTipsService implements IExtensionTipsService { JSON.stringify(this.importantRecommendationsIgnoreList), StorageScope.GLOBAL ); + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'neverShowAgain', extensionId: name }); return this.ignoreExtensionRecommendations(); case 2: + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'close', extensionId: name }); } }, () => { + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "extensionId": { "classification": "PublicNonPersonalData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:popup', { userReaction: 'cancelled', extensionId: name }); }); }); @@ -305,15 +335,35 @@ export class ExtensionTipsService implements IExtensionTipsService { this.choiceService.choose(Severity.Info, message, options, 2).done(choice => { switch (choice) { case 0: - this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'show' }); + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'show' }); return action.run(); case 1: + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'neverShowAgain' }); return this.storageService.store(storageKey, true, StorageScope.WORKSPACE); case 2: + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'close' }); } }, () => { + /* __GDPR__ + "extensionRecommendations:popup" : { + "userReaction" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionWorkspaceRecommendations:popup', { userReaction: 'cancelled' }); }); }); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts index bfd75970a59..891ef659d92 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsUtils.ts @@ -72,6 +72,19 @@ export class KeymapExtensions implements IWorkbenchContribution { newKeymap: newKeymap.identifier, oldKeymaps: oldKeymaps.map(k => k.identifier) }; + /* __GDPR__FRAGMENT__ + "KeyMapsData" : { + "newKeymap" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "oldKeymaps": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ + /* __GDPR__ + "disableOtherKeymapsConfirmation" : { + "${include}": [ + "${KeyMapsData}" + ] + } + */ this.telemetryService.publicLog('disableOtherKeymapsConfirmation', telemetryData); const message = localize('disableOtherKeymapsConfirmation', "Disable other keymaps ({0}) to avoid conflicts between keybindings?", oldKeymaps.map(k => `'${k.local.manifest.displayName}'`).join(', ')); const options = [ @@ -82,6 +95,14 @@ export class KeymapExtensions implements IWorkbenchContribution { .then(value => { const confirmed = value === 0; telemetryData['confirmed'] = confirmed; + /* __GDPR__ + "disableOtherKeymaps" : { + "confirmed" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "${include}": [ + "${keyMapsData}" + ] + } + */ this.telemetryService.publicLog('disableOtherKeymaps', telemetryData); if (confirmed) { return TPromise.join(oldKeymaps.map(keymap => { @@ -153,11 +174,19 @@ export class BetterMergeDisabled implements IWorkbenchContribution { extensionService.onReady().then(() => { if (storageService.getBoolean(BetterMergeDisabledNowKey, StorageScope.GLOBAL, false)) { storageService.remove(BetterMergeDisabledNowKey, StorageScope.GLOBAL); + /* __GDPR__ + "betterMergeDisabled" : {} + */ telemetryService.publicLog('betterMergeDisabled'); messageService.show(Severity.Info, { message: localize('betterMergeDisabled', "The Better Merge extension is now built-in, the installed extension was disabled and can be uninstalled."), actions: [ new Action('uninstall', localize('uninstall', "Uninstall"), null, true, () => { + /* __GDPR__ + "betterMergeUninstall" : { + "outcome" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ telemetryService.publicLog('betterMergeUninstall', { outcome: 'uninstall', }); @@ -167,6 +196,11 @@ export class BetterMergeDisabled implements IWorkbenchContribution { }); }), new Action('later', localize('later', "Later"), null, true, () => { + /* __GDPR__ + "betterMergeUninstall" : { + "outcome" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ telemetryService.publicLog('betterMergeUninstall', { outcome: 'later', }); diff --git a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts index d8fd1c8ec8f..43e7b1101bd 100644 --- a/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts +++ b/src/vs/workbench/parts/extensions/electron-browser/extensionsViews.ts @@ -315,6 +315,11 @@ export class ExtensionsListView extends ViewsViewletPanel { .filter(name => local.every(ext => `${ext.publisher}.${ext.name}` !== name)) .filter(name => name.toLowerCase().indexOf(value) > -1); + /* __GDPR__ + "extensionRecommendations:open" : { + "count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionRecommendations:open', { count: names.length }); if (!names.length) { @@ -334,6 +339,11 @@ export class ExtensionsListView extends ViewsViewletPanel { return this.tipsService.getWorkspaceRecommendations() .then(recommendations => { const names = recommendations.filter(name => name.toLowerCase().indexOf(value) > -1); + /* __GDPR__ + "extensionWorkspaceRecommendations:open" : { + "count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionWorkspaceRecommendations:open', { count: names.length }); if (!names.length) { @@ -349,6 +359,11 @@ export class ExtensionsListView extends ViewsViewletPanel { const value = query.value.replace(/@recommended:keymaps/g, '').trim().toLowerCase(); const names = this.tipsService.getKeymapRecommendations() .filter(name => name.toLowerCase().indexOf(value) > -1); + /* __GDPR__ + "extensionKeymapRecommendations:open" : { + "count" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('extensionKeymapRecommendations:open', { count: names.length }); if (!names.length) { diff --git a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts index 39795d8e8a3..3fbd5d0ce92 100644 --- a/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts +++ b/src/vs/workbench/parts/extensions/node/extensionsWorkbenchService.ts @@ -418,6 +418,13 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { } open(extension: IExtension, sideByside: boolean = false): TPromise { + /* __GDPR__ + "extensionGallery:open" : { + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ this.telemetryService.publicLog('extensionGallery:open', extension.telemetryData); return this.editorService.openEditor(this.instantiationService.createInstance(ExtensionsInput, extension), null, sideByside); } @@ -527,6 +534,20 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { } return this.promptAndSetEnablement(extension, enable, workspace).then(reload => { + /* __GDPR__ + "extension:enabled" : { + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ + /* __GDPR__ + "extension:disable" : { + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ this.telemetryService.publicLog(enable ? 'extension:enable' : 'extension:disable', extension.telemetryData); }); } @@ -794,6 +815,30 @@ export class ExtensionsWorkbenchService implements IExtensionsWorkbenchService { const duration = new Date().getTime() - active.start.getTime(); const eventName = toTelemetryEventName(active.operation); + /* __GDPR__ + "extensionGallery:install" : { + "duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ + /* __GDPR__ + "extensionGallery:update" : { + "duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ + /* __GDPR__ + "extensionGallery:uninstall" : { + "duration" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "${include}": [ + "${GalleryExtensionTelemetryData}" + ] + } + */ this.telemetryService.publicLog(eventName, assign(data, { success: !errorcode, duration, errorcode })); } diff --git a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts index a98fe094684..c4d5a48b5e4 100644 --- a/src/vs/workbench/parts/files/browser/views/explorerViewer.ts +++ b/src/vs/workbench/parts/files/browser/views/explorerViewer.ts @@ -537,6 +537,12 @@ export class FileController extends DefaultController { public openEditor(stat: FileStat, options: { preserveFocus: boolean; sideBySide: boolean; pinned: boolean; }): void { if (stat && !stat.isDirectory) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'explorer' }); this.editorService.openEditor({ resource: stat.resource, options }, options.sideBySide).done(null, errors.onUnexpectedError); diff --git a/src/vs/workbench/parts/files/browser/views/openEditorsViewer.ts b/src/vs/workbench/parts/files/browser/views/openEditorsViewer.ts index 67ec00f9bf7..6f243b32a3b 100644 --- a/src/vs/workbench/parts/files/browser/views/openEditorsViewer.ts +++ b/src/vs/workbench/parts/files/browser/views/openEditorsViewer.ts @@ -273,6 +273,12 @@ export class Controller extends DefaultController { public openEditor(element: OpenEditor, options: { preserveFocus: boolean; pinned: boolean; sideBySide: boolean; }): void { if (element) { + /* __GDPR__ + "workbenchActionExecuted" : { + "id" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "from": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('workbenchActionExecuted', { id: 'workbench.files.openFile', from: 'openEditors' }); let position = this.model.positionOfGroup(element.editorGroup); if (options.sideBySide && position !== Position.THREE) { diff --git a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts index d3930c9fcff..fdd06599dd5 100644 --- a/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts +++ b/src/vs/workbench/parts/files/common/editors/fileEditorInput.ts @@ -277,6 +277,11 @@ export class FileEditorInput extends EditorInput implements IFileEditorInput { const descriptor = super.getTelemetryDescriptor(); descriptor['resource'] = telemetryURIDescriptor(this.getResource()); + /* __GDPR__FRAGMENT__ + "EditorTelemetryDescriptor" : { + "resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return descriptor; } diff --git a/src/vs/workbench/parts/markers/browser/markersPanel.ts b/src/vs/workbench/parts/markers/browser/markersPanel.ts index 6eeea5df06e..789d16386a1 100644 --- a/src/vs/workbench/parts/markers/browser/markersPanel.ts +++ b/src/vs/workbench/parts/markers/browser/markersPanel.ts @@ -148,6 +148,11 @@ export class MarkersPanel extends Panel { public openFileAtElement(element: any, preserveFocus: boolean, sideByside: boolean, pinned: boolean): boolean { if (element instanceof Marker) { const marker: Marker = element; + /* __GDPR__ + "problems.marker.opened" : { + "source" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('problems.marker.opened', { source: marker.marker.source }); this.editorService.openEditor({ resource: marker.resource, diff --git a/src/vs/workbench/parts/markers/browser/markersPanelActions.ts b/src/vs/workbench/parts/markers/browser/markersPanelActions.ts index fe2ce8c5d8f..c5949b625d1 100644 --- a/src/vs/workbench/parts/markers/browser/markersPanelActions.ts +++ b/src/vs/workbench/parts/markers/browser/markersPanelActions.ts @@ -41,6 +41,9 @@ export class ToggleMarkersPanelAction extends TogglePanelAction { public run(): TPromise { let promise = super.run(); if (this.isPanelFocused()) { + /* __GDPR__ + "problems.used" : {} + */ this.telemetryService.publicLog('problems.used'); } return promise; @@ -63,6 +66,9 @@ export class ToggleErrorsAndWarningsAction extends TogglePanelAction { public run(): TPromise { let promise = super.run(); if (this.isPanelFocused()) { + /* __GDPR__ + "problems.used" : {} + */ this.telemetryService.publicLog('problems.used'); } return promise; @@ -77,6 +83,9 @@ export class CollapseAllAction extends TreeCollapseAction { } public run(context?: any): TPromise { + /* __GDPR__ + "problems.collapseAll.used" : {} + */ this.telemetryService.publicLog('problems.collapseAll.used'); return super.run(context); } @@ -132,6 +141,13 @@ export class FilterInputBoxActionItem extends BaseActionItem { data['errors'] = this.markersPanel.markersModel.filterOptions.filterErrors; data['warnings'] = this.markersPanel.markersModel.filterOptions.filterWarnings; data['infos'] = this.markersPanel.markersModel.filterOptions.filterInfos; + /* __GDPR__ + "problems.filter" : { + "errors" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "warnings": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "infos": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('problems.filter', data); } diff --git a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts index 895d2d310e4..9bfd1f87547 100644 --- a/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/keybindingsEditor.ts @@ -521,6 +521,12 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor emptyFilters: this.getLatestEmptyFiltersForTelemetry() }; this.latestEmptyFilters = []; + // TODO need to move off dynamic properties as they cannot be statically registered + /* __GDPR__ + "keybindings.filter" : { + "emptyFilters" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('keybindings.filter', data); } } @@ -535,6 +541,7 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor } private reportKeybindingAction(action: string, command: string, keybinding: ResolvedKeybinding | string): void { + // TODO need to move off dynamic event names and properties as they cannot be registered statically this.telemetryService.publicLog(action, { command, keybinding: keybinding ? (typeof keybinding === 'string' ? keybinding : keybinding.getUserSettingsLabel()) : '' }); } diff --git a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts index efad32e7d9b..c422d18cc84 100644 --- a/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts +++ b/src/vs/workbench/parts/preferences/browser/preferencesEditor.ts @@ -323,6 +323,12 @@ export class PreferencesEditor extends BaseEditor { emptyFilters: this.getLatestEmptyFiltersForTelemetry() }; this.latestEmptyFilters = []; + // TODO need to move off dynamic properties as they cannot be statically be registered + /* __GDPR__ + "defaultSettings.filter" : { + "emptyFilters" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ this.telemetryService.publicLog('defaultSettings.filter', data); } } diff --git a/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughInput.ts b/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughInput.ts index f99257555b6..efb9f199365 100644 --- a/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughInput.ts +++ b/src/vs/workbench/parts/welcome/walkThrough/node/walkThroughInput.ts @@ -93,6 +93,12 @@ export class WalkThroughInput extends EditorInput { const descriptor = super.getTelemetryDescriptor(); descriptor['target'] = this.getTelemetryFrom(); descriptor['resource'] = telemetryURIDescriptor(this.options.resource); + /* __GDPR__FRAGMENT__ + "EditorTelemetryDescriptor" : { + "target" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" }, + "resource": { "endPoint": "none", "classification": "SystemMetaData", "purpose": "FeatureInsight" } + } + */ return descriptor; } diff --git a/src/vs/workbench/services/timer/common/timerService.ts b/src/vs/workbench/services/timer/common/timerService.ts index a337b25bf27..f2a5554b3c2 100644 --- a/src/vs/workbench/services/timer/common/timerService.ts +++ b/src/vs/workbench/services/timer/common/timerService.ts @@ -15,6 +15,25 @@ export interface IMemoryInfo { sharedBytes: number; } +/* __GDPR__FRAGMENT__ + "IStartupMetrics" : { + "version" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "ellapsed" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "timers" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "timers2" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "platform" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "release" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "arch" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "totalmem" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "meminfo" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "cpus" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "initialStartup" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "hasAccessibilitySupport" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "isVMLikelyhood" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "emptyWorkbench" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" }, + "loadavg" : { "endPoint": "none", "classification": "SystemMetaData", "purpose": "PerformanceAndHealth" } + } + */ export interface IStartupMetrics { version: number; ellapsed: number;