Subject: Re: bug#20285: 25.0.50; blink-cursor-mode sometimes stops blinking

From: Eli Zaretskii <[email-masked]>
Date: Sat, 11 Apr 2015 10:34:23 +0300

> From: Tassilo Horn <[email-masked]>
> Cc: Eli Zaretskii <[email-masked]>,  [email-masked]
> Date: Sat, 11 Apr 2015 07:54:52 +0200
> 
> Ok, I used the following code (add-function because there's already a
> pre-redisplay function which I didn't want to replace):
> 
> --8<---------------cut here---------------start------------->8---
> (defvar th/redisplay-count 0)
> 
> (defun th/count-redisplays (windows)
>   (when (or (null windows)
>             (eq windows t)
>             (memq (selected-window) windows))
>     (incf th/redisplay-count)))
> 
> (add-function :before pre-redisplay-function #'th/count-redisplays)
> --8<---------------cut here---------------end--------------->8---
> 
> Then I switched to some large latex buffer, did M-: (setq
> th/redisplay-count 0), and then started compiling that document to
> generate some load.  Then I waited for exactly one minute in which there
> has been at least one phase of almost 10 seconds with the cursor being
> invisible on the screen before getting the value of th/redisplay-count.
> 
> And the value is seven hundred something every time I test.  That's more
> than 10 redisplays of the selected window per second!  I didn't do
> anything in that one minute so there shouldn't have been a reason for
> redisplay to kick in except for the blinking cursor.  And that would
> suggest 120 redisplays.

Can you please elaborate as to how you arrived to these numbers?  I
fail to follow your line of reasoning; perhaps it's too early and I
don't yet have enough caffeine in my blood.  E.g., how do you deduce
from "seven hundred something" that there were more than 10 redisplays
per second?

> Of course, it's still possible that during the 10 seconds where the
> cursor was invisible on the screen there hasn't been a redisplay of the
> selected window, but how can I know?

If your Emacs is configured with --enable-checking='yes,glyphs', then
you can invoke "M-x trace-redisplay RET", and see every entry to
redisplay_internal announced on stderr.