Skip to content

Commit 8fa2464

Browse files
authored
end-to-end performance tracking for code completion requests (#3165)
- Update USAGE_DATA.md for code completion telemetry Signed-off-by: Rob Stryker <rob@oxbeef.net>
1 parent f7651bd commit 8fa2464

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

USAGE_DATA.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr
2121
* `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled`
2222
* The extension name and the choice made when a recommendation to install a 3rd party extension is proposed
2323
* The name of Java commands being manually executed, and any resulting errors
24-
24+
* The number of results (eg. 20), whether an error occured (eg. false), and duration (in milliseconds) when code assist is activated
25+
2526
## What's included in the general telemetry data
2627

2728
Please see the

src/standardLanguageClient.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import { findRuntimes } from "jdk-utils";
55
import * as net from 'net';
66
import * as path from 'path';
77
import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode";
8-
import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient";
8+
import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, CompletionRequest } from "vscode-languageclient";
99
import { LanguageClient, StreamInfo } from "vscode-languageclient/node";
1010
import { apiManager } from "./apiManager";
1111
import * as buildPath from './buildpath';
1212
import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider";
1313
import { Commands } from "./commands";
14-
import { ClientStatus } from "./extension.api";
14+
import { ClientStatus, TraceEvent } from "./extension.api";
1515
import * as fileEventHandler from './fileEventHandler';
1616
import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider";
1717
import { awaitServerConnection, prepareExecutable, DEBUG } from "./javaServerStarter";
@@ -154,6 +154,7 @@ export class StandardLanguageClient {
154154
// Disable the client-side snippet provider since LS is ready.
155155
snippetCompletionProvider.dispose();
156156
registerDocumentValidationListener(context, this.languageClient);
157+
registerCodeCompletionTelemetryListener();
157158
break;
158159
case 'Started':
159160
this.status = ClientStatus.started;
@@ -820,3 +821,20 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC
820821
return Promise.resolve(true);
821822
}
822823
}
824+
825+
export function registerCodeCompletionTelemetryListener() {
826+
apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => {
827+
if (traceEvent.type === CompletionRequest.method) {
828+
// Exclude the invalid completion requests.
829+
if (!traceEvent.resultLength) {
830+
return;
831+
}
832+
const props = {
833+
duration: Math.round(traceEvent.duration * 100) / 100,
834+
resultLength: traceEvent.resultLength || 0,
835+
error: !!traceEvent.error,
836+
};
837+
return Telemetry.sendTelemetry(Telemetry.COMPLETION_EVENT, props);
838+
}
839+
});
840+
}

src/telemetry.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { ExtensionContext, workspace, WorkspaceConfiguration } from "vscode";
77
export namespace Telemetry {
88

99
export const STARTUP_EVT = "startup";
10+
export const COMPLETION_EVENT = "textCompletion";
1011
export const SERVER_INITIALIZED_EVT = "java.workspace.initialized";
1112
let telemetryManager: TelemetryService = null;
1213
let serverInitializedReceived = false;

0 commit comments

Comments
 (0)