perf(extmarks): better track whether namespace has extmarks (#28615)

This avoids redraw when adding/removing an empty namespace for a window.

This also avoids marktree traversal when clearing a namespace that has
already been cleared, which is added as a benchmark.
This commit is contained in:
zeertzjq
2024-05-03 18:02:25 +08:00
committed by GitHub
parent cf9f002f31
commit d44ed3a885
6 changed files with 89 additions and 11 deletions

View File

@@ -1896,6 +1896,24 @@ describe('Extmarks buffer api with many marks', function()
end
eq(ns_marks[ns1], get_marks(ns1))
eq(ns_marks[ns2], get_marks(ns2))
api.nvim_buf_clear_namespace(0, ns1, 0, 10)
for id, mark in pairs(ns_marks[ns1]) do
if mark[1] < 10 then
ns_marks[ns1][id] = nil
end
end
eq(ns_marks[ns1], get_marks(ns1))
eq(ns_marks[ns2], get_marks(ns2))
api.nvim_buf_clear_namespace(0, ns1, 20, -1)
for id, mark in pairs(ns_marks[ns1]) do
if mark[1] >= 20 then
ns_marks[ns1][id] = nil
end
end
eq(ns_marks[ns1], get_marks(ns1))
eq(ns_marks[ns2], get_marks(ns2))
end)
it('can delete line', function()