Subject: bug#52298: closed (Re: bug#52298: 29.0.50; Frequent redisplay cycles induced by c-type-finder-timer-func timer in CC Mode)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 19 Dec 2021 14:39:02 +0000

Your bug report

#52298: 29.0.50; Frequent redisplay cycles induced by c-type-finder-timer-func timer in CC Mode

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].

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

Subject: Re: bug#52298: 29.0.50; Frequent redisplay cycles induced by c-type-finder-timer-func timer in CC Mode
From: Alan Mackenzie <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Sun, 19 Dec 2021 14:38:14 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello, Eli.

On Sun, Dec 12, 2021 at 19:05:45 +0000, Alan Mackenzie wrote:

> On Sun, Dec 12, 2021 at 11:15:34 +0200, Eli Zaretskii wrote:

[ .... ]

> > (Sorry, but I like CC Mode less and less with every Emacs release, due
> > to changes like this one.)

> This particular feature simply hasn't worked out well.  If the
> background scanning were to complete in a few seconds, it wouldn't be
> too bad.  But nearly two minutes on a modern (well, 4½ yo) machine for
> just one buffer, with the annoyance of the "stuttering", is not worth
> the gain.

> What we have is effectively the entire buffer getting half-fontified in
> the background.  That's not what JIT fontification is supposed to be
> about.

> So, in the next few days sometime, I will revert most of this change.  A
> useful and harmless piece of it (fontifying a newly found type
> throughout the buffer when it is encountered in "normal" jit
> fontification), I plan to leave in.  That will get rid of that timer and
> all the background scanning it triggered.

I've removed this feature as promised last Sunday, and I'm sure the
problem with the "stuttering" is now gone.  So I'm closing the bug with
this post.

-- 
Alan Mackenzie (Nuremberg, Germany).

Subject: 29.0.50; Frequent redisplay cycles induced by c-type-finder-timer-func timer in CC Mode
From: Eli Zaretskii <[email-masked]>
To: [email-masked]
Cc: Alan Mackenzie <[email-masked]>
Date: Sun, 05 Dec 2021 09:46:29 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

It used to be the case that starting "emacs -Q" and disabling
blink-cursor-mode and global-eldoc-mode was enough to get me Emacs
that doesn't perform redisplay unless required.  To see this, do the
following with any Emacs up to and including Emacs 28:

  emacs -Q
  M-x blink-cursor-mode RET
  M-x global-eldoc-mode RET
  M-x trace-redisplay RET

(The last command is only available if you configured with
"--enable-checking=yes,glyphs".)  This would produce a few lines of
output on stderr, and then stop until you do something in Emacs, like
move the cursor with an arrow key.

This is no longer the case in Emacs 29.  There, if you visit a C file,
you will see a flurry of stderr messages about constant redisplay
cycles being forced.  It seems like the culprit is the function
'c-type-finder-timer-func', which is run from a timer at 10 Hz (!),
and which for some reason forces Emacs to perform a redisplay cycle
with that frequency.  The trace itself, viz.:

  redisplay_internal 0
  071a03c8 (xdisp.c): try_window_id 2
  redisplay_preserve_echo_area (8)

means that the processing induced by that timer function is far from
being trivial, which means something that this function does causes
Emacs to think some real change might have happened in the buffer.

Not even "emacs -Q -D" is enough to get rid of this
'c-type-finder-timer-func' timer in CC Mode buffers.

Is it possible to prevent this frequent timer from firing when no
changes have been done to the buffer?  And in any case, please try to
include some logic in that function to avoid whatever it does now to
force such frequent non-trivial redisplay cycles.  If nothing else,
laptop users will hate us if we release Emacs with this behavior.

In GNU Emacs 29.0.50 (build 297, i686-pc-mingw32)
 of 2021-12-04 built on HOME-C4E4A596F7
Repository revision: f247fa5d5ce7cb34f23c979c17b14c5713eb5490
Repository branch: master
Windowing system distributor 'Microsoft Corp.', version 5.1.2600
System Description: Microsoft Windows XP Service Pack 3 (v5.1.0.2600)

Configured using:
 'configure -C --prefix=/d/usr --with-wide-int
 --enable-checking=yes,glyphs 'CFLAGS=-O0 -gdwarf-4 -g3''

Configured features:
ACL GIF GMP GNUTLS HARFBUZZ JPEG JSON LCMS2 LIBXML2 MODULES NOTIFY
W32NOTIFY PDUMPER PNG RSVG SOUND THREADS TIFF TOOLKIT_SCROLL_BARS WEBP
XPM ZLIB

Important settings:
  value of $LANG: ENU
  locale-coding-system: cp1255

Major mode: Lisp Interaction

Minor modes in effect:
  tooltip-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message mailcap yank-media rmc puny
dired dired-loaddefs rfc822 mml mml-sec epa derived epg rfc6068
epg-config gnus-util rmail rmail-loaddefs auth-source cl-seq eieio
eieio-core cl-macs eieio-loaddefs password-cache json map
text-property-search time-date seq gv subr-x byte-opt bytecomp
byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047
rfc2045 ietf-drums mm-util mail-prsvr mail-utils cus-start cus-load
iso-transl tooltip eldoc paren electric uniquify ediff-hook vc-hooks
lisp-float-type elisp-mode mwheel dos-w32 ls-lisp disp-table
term/w32-win w32-win w32-vars term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode
prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu
timer select scroll-bar mouse jit-lock font-lock syntax font-core
term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese composite emoji-zwj charscript charprop case-table
epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice
button loaddefs faces cus-face macroexp files window text-properties
overlay sha1 md5 base64 format env code-pages mule custom widget keymap
hashtable-print-readable backquote threads w32notify w32 lcms2 multi-tty
make-network-process emacs)

Memory information:
((conses 16 65940 11920)
 (symbols 48 8784 1)
 (strings 16 23857 3044)
 (string-bytes 1 667119)
 (vectors 16 14295)
 (vector-slots 8 183967 12730)
 (floats 8 25 52)
 (intervals 40 273 68)
 (buffers 888 10))