Subject: bug#23278: closed (Re: bug#23278: 25.0.92; font-lock-ensure is too slow)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 07 May 2016 23:12:01 +0000

Your bug report

#23278: 25.0.92; font-lock-ensure is too slow

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
23278: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=23278
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#23278: 25.0.92; font-lock-ensure is too slow
From: Dmitry Gutov <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Sun, 8 May 2016 02:10:26 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

On 05/07/2016 11:27 AM, Eli Zaretskii wrote:

> If you run with this since the time of your message and saw no
> problems, please push to emacs-25.  Otherwise, to master.

I didn't, and upon further consideration that patch had a bug (failed 
'jit-lock-fontify-mends-the-gaps' in the newly added jit-lock-tests.el).

I've pushed an updated patch to master, thanks.

Subject: 25.0.92; font-lock-ensure is too slow
From: Dmitry Gutov <[email-masked]>
To: [email-masked]
Date: Tue, 12 Apr 2016 22:49:09 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

Example:

Open xdisp.c, navigate to the first line. Evaluate:

(load "jit-lock")
(benchmark 1000 '(font-lock-ensure (line-beginning-position)
                                   (line-end-position)))

=> 0.66s

Which puts a dampener on the idea of syntax highlighting xref results in
the open files.

With the patch below, the benchmark executes 100 times faster.
OK to apply?

diff --git a/lisp/jit-lock.el b/lisp/jit-lock.el
index 810c220..a582c48 100644
--- a/lisp/jit-lock.el
+++ b/lisp/jit-lock.el
@@ -387,10 +387,11 @@ jit-lock-fontify-now
 	 ;; Fontify chunks beginning at START.  The end of a
 	 ;; chunk is either `end', or the start of a region
 	 ;; before `end' that has already been fontified.
-	 (while (and start (< start end))
-	   ;; Determine the end of this chunk.
-	   (setq next (or (text-property-any start end 'fontified t)
-			  end))
+	 (while (and start
+                     (< start
+                        ;; Determine the end of this chunk.
+                        (setq next (or (text-property-any start end 'fontified t)
+                                       end))))
 
 	   ;; Fontify the chunk, and mark it as fontified.
 	   ;; We mark it first, to make sure that we don't indefinitely

In GNU Emacs 25.0.92.12 (x86_64-unknown-linux-gnu, GTK+ Version 3.16.7)
 of 2016-04-10 built on axl
Repository revision: 20686f7a6430ef37f17b3866f14e7dc3095c1524
Windowing system distributor 'The X.Org Foundation', version 11.0.11702000
System Description:	Ubuntu 15.10