nes: refactor: abstract computing minimum response delay (#1005)

This commit is contained in:
Ulugbek Abdullaev
2025-09-10 13:54:45 +00:00
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();
}