Skip to content

Commit

Permalink
perf: async render
Browse files Browse the repository at this point in the history
  • Loading branch information
folke committed Jun 28, 2024
1 parent a36ebd2 commit ab46edb
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 29 deletions.
21 changes: 15 additions & 6 deletions lua/lazy/manage/task/init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down
34 changes: 11 additions & 23 deletions lua/lazy/util.lua
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down

0 comments on commit ab46edb

Please sign in to comment.