Subject: bug#15876: 24.3.50; Highly degraded performance between rev 114715 and 115006

From: Eli Zaretskii <[email-masked]>
Date: Thu, 05 Dec 2013 19:36:02 +0200

> Date: Thu, 05 Dec 2013 10:29:45 +0400
> From: Dmitry Antipov <[email-masked]>
> CC: [email-masked], [email-masked]
> 
> 1. Apply attached patch and rebuild.
> 2. Run emacs -Q, then M-x insert-char 25b7 and M-x describe-char.
>     Now you should know the C pointer to font object which is used
>     to display right-pointing triangle (underlined red on screenshot).
> 3. Insert GDB breakpoints to fprintf, move cursor, do some basic editing
>     around the triangle and run M-x garbage-collect few times.  An
>     interesting font object should be either marked or swept; if it's
>     markerd, you should hit the breakpoint "GCX: mark interesting font Y".
>     For my --without-xft build, M-x garbage-collect always shows that an
>     interesting font object is marked in expected way - via face cache. E.g.:
> 
> (gdb) bt 8
> #0  __fprintf (stream=0x3869dbb1e0 <_IO_2_1_stderr_>, format=0x6cf620 "GC%ld: mark interesting font %p\n") at fprintf.c:27
> #1  0x00000000005c7269 in mark_vectorlike (ptr=0xd7c8b8) at ../../trunk/src/alloc.c:5745
> #2  0x00000000005c75a4 in mark_face_cache (c=0x11456b0) at ../../trunk/src/alloc.c:5838
> #3  0x00000000005c7b43 in mark_object (arg=...) at ../../trunk/src/alloc.c:6014
> #4  0x00000000005c7288 in mark_vectorlike (ptr=0x127d4f8) at ../../trunk/src/alloc.c:5754
> #5  0x00000000005c7baa in mark_object (arg=...) at ../../trunk/src/alloc.c:6031
> #6  0x00000000005c7288 in mark_vectorlike (ptr=0xcf3230) at ../../trunk/src/alloc.c:5754
> #7  0x00000000005c7457 in mark_buffer (buffer=0xcf3230) at ../../trunk/src/alloc.c:5805
> (More stack frames follow...)

Thanks.

Yes, I see the same on Windows.  However, I'm not sure we are looking
at objects we should be looking at.  The ones your code traces are
font objects.  By contrast, the entries in the font caches are cons
cells like this:

   (font-spec . [font-entity1 font-entity2 ...])

IOW, I think we should be tracing font-specs and font-entities, not
font objects.