提交 f8391ef9 编写于 作者: J Johannes Rieken 提交者: GitHub

measure duration for completion provider from extensions, #109167

上级 38e46c9a
...@@ -445,22 +445,21 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha ...@@ -445,22 +445,21 @@ export class MainThreadLanguageFeatures implements MainThreadLanguageFeaturesSha
const provider: modes.CompletionItemProvider = { const provider: modes.CompletionItemProvider = {
triggerCharacters, triggerCharacters,
_debugDisplayName: extensionId.value, _debugDisplayName: extensionId.value,
provideCompletionItems: (model: ITextModel, position: EditorPosition, context: modes.CompletionContext, token: CancellationToken): Promise<modes.CompletionList | undefined> => { provideCompletionItems: async (model: ITextModel, position: EditorPosition, context: modes.CompletionContext, token: CancellationToken): Promise<modes.CompletionList | undefined> => {
return this._proxy.$provideCompletionItems(handle, model.uri, position, context, token).then(result => { const result = await this._proxy.$provideCompletionItems(handle, model.uri, position, context, token);
if (!result) { if (!result) {
return result; return result;
} }
return {
return { suggestions: result[ISuggestResultDtoField.completions].map(d => MainThreadLanguageFeatures._inflateSuggestDto(result[ISuggestResultDtoField.defaultRanges], d)),
suggestions: result[ISuggestResultDtoField.completions].map(d => MainThreadLanguageFeatures._inflateSuggestDto(result[ISuggestResultDtoField.defaultRanges], d)), incomplete: result[ISuggestResultDtoField.isIncomplete] || false,
incomplete: result[ISuggestResultDtoField.isIncomplete] || false, duration: result[ISuggestResultDtoField.duration],
dispose: () => { dispose: () => {
if (typeof result.x === 'number') { if (typeof result.x === 'number') {
this._proxy.$releaseCompletionItems(handle, result.x); this._proxy.$releaseCompletionItems(handle, result.x);
}
} }
}; }
}); };
} }
}; };
if (supportsResolveDetails) { if (supportsResolveDetails) {
......
...@@ -1215,13 +1215,15 @@ export interface ISuggestDataDto { ...@@ -1215,13 +1215,15 @@ export interface ISuggestDataDto {
export const enum ISuggestResultDtoField { export const enum ISuggestResultDtoField {
defaultRanges = 'a', defaultRanges = 'a',
completions = 'b', completions = 'b',
isIncomplete = 'c' isIncomplete = 'c',
duration = 'd',
} }
export interface ISuggestResultDto { export interface ISuggestResultDto {
[ISuggestResultDtoField.defaultRanges]: { insert: IRange, replace: IRange; }; [ISuggestResultDtoField.defaultRanges]: { insert: IRange, replace: IRange; };
[ISuggestResultDtoField.completions]: ISuggestDataDto[]; [ISuggestResultDtoField.completions]: ISuggestDataDto[];
[ISuggestResultDtoField.isIncomplete]: undefined | true; [ISuggestResultDtoField.isIncomplete]: undefined | true;
[ISuggestResultDtoField.duration]: number;
x?: number; x?: number;
} }
......
...@@ -31,6 +31,7 @@ import { encodeSemanticTokensDto } from 'vs/workbench/api/common/shared/semantic ...@@ -31,6 +31,7 @@ import { encodeSemanticTokensDto } from 'vs/workbench/api/common/shared/semantic
import { IdGenerator } from 'vs/base/common/idGenerator'; import { IdGenerator } from 'vs/base/common/idGenerator';
import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService'; import { IExtHostApiDeprecationService } from 'vs/workbench/api/common/extHostApiDeprecationService';
import { Cache } from './cache'; import { Cache } from './cache';
import { StopWatch } from 'vs/base/common/stopwatch';
// --- adapter // --- adapter
...@@ -896,6 +897,7 @@ class SuggestAdapter { ...@@ -896,6 +897,7 @@ class SuggestAdapter {
const replaceRange = doc.getWordRangeAtPosition(pos) || new Range(pos, pos); const replaceRange = doc.getWordRangeAtPosition(pos) || new Range(pos, pos);
const insertRange = replaceRange.with({ end: pos }); const insertRange = replaceRange.with({ end: pos });
const sw = new StopWatch(true);
const itemsOrList = await asPromise(() => this._provider.provideCompletionItems(doc, pos, token, typeConvert.CompletionContext.to(context))); const itemsOrList = await asPromise(() => this._provider.provideCompletionItems(doc, pos, token, typeConvert.CompletionContext.to(context)));
if (!itemsOrList) { if (!itemsOrList) {
...@@ -921,7 +923,8 @@ class SuggestAdapter { ...@@ -921,7 +923,8 @@ class SuggestAdapter {
x: pid, x: pid,
[extHostProtocol.ISuggestResultDtoField.completions]: completions, [extHostProtocol.ISuggestResultDtoField.completions]: completions,
[extHostProtocol.ISuggestResultDtoField.defaultRanges]: { replace: typeConvert.Range.from(replaceRange), insert: typeConvert.Range.from(insertRange) }, [extHostProtocol.ISuggestResultDtoField.defaultRanges]: { replace: typeConvert.Range.from(replaceRange), insert: typeConvert.Range.from(insertRange) },
[extHostProtocol.ISuggestResultDtoField.isIncomplete]: list.isIncomplete || undefined [extHostProtocol.ISuggestResultDtoField.isIncomplete]: list.isIncomplete || undefined,
[extHostProtocol.ISuggestResultDtoField.duration]: sw.elapsed()
}; };
for (let i = 0; i < list.items.length; i++) { for (let i = 0; i < list.items.length; i++) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册