add performance.filtering_context_budget

fixes #2060
This commit is contained in:
hrsh7th
2024-10-20 13:56:45 +09:00
parent c183f45fab
commit 07f3f005c9
4 changed files with 21 additions and 5 deletions

View File

@@ -456,7 +456,13 @@ performance.fetching_timeout~
Sets the timeout of candidate fetching process.
The nvim-cmp will wait to display the most prioritized source.
*cmp-config.performance.confirm_resolve_timeout*
*cmp-config.performance.filtering_context_budget*
performance.filtering_context_budget~
`number`
Sets the filtering context budget in ms.
If filtering takes longer than this, it will be deferred.
*cmp-config.performance.confirm_resolve_timeout*
performance.confirm_resolve_timeout~
`number`
Sets the timeout for resolving item before confirmation.

View File

@@ -19,6 +19,7 @@ return function()
debounce = 60,
throttle = 30,
fetching_timeout = 500,
filtering_context_budget = 3,
confirm_resolve_timeout = 80,
async_budget = 1,
max_view_entries = 200,

View File

@@ -61,7 +61,8 @@ source.reset = function(self)
self.request_offset = -1
self.completion_context = nil
self.status = source.SourceStatus.WAITING
self.complete_dedup(function() end)
self.complete_dedup(function()
end)
end
---Return source config
@@ -111,6 +112,9 @@ source.get_entries = function(self, ctx)
---@type cmp.Entry[]
local entries = {}
local matching_config = self:get_matching_config()
local filtering_context_budget = config.get().performance.filtering_context_budget / 1000
local s = os.clock()
for _, e in ipairs(target_entries) do
local o = e.offset
if not inputs[o] then
@@ -128,9 +132,13 @@ source.get_entries = function(self, ctx)
entries[#entries + 1] = e
end
end
async.yield()
if ctx.aborted then
async.abort()
if os.clock() - s > filtering_context_budget then
async.yield()
if ctx.aborted then
async.abort()
end
s = os.clock()
end
end

View File

@@ -103,6 +103,7 @@ cmp.ItemField = {
---@field public debounce integer
---@field public throttle integer
---@field public fetching_timeout integer
---@field public filtering_context_budget integer
---@field public confirm_resolve_timeout integer
---@field public async_budget integer Maximum time (in ms) an async function is allowed to run during one step of the event loop.
---@field public max_view_entries integer