Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-20 Thread Fabrice Niessen
Nicolas Goaziou wrote:
 Eli Zaretskii e...@gnu.org writes:

 Thanks.  So this looks like a problem with Org Mode.  In particular,
 org-element-inline-babel-call-successor takes a lot of time in this
 case.  That function traverses the buffer from top to bottom:

   (while (search-forward call_ nil t)
  (save-excursion
(goto-char (match-beginning 0))
(when (looking-at org-babel-inline-lob-one-liner-regexp)
  (throw 'exit (cons 'inline-babel-call (point)

 This one is an updated function, which doesn't match posted report.
 I expect it to be faster than the previous implementation. It would be
 nice to have a new profiler report, though.

New test done just now. Still too slow (see video on
http://screencast.com/t/elBEfuZtd62), but much, much less...

There is an order of magnitude with the previous performance!
Excellent.

Environment:

- GNU Emacs 24.3.50.1 (i686-pc-mingw32) of 2014-03-15 on LEG570

- Org-mode version 8.2.5h (release_8.2.5h-808-g60a6c0), fetched 10 mins
  ago

Performance report:

--8---cut here---start-8---
- ...2357  97%
 - ad-activate   2343  97%
  - ad-activate-advised-definition   2343  97%
   - ad-make-cache-id2343  97%
- ad-arglist 2343  97%
 - require   2343  97%
  - apply2343  97%
   - ad-Advice-require   2343  97%
- let2343  97%
 - let*  2343  97%
  - org-element-at-point 2342  97%
   - save-excursion  2342  97%
- save-restriction   2342  97%
 - let   2342  97%
  - cond 2342  97%
   - org-element--parse-to   2342  97%
- catch  2342  97%
 - save-excursion2342  97%
  - save-restriction 2342  97%
   - let*2342  97%
- let*   2017  83%
 - prog1 2017  83%
  - catch2017  83%
   - while   2017  83%
- if 2017  83%
 - progn 2017  83%
  - setq 2017  83%
   - org-element--get-next-object-candidates
   2017  83%
- delq   2017  83%
 - if2017  83%
  - mapcar   2017  83%
   - #lambda 0x1741100e   2017  83%
- funcall2017  83%
 - org-element-latex-or-entity-successor
912  37%
  - save-excursion912  37%
   - let  912  37%
  if  912  37%
 - org-element-link-successor
389  16%
  - save-excursion389  16%
   - let  389  16%
  if  389  16%
 - org-element-line-break-successor 
   215   8%
  - save-excursion215   8%
   - let  215   8%
  and 215   8%
 - org-element-inline-src-block-successor   
  99   4%
  - save-excursion 99   4%
 if99   4%
 + org-element-macro-successor 
53   2%
 + org-element-footnote-reference-successor 
53  

Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-17 Thread Stefan
 I thought at using the profiler of Emacs 24, and it gives meaningful
 results. Good news #2.
 Here they are:
 --8---cut here---start-8---
 - flyspell-post-command-hook 3271  98%

Does this report only cover a single command that took a very long
time until it gave you back control (in which case I'm wondering why
flyspell-post-command-hook should be called so many times), or does it
cover a longer part of your editing session?


Stefan



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-17 Thread Fabrice Niessen
Stefan wrote:
 I thought at using the profiler of Emacs 24, and it gives meaningful
 results. Good news #2.
 Here they are:
 --8---cut here---start-8---
 - flyspell-post-command-hook 3271  98%

 Does this report only cover a single command that took a very long
 time until it gave you back control (in which case I'm wondering why
 flyspell-post-command-hook should be called so many times), or does it
 cover a longer part of your editing session?

I launched M-x profiler-start just before killing (C-k) the line which
I know shows the problem.

I launched M-x profiler-report as soon as I got control back.

So, it only covers a single command (C-k).

Fabrice Niessen

-- 
Fabrice Niessen
Leuven, Belgium
http://www.pirilampo.org/



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-17 Thread Stefan
 So, it only covers a single command (C-k).

Sorry, forget my question: I had forgotten to turn my brain on, somehow
(seems to happen too often lately).
These numbers aren't call counts, they're just numbers of samples, so
there's no evidence that flyspell-post-command-hook was run very many times.


Stefan



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-15 Thread Eli Zaretskii
 From: Fabrice Niessen fni-n...@pirilampo.org
 Cc: 16...@debbugs.gnu.org, emacs-orgmode emacs-orgmode@gnu.org
 Date: Fri, 14 Mar 2014 17:00:54 +0100
 
 I realized that Emacs did not into an infloop, but simply gave me back
 control after a very long time (more than 2 mins). Good news #1.
 
 I thought at using the profiler of Emacs 24, and it gives meaningful
 results. Good news #2.
 
 Here they are:
 
 --8---cut here---start-8---
 - flyspell-post-command-hook 3271  98%
  - apply 3271  98%
   - ad-Advice-flyspell-post-command-hook 3271  98%
- #compiled 0xe22f273271  98%
 - byte-code  3271  98%
  - flyspell-word 3271  98%
   - org-mode-flyspell-verify 3246  97%
- if  3246  97%
 - let*   3246  97%
  - prog1 3053  91%
   - catch3053  91%
- while   3053  91%
 - if 3053  91%
  - progn 3053  91%
   - setq 3053  91%
- org-element--get-next-object-candidates 3053  91%
 - delq   3053  91%
  - if3053  91%
   - mapcar   3053  91%
- #lambda 0x1741100e3053  91%
 - funcall3053  91%
  - org-element-inline-babel-call-successor   2873  86%
   - save-excursion   2873  86%
  if  2873  86%

Thanks.  So this looks like a problem with Org Mode.  In particular,
org-element-inline-babel-call-successor takes a lot of time in this
case.  That function traverses the buffer from top to bottom:

  (while (search-forward call_ nil t)
(save-excursion
  (goto-char (match-beginning 0))
  (when (looking-at org-babel-inline-lob-one-liner-regexp)
(throw 'exit (cons 'inline-babel-call (point)

Perhaps this takes too long in such a huge buffer with such long
lines.

 Though, I don't understand yet why Flyspell seems to be a problem in Org
 mode buffers

Clearly, that's because Org functions, in particular
org-mode-flyspell-verify, are called from flyspell-post-command-hook:

  - flyspell-post-command-hook 3271  98%
   - apply 3271  98%
- ad-Advice-flyspell-post-command-hook 3271  98%
 - #compiled 0xe22f273271  98%
  - byte-code  3271  98%
   - flyspell-word 3271  98%
- org-mode-flyspell-verify 3246  97%

If org-mode-flyspell-verify is expensive, it is not a good idea to use
it as flyspell-generic-check-word-predicate in huge Org buffers, since
Flyspell will invoke it after each command.

I hope Org developers will respond.  Or maybe you should simply submit
this bug report to Org bug tracker/list.



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-15 Thread Nicolas Goaziou
Hello,

Eli Zaretskii e...@gnu.org writes:

 Thanks.  So this looks like a problem with Org Mode.  In particular,
 org-element-inline-babel-call-successor takes a lot of time in this
 case.  That function traverses the buffer from top to bottom:

   (while (search-forward call_ nil t)
   (save-excursion
 (goto-char (match-beginning 0))
 (when (looking-at org-babel-inline-lob-one-liner-regexp)
   (throw 'exit (cons 'inline-babel-call (point)

This one is an updated function, which doesn't match posted report.
I expect it to be faster than the previous implementation. It would be
nice to have a new profiler report, though.


Regards,

-- 
Nicolas Goaziou



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-15 Thread Eli Zaretskii
 From: Nicolas Goaziou n.goaz...@gmail.com
 Cc: Fabrice Niessen fni-n...@pirilampo.org,  emacs-orgmode@gnu.org,  
 16...@debbugs.gnu.org
 Date: Sat, 15 Mar 2014 17:17:26 +0100
 
(while (search-forward call_ nil t)
  (save-excursion
(goto-char (match-beginning 0))
(when (looking-at org-babel-inline-lob-one-liner-regexp)
  (throw 'exit (cons 'inline-babel-call (point)
 
 This one is an updated function, which doesn't match posted report.

Do you happen to know, or can measure, how much faster is the latest
version?  Given the timing provided by the OP, it'd have to be at
least 100 times faster, to avoid annoying delays after each command.



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-15 Thread Nicolas Goaziou
Eli Zaretskii e...@gnu.org writes:

 Do you happen to know, or can measure, how much faster is the latest
 version?  Given the timing provided by the OP, it'd have to be at
 least 100 times faster, to avoid annoying delays after each command.

Basically it is,

  (search-forward call_)

versus

  (re-search-forward 
\\([^\n]*?\\)call_\\([^()[:space:]\n]+?\\)\\(\\[\\(.*?\\)\\]\\|\\(\\)\\)(\\(.*?\\))\\(\\[\\(.*?\\)\\]\\)?)

Of course, the speed factor depends on the length of the lines in the
document, but it could make a significant difference for the OP.


Regards,

-- 
Nicolas Goaziou



Re: [O] bug#16832: Emacs goes crazy when deleting lines

2014-03-14 Thread Fabrice Niessen
Eli Zaretskii wrote:
 From: Fabrice Niessen fni-n...@pirilampo.org
 Cc: 16...@debbugs.gnu.org
 Date: Wed, 26 Feb 2014 20:42:20 +0100
 
 Eli Zaretskii wrote:
  From: Fabrice Niessen fni-n...@pirilampo.org
  Cc: 16...@debbugs.gnu.org
  Date: Wed, 26 Feb 2014 12:06:24 +0100
  
   Then try F12 (if you are on XP), or try attaching a debugger and
   getting a C and Lisp backtrace.
  
  Hope this helps:
 
  Thanks.  Without a Lisp-level backtrace, there's not enough useful
  info here.
 
 Is there something I can do to get it in such a debugger session?

 Probably, but I don't know what to suggest.  I don't understand the
 error messages that you get from GDB, this usually happens when one
 tries to attach a debugger to a program that is already being
 debugged, which seems to be not the case here.  Weird.

  Perhaps finding the minimal set of customizations that reproduces the
  issue would lead faster to the solution.
 
 So you mean that the backtrace, with saveplace calls, does not lead to
 him as the culprit?

 These are not saveplace calls, this is Emacs searching for a string
 that includes saveplace.elc and save-place-alist as substrings.

I made a big progress on this one.

I realized that Emacs did not into an infloop, but simply gave me back
control after a very long time (more than 2 mins). Good news #1.

I thought at using the profiler of Emacs 24, and it gives meaningful
results. Good news #2.

Here they are:

--8---cut here---start-8---
- flyspell-post-command-hook 3271  98%
 - apply 3271  98%
  - ad-Advice-flyspell-post-command-hook 3271  98%
   - #compiled 0xe22f273271  98%
- byte-code  3271  98%
 - flyspell-word 3271  98%
  - org-mode-flyspell-verify 3246  97%
   - if  3246  97%
- let*   3246  97%
 - prog1 3053  91%
  - catch3053  91%
   - while   3053  91%
- if 3053  91%
 - progn 3053  91%
  - setq 3053  91%
   - org-element--get-next-object-candidates 3053  91%
- delq   3053  91%
 - if3053  91%
  - mapcar   3053  91%
   - #lambda 0x1741100e3053  91%
- funcall3053  91%
 - org-element-inline-babel-call-successor   2873  86%
  - save-excursion   2873  86%
 if  2873  86%
 + org-element-latex-or-entity-successor   81   2%
 + org-element-link-successor  35   1%
 + org-element-line-break-successor19   0%
 + org-element-inline-src-block-successor   9   0%
 + org-element-footnote-reference-successor 5   0%
 + org-element-macro-successor  5   0%
 + org-element-statistics-cookie-successor  5   0%
 + org-element-timestamp-successor  5   0%
 + org-element-export-snippet-successor 4   0%
 + org-element-radio-target-successor   4   0%
 + org-element-target-successor 4   0%
 + org-element-sub/superscript-successor3   0%
 + org-element-text-markup-successor1   0%
 + org-element-at-point   193   5%
  + flyspell-word-search-forward   15   0%
+ redisplay_internal (C function)  28   0%
+ ...  27   0%
--8---cut here---end---8---

Though, I don't understand yet why Flyspell seems to be a problem in Org
mode buffers, and not in Text mode buffers: as you can see in the video
on http://screencast.com/t/UiihFfPk,

1. Text mode + all my config (enabling Flyspell by default) is OK,

   (from 0:07 to 0:14, then undoing the changes)

2. Org mode  + all my config (enabling Flyspell by