From 5acb568f3372560baf59963f09b09eefd78497b6 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 16 Feb 2023 15:26:20 -0800 Subject: [PATCH] Time operations --- actions-languageserver/src/connection.ts | 35 ++++++++++++++--------- actions-languageserver/src/utils/timer.ts | 10 +++++++ actions-languageservice/src/log.ts | 16 +++++++---- 3 files changed, 41 insertions(+), 20 deletions(-) create mode 100644 actions-languageserver/src/utils/timer.ts diff --git a/actions-languageserver/src/connection.ts b/actions-languageserver/src/connection.ts index 7747ded..45297f5 100644 --- a/actions-languageserver/src/connection.ts +++ b/actions-languageserver/src/connection.ts @@ -26,6 +26,7 @@ import {onCompletion} from "./on-completion"; import {ReadFileRequest, Requests} from "./request"; import {fetchActionMetadata} from "./utils/action-metadata"; import {TTLCache} from "./utils/cache"; +import {timeOperation} from "./utils/timer"; import {valueProviders} from "./value-providers"; export function initConnection(connection: Connection) { @@ -93,7 +94,7 @@ export function initConnection(connection: Connection) { // The content of a text document has changed. This event is emitted // when the text document first opened or when its content has changed. documents.onDidChangeContent(change => { - validateTextDocument(change.document); + return timeOperation("validation", async () => await validateTextDocument(change.document)); }); async function validateTextDocument(textDocument: TextDocument): Promise { @@ -113,28 +114,34 @@ export function initConnection(connection: Connection) { return await connection.sendRequest(Requests.ReadFile, {path} satisfies ReadFileRequest); }) }; - const result = await validate(textDocument, config); - connection.sendDiagnostics({uri: textDocument.uri, diagnostics: result}); + const result = await validate(textDocument, config); + await connection.sendDiagnostics({uri: textDocument.uri, diagnostics: result}); } connection.onCompletion(async ({position, textDocument}: TextDocumentPositionParams): Promise => { - return await onCompletion( - connection, - position, - documents.get(textDocument.uri)!, - client, - repos.find(repo => textDocument.uri.startsWith(repo.workspaceUri)), - cache + return timeOperation( + "completion", + async () => + await onCompletion( + connection, + position, + documents.get(textDocument.uri)!, + client, + repos.find(repo => textDocument.uri.startsWith(repo.workspaceUri)), + cache + ) ); }); connection.onHover(async ({position, textDocument}: HoverParams): Promise => { - const repoContext = repos.find(repo => textDocument.uri.startsWith(repo.workspaceUri)); + return timeOperation("hover", async () => { + const repoContext = repos.find(repo => textDocument.uri.startsWith(repo.workspaceUri)); - return hover(documents.get(textDocument.uri)!, position, { - descriptionProvider: descriptionProvider(client, cache), - contextProviderConfig: repoContext && contextProviders(client, repoContext, cache) + return await hover(documents.get(textDocument.uri)!, position, { + descriptionProvider: descriptionProvider(client, cache), + contextProviderConfig: repoContext && contextProviders(client, repoContext, cache) + }); }); }); diff --git a/actions-languageserver/src/utils/timer.ts b/actions-languageserver/src/utils/timer.ts new file mode 100644 index 0000000..0278a11 --- /dev/null +++ b/actions-languageserver/src/utils/timer.ts @@ -0,0 +1,10 @@ +import {log} from "@github/actions-languageservice/log"; + +export function timeOperation(name: string, f: () => T): T { + const start = Date.now(); + const result = f(); + const end = Date.now(); + + log(`${name} took ${end - start}ms`); + return result; +} diff --git a/actions-languageservice/src/log.ts b/actions-languageservice/src/log.ts index f3237bc..a28f279 100644 --- a/actions-languageservice/src/log.ts +++ b/actions-languageservice/src/log.ts @@ -43,6 +43,16 @@ export function setLogLevel(ll: LogLevel) { logLevel = ll; } +export function log(message: string): void { + if (logLevel > LogLevel.Debug) { + return; + } + + for (const l of loggers) { + l.log(message); + } +} + export function info(message: string): void { if (logLevel > LogLevel.Info) { return; @@ -72,9 +82,3 @@ export function error(message: string): void { l.error(message); } } - -export function log(message: string): void { - for (const l of loggers) { - l.log(message); - } -}