aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2024-05-03 18:02:25 +0800
committerGitHub <noreply@github.com>2024-05-03 18:02:25 +0800
commitd44ed3a885e163df33cce8180ca9f72fb5c0661a (patch)
tree48c5c793cc69a1bf35c712885bf123e7654e37d7 /src/nvim/api
parentcf9f002f31c8b4d9d42912a3f45f5d3db4462fd9 (diff)
downloadrneovim-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 'src/nvim/api')
-rw-r--r--src/nvim/api/extmark.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/nvim/api/extmark.c b/src/nvim/api/extmark.c
index 60e12e9da8..320e14b654 100644
--- a/src/nvim/api/extmark.c
+++ b/src/nvim/api/extmark.c
@@ -1234,7 +1234,9 @@ Boolean nvim_win_add_ns(Window window, Integer ns_id, Error *err)
set_put(uint32_t, &win->w_ns_set, (uint32_t)ns_id);
- changed_window_setting(win);
+ if (map_has(uint32_t, win->w_buffer->b_extmark_ns, (uint32_t)ns_id)) {
+ changed_window_setting(win);
+ }
return true;
}
@@ -1279,7 +1281,9 @@ Boolean nvim_win_remove_ns(Window window, Integer ns_id, Error *err)
set_del(uint32_t, &win->w_ns_set, (uint32_t)ns_id);
- changed_window_setting(win);
+ if (map_has(uint32_t, win->w_buffer->b_extmark_ns, (uint32_t)ns_id)) {
+ changed_window_setting(win);
+ }
return true;
}