autocmd_spec.lua (4047B)
1 local n = require('test.functional.testnvim')() 2 3 local clear = n.clear 4 local exec_lua = n.exec_lua 5 6 local N = 7500 7 8 describe('autocmd perf', function() 9 before_each(function() 10 clear() 11 12 exec_lua([[ 13 out = {} 14 function start() 15 ts = vim.uv.hrtime() 16 end 17 function stop(name) 18 out[#out+1] = ('%14.6f ms - %s'):format((vim.uv.hrtime() - ts) / 1000000, name) 19 end 20 ]]) 21 end) 22 23 after_each(function() 24 for _, line in ipairs(exec_lua([[return out]])) do 25 print(line) 26 end 27 end) 28 29 it('nvim_create_autocmd, nvim_del_autocmd (same pattern)', function() 30 exec_lua( 31 [[ 32 local N = ... 33 local ids = {} 34 35 start() 36 for i = 1, N do 37 ids[i] = vim.api.nvim_create_autocmd('User', { 38 pattern = 'Benchmark', 39 command = 'eval 0', -- noop 40 }) 41 end 42 stop('nvim_create_autocmd') 43 44 start() 45 for i = 1, N do 46 vim.api.nvim_del_autocmd(ids[i]) 47 end 48 stop('nvim_del_autocmd') 49 ]], 50 N 51 ) 52 end) 53 54 it('nvim_create_autocmd, nvim_del_autocmd (unique patterns)', function() 55 exec_lua( 56 [[ 57 local N = ... 58 local ids = {} 59 60 start() 61 for i = 1, N do 62 ids[i] = vim.api.nvim_create_autocmd('User', { 63 pattern = 'Benchmark' .. i, 64 command = 'eval 0', -- noop 65 }) 66 end 67 stop('nvim_create_autocmd') 68 69 start() 70 for i = 1, N do 71 vim.api.nvim_del_autocmd(ids[i]) 72 end 73 stop('nvim_del_autocmd') 74 ]], 75 N 76 ) 77 end) 78 79 it('nvim_create_autocmd + nvim_del_autocmd', function() 80 exec_lua( 81 [[ 82 local N = ... 83 84 start() 85 for _ = 1, N do 86 local id = vim.api.nvim_create_autocmd('User', { 87 pattern = 'Benchmark', 88 command = 'eval 0', -- noop 89 }) 90 vim.api.nvim_del_autocmd(id) 91 end 92 stop('nvim_create_autocmd + nvim_del_autocmd') 93 ]], 94 N 95 ) 96 end) 97 98 it('nvim_exec_autocmds (same pattern)', function() 99 exec_lua( 100 [[ 101 local N = ... 102 103 for i = 1, N do 104 vim.api.nvim_create_autocmd('User', { 105 pattern = 'Benchmark', 106 command = 'eval 0', -- noop 107 }) 108 end 109 110 start() 111 vim.api.nvim_exec_autocmds('User', { pattern = 'Benchmark', modeline = false }) 112 stop('nvim_exec_autocmds') 113 ]], 114 N 115 ) 116 end) 117 118 it('nvim_del_augroup_by_id', function() 119 exec_lua( 120 [[ 121 local N = ... 122 local group = vim.api.nvim_create_augroup('Benchmark', {}) 123 124 for i = 1, N do 125 vim.api.nvim_create_autocmd('User', { 126 pattern = 'Benchmark', 127 command = 'eval 0', -- noop 128 group = group, 129 }) 130 end 131 132 start() 133 vim.api.nvim_del_augroup_by_id(group) 134 stop('nvim_del_augroup_by_id') 135 ]], 136 N 137 ) 138 end) 139 140 it('nvim_del_augroup_by_name', function() 141 exec_lua( 142 [[ 143 local N = ... 144 local group = vim.api.nvim_create_augroup('Benchmark', {}) 145 146 for i = 1, N do 147 vim.api.nvim_create_autocmd('User', { 148 pattern = 'Benchmark', 149 command = 'eval 0', -- noop 150 group = group, 151 }) 152 end 153 154 start() 155 vim.api.nvim_del_augroup_by_name('Benchmark') 156 stop('nvim_del_augroup_by_id') 157 ]], 158 N 159 ) 160 end) 161 162 it(':autocmd, :autocmd! (same pattern)', function() 163 exec_lua( 164 [[ 165 local N = ... 166 167 start() 168 for i = 1, N do 169 vim.cmd('autocmd User Benchmark eval 0') 170 end 171 stop(':autocmd') 172 173 start() 174 vim.cmd('autocmd! User Benchmark') 175 stop(':autocmd!') 176 ]], 177 N 178 ) 179 end) 180 181 it(':autocmd, :autocmd! (unique patterns)', function() 182 exec_lua( 183 [[ 184 local N = ... 185 186 start() 187 for i = 1, N do 188 vim.cmd(('autocmd User Benchmark%d eval 0'):format(i)) 189 end 190 stop(':autocmd') 191 192 start() 193 vim.cmd('autocmd! User') 194 stop(':autocmd!') 195 ]], 196 N 197 ) 198 end) 199 end)