Ramel Eshed wrote:

> Hi Bram and Yegappan,
> 
> Yegappan, You were right -saving the qf_last makes a big difference. I 
> probably checked your patch after using many quickfix operations (see below).
> 
> Let me summarize the problems found so far using the agrep plugin:
> 
> 1. SEGV crashes - fixed
> 2. Vim hangs while quickfix window is opened - fixed.
> 3. GUI hangs - fixed
> 4. Timer issue in the GUI - fixed
> 
> 5. quickfix is slow in general - it's much better with Yegappan's patch or 
> 1881 but Vim is still not as responsive as it is when using the same search 
> without quickfix (with Agrep window). Following are the top lines from the 
> profiler log, in case you'll see something that can be optimized:
> 
>   %   cumulative   self              self     total           
>  time   seconds   seconds    calls  ms/call  ms/call  name    
>  11.34      0.11     0.11    11084     0.01     0.01  buf_valid
>  10.31      0.21     0.10    11378     0.01     0.01  do_cmdline
>   5.15      0.26     0.05  9912382     0.00     0.00  otherfile_buf
>   5.15      0.31     0.05   452997     0.00     0.00  get_func_tv
>   5.15      0.36     0.05    11083     0.00     0.02  buflist_new
>   5.15      0.41     0.05    11082     0.00     0.01  buflist_findname_stat
>   5.15      0.46     0.05     2131     0.02     0.02  buflist_findnr
> 
> 6. Agrep become very slow after using the quickfix list many times. Well, 
> this is what I see in the profiler log:
>   %   cumulative   self              self     total           
>  time   seconds   seconds    calls  ms/call  ms/call  name    
>  55.98      4.21     4.21    33246     0.13     0.13  qf_mark_adjust  <<<
>  12.10      5.12     0.91    50685     0.02     0.02  buf_valid
>   6.38      5.60     0.48    11091     0.04     0.05  buflist_findpat
>   5.05      5.98     0.38    13256     0.03     0.03  buflist_findnr
> 
> It looks like qf_mark_adjust is called each time line is appended to a
> buffer using 'out_io': 'buffer' for each entry in any quickfix list
> available. Can we avoid this?

No, this is needed.  But why is a buffer changed?  I thought you were
adding quickfix entries, which doesn't trigger adjusting marks.  Only
inserting/deleting a line in a buffer triggers this.

The reason this is needed, is that when you have a list of errors in
various files, which are at specific line numbers, and you make changes
in files, the line numbers need to be adjusted.

Since the qf_last change helped a lot, I susped just going through all
the quickfix entries is making it slow.  We would need to use another
data structure, which lists all the quickfix entries related to a
buffer.  Then we only need to look at the ones that might actually
change.  Keeping that list updated will be extra work though.  In
different circumstances it may actually make it slower.

-- 
Nothing is fool-proof to a sufficiently talented fool.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
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].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui