mirror of
https://github.com/microsoft/vscode.git
synced 2026-09-27 10:37:38 +01:00
nes: refactor: abstract computing minimum response delay (#1005)
This commit is contained in:
committed by
GitHub
parent
edb2488024
commit
074d467eff
@@ -301,21 +301,7 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
|
||||
|
||||
telemetryBuilder.setHasNextEdit(true);
|
||||
|
||||
const cacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsCacheDelay, this._expService);
|
||||
const rebasedCacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsRebasedCacheDelay, this._expService);
|
||||
const subsequentCacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsSubsequentCacheDelay, this._expService);
|
||||
|
||||
let minimumResponseDelay = cacheDelay;
|
||||
if (isRebasedCachedEdit && rebasedCacheDelay !== undefined) {
|
||||
minimumResponseDelay = rebasedCacheDelay;
|
||||
} else if (isSubsequentCachedEdit && subsequentCacheDelay !== undefined) {
|
||||
minimumResponseDelay = subsequentCacheDelay;
|
||||
}
|
||||
|
||||
tracer.trace(`minimum response delay: expecting ${minimumResponseDelay}ms delay. isRebasedCachedEdit: ${isRebasedCachedEdit} (rebasedCacheDelay: ${rebasedCacheDelay}), isSubsequentCachedEdit: ${isSubsequentCachedEdit} (subsequentCacheDelay: ${subsequentCacheDelay})`);
|
||||
|
||||
const fetchLatency = Date.now() - triggerTime;
|
||||
const delay = Math.max(0, minimumResponseDelay - fetchLatency);
|
||||
const delay = this.computeMinimumResponseDelay({ triggerTime, isRebasedCachedEdit, isSubsequentCachedEdit }, tracer);
|
||||
if (delay > 0) {
|
||||
await timeout(delay);
|
||||
if (cancellationToken.isCancellationRequested) {
|
||||
@@ -709,6 +695,29 @@ export class NextEditProvider extends Disposable implements INextEditProvider<Ne
|
||||
return disposables;
|
||||
}
|
||||
|
||||
private computeMinimumResponseDelay({ triggerTime, isRebasedCachedEdit, isSubsequentCachedEdit }: { triggerTime: number; isRebasedCachedEdit: boolean; isSubsequentCachedEdit: boolean }, tracer: ITracer): number {
|
||||
|
||||
const cacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsCacheDelay, this._expService);
|
||||
const rebasedCacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsRebasedCacheDelay, this._expService);
|
||||
const subsequentCacheDelay = this._configService.getExperimentBasedConfig(ConfigKey.Internal.InlineEditsSubsequentCacheDelay, this._expService);
|
||||
|
||||
let minimumResponseDelay = cacheDelay;
|
||||
if (isRebasedCachedEdit && rebasedCacheDelay !== undefined) {
|
||||
minimumResponseDelay = rebasedCacheDelay;
|
||||
} else if (isSubsequentCachedEdit && subsequentCacheDelay !== undefined) {
|
||||
minimumResponseDelay = subsequentCacheDelay;
|
||||
}
|
||||
|
||||
const nextEditProviderCallLatency = Date.now() - triggerTime;
|
||||
|
||||
// if the provider call took longer than the minimum delay, we don't need to delay further
|
||||
const delay = Math.max(0, minimumResponseDelay - nextEditProviderCallLatency);
|
||||
|
||||
tracer.trace(`[minimumDelay] expected delay: ${minimumResponseDelay}ms, effective delay: ${delay}. isRebasedCachedEdit: ${isRebasedCachedEdit} (rebasedCacheDelay: ${rebasedCacheDelay}), isSubsequentCachedEdit: ${isSubsequentCachedEdit} (subsequentCacheDelay: ${subsequentCacheDelay})`);
|
||||
|
||||
return delay;
|
||||
}
|
||||
|
||||
public handleShown(suggestion: NextEditResult) {
|
||||
this._lastShownTime = Date.now();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user