Hi, On Sun, Jun 7, 2020 at 2:30 AM lacygoill <[email protected]> wrote:
> @yegappan <https://github.com/yegappan> Thank you for working on this > feature. > > The more entries a quickfix list contains, the more costly the > 'quickfixtextfunc' seems to be. > > I tried to write what seems to be a simple function: > > fu QuickFixTextFunc(info) abort > > if a:info.quickfix > > let e = getqflist({'id': a:info.id, 'idx': a:info.idx, 'items': > 1}).items[0] > > else > > let e = getloclist(0, {'id': a:info.id, 'idx': a:info.idx, 'items': > 1}).items[0] > > endif > > let fname = fnamemodify(bufname(e.bufnr), ':t') > > if strchars(fname, 1) <= 8 > > let fname = printf('%8s', fname) > > else > > let fname = printf('%.7s', fname)..'…' > > endif > > let lnum = printf('%5d', e.lnum) > > let col = printf('%3d', e.col) > > return fname..'|'..lnum..' col '..col..'| '..e.text > > endfu > > > And tested it with this command: > > $ vim -Nu NONE -S <(curl -Ls > https://gist.githubusercontent.com/lacygoill/57d3cd8b5313159f42af43704ebfa7a8/raw/a255cbc37efe18319690943129d0abdf661c1434/profile_quickfixtextfunc.vim) > > :QfTf 8 > > > On my machine, the test took about 2 minutes to complete. Here are the > results: > > 1000 entries: 0.001 seconds to run :copen > > 0.039 seconds to run :copen with 'qftf' 39 times slower > > 2000 entries: 0.001 seconds to run :copen > > 0.084 seconds to run :copen with 'qftf' 84 times slower > > 4000 entries: 0.003 seconds to run :copen > > 0.190 seconds to run :copen with 'qftf' 63 times slower > > 8000 entries: 0.006 seconds to run :copen > > 0.457 seconds to run :copen with 'qftf' 76 times slower > > 16000 entries: 0.012 seconds to run :copen > > 1.260 seconds to run :copen with 'qftf' 105 times slower > > 32000 entries: 0.025 seconds to run :copen > > 4.983 seconds to run :copen with 'qftf' 199 times slower > > 64000 entries: 0.054 seconds to run :copen > > 23.322 seconds to run :copen with 'qftf' 431 times slower > > 128000 entries: 0.107 seconds to run :copen > > 97.002 seconds to run :copen with 'qftf' 906 times slower > > > As you can see, for a quickfix list with more than a thousand entries, > 'quickfixtextfunc' makes :copen around a thousand times slower. And the > more entries, the slower the feature is. > > Do you think something could be done to prevent the function from being > called when the quickfix list contains too many entries? Maybe the option > could be set to a colon separated list of values: the name of the function > to format the entry in the quickfix window, and an optional number. When > the size of a quickfix list goes beyond that number, the function would not > be invoked to format the entry. It would be displayed as if the option was > not set. > > > I profiled the code with your test function. I see that the majority of the time is spent in the cleanup_function_call() function. This function is called after invoking a user defined function to cleanup the local hash table. I am not sure whether using a Vim9 type script will help here. I wlll also profile with a lambda function to see whether that will help. - Yegappan -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_dev/CAAW7x7k_uMacTJWLbdmKFs5rCV6FWKxO%2B8%3DAV%3Dyrd%2BcovLdMig%40mail.gmail.com.
