diff options
author | zeertzjq <zeertzjq@outlook.com> | 2024-05-03 18:02:25 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-03 18:02:25 +0800 |
commit | d44ed3a885e163df33cce8180ca9f72fb5c0661a (patch) | |
tree | 48c5c793cc69a1bf35c712885bf123e7654e37d7 /test/benchmark/extmark_spec.lua | |
parent | cf9f002f31c8b4d9d42912a3f45f5d3db4462fd9 (diff) | |
download | rneovim-d44ed3a885e163df33cce8180ca9f72fb5c0661a.tar.gz rneovim-d44ed3a885e163df33cce8180ca9f72fb5c0661a.tar.bz2 rneovim-d44ed3a885e163df33cce8180ca9f72fb5c0661a.zip |
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.
Diffstat (limited to 'test/benchmark/extmark_spec.lua')
-rw-r--r-- | test/benchmark/extmark_spec.lua | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/test/benchmark/extmark_spec.lua b/test/benchmark/extmark_spec.lua new file mode 100644 index 0000000000..0d284b363c --- /dev/null +++ b/test/benchmark/extmark_spec.lua @@ -0,0 +1,45 @@ +local n = require('test.functional.testnvim')() + +local clear = n.clear +local exec_lua = n.exec_lua + +describe('extmark perf', function() + before_each(function() + clear() + + exec_lua([[ + out = {} + function start() + ts = vim.uv.hrtime() + end + function stop(name) + out[#out+1] = ('%14.6f ms - %s'):format((vim.uv.hrtime() - ts) / 1000000, name) + end + ]]) + end) + + after_each(function() + for _, line in ipairs(exec_lua([[return out]])) do + print(line) + end + end) + + it('repeatedly calling nvim_buf_clear_namespace #28615', function() + exec_lua([[ + vim.api.nvim_buf_set_lines(0, 0, -1, true, { 'foo', 'bar' }) + local ns0 = vim.api.nvim_create_namespace('ns0') + local ns1 = vim.api.nvim_create_namespace('ns1') + + for _ = 1, 10000 do + vim.api.nvim_buf_set_extmark(0, ns0, 0, 0, {}) + end + vim.api.nvim_buf_set_extmark(0, ns1, 1, 0, {}) + + start() + for _ = 1, 10000 do + vim.api.nvim_buf_clear_namespace(0, ns1, 0, -1) + end + stop('nvim_buf_clear_namespace') + ]]) + end) +end) |