mirror of https://github.com/folke/lazy.nvim.git
perf: async render
This commit is contained in:
parent
a36ebd2a75
commit
ab46edbd47
|
@ -49,6 +49,7 @@ function Task.new(plugin, name, task, opts)
|
|||
return other.name ~= name or other:running()
|
||||
end, plugin._.tasks or {})
|
||||
table.insert(plugin._.tasks, self)
|
||||
self:render()
|
||||
return self
|
||||
end
|
||||
|
||||
|
@ -119,12 +120,18 @@ function Task:log(msg, level)
|
|||
msg = type(msg) == "table" and table.concat(msg, "\n") or msg
|
||||
---@cast msg string
|
||||
table.insert(self._log, { msg = msg, level = level })
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false })
|
||||
self:render()
|
||||
if Config.headless() then
|
||||
self:headless()
|
||||
end
|
||||
end
|
||||
|
||||
function Task:render()
|
||||
vim.schedule(function()
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false })
|
||||
end)
|
||||
end
|
||||
|
||||
function Task:headless()
|
||||
if not Config.options.headless.log then
|
||||
return
|
||||
|
@ -163,11 +170,13 @@ function Task:_done()
|
|||
if self._opts.on_done then
|
||||
self._opts.on_done(self)
|
||||
end
|
||||
vim.api.nvim_exec_autocmds("User", { pattern = "LazyRender", modeline = false })
|
||||
vim.api.nvim_exec_autocmds("User", {
|
||||
pattern = "LazyPlugin" .. self.name:sub(1, 1):upper() .. self.name:sub(2),
|
||||
data = { plugin = self.plugin.name },
|
||||
})
|
||||
vim.schedule(function()
|
||||
self:render()
|
||||
vim.api.nvim_exec_autocmds("User", {
|
||||
pattern = "LazyPlugin" .. self.name:sub(1, 1):upper() .. self.name:sub(2),
|
||||
data = { plugin = self.plugin.name },
|
||||
})
|
||||
end)
|
||||
end
|
||||
|
||||
function Task:time()
|
||||
|
|
|
@ -73,36 +73,24 @@ end
|
|||
---@param fn F
|
||||
---@return F
|
||||
function M.throttle(ms, fn)
|
||||
local timer = vim.uv.new_timer()
|
||||
local pending = false
|
||||
|
||||
---@type Async
|
||||
local async
|
||||
|
||||
local function running()
|
||||
return async and async:running()
|
||||
end
|
||||
local pending = false
|
||||
|
||||
return function()
|
||||
if timer:is_active() then
|
||||
if async and async:running() then
|
||||
pending = true
|
||||
return
|
||||
end
|
||||
timer:start(
|
||||
0,
|
||||
ms,
|
||||
vim.schedule_wrap(function()
|
||||
if running() then
|
||||
return
|
||||
end
|
||||
async = require("lazy.async").new(fn)
|
||||
if pending then
|
||||
pending = false
|
||||
else
|
||||
timer:stop()
|
||||
end
|
||||
end)
|
||||
)
|
||||
---@async
|
||||
async = require("lazy.async").new(function()
|
||||
repeat
|
||||
pending = false
|
||||
fn()
|
||||
async:sleep(ms)
|
||||
|
||||
until not pending
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue