emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NS port: How to debug excessive garbage collection?


From: Daniel Colascione
Subject: Re: NS port: How to debug excessive garbage collection?
Date: Sat, 13 Apr 2019 20:47:02 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1

On 4/13/19 11:07 AM, Keith David Bershatsky wrote:
Thank you, Alex, for helping to diagnose the issue of excessive garbage 
collection.  I observe the issue when building Emacs on an OSX machine using 
the --with-ns flag.  The issue may also occur on the w32 and X11 builds of 
Emacs, but it is not noticeable to my naked eye.  The NS build, on the other 
hand, permits me to see an appreciable pause for garbage collection every few 
keystrokes.  The garbage collection tests with *_consed that I performed today 
were on the NS port of Emacs.

The usage of Ftruncate in the 04/08/2019 proof concept patch of fake cursors 
occurs only in w32term.c and xterm.c.

My general understanding is as follows:

1.  Emacs uses nsterm.m/h when building on an OSX machine and the --with-ns 
flag.

2.  Emacs uses xterm.c when building on an OSX machine that has X11 installed 
and the following flags are used:  --with-x (yes) and --with-ns (no).

3.  Emacs uses w32term.c when building on a Windows machine.

I would be pleased to remove Ftruncate and replace it with roundf.  Thank you 
for the suggestion.  The development of the fake cursors feature has been a 
work in progress for a little over 3 years now ... learning some C coding along 
the way.  I have seen roundf in a few internet examples over the years, and 
have a vague recollection of trying to use it somewhere -- however, I cannot 
remember in what context.

Perhaps there is a similar mistake I have made that would affect the NS build 
of Emacs, or perhaps would affect all of the builds (NS/w32/X11).  It is 
interesting that excessive garbage collection occurs even with the fake cursors 
feature turned _off_, and it gets much worse when that feature is turned _on_.

Keith

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Date: [04-13-2019 10:02:07] <13 Apr 2019 11:02:07 -0600>
From: Alex Gramiak <address@hidden>
To: Keith David Bershatsky <address@hidden>
Cc: Eli Zaretskii <address@hidden>, address@hidden
Subject: Re: NS port:  How to debug excessive garbage collection?

Keith David Bershatsky <address@hidden> writes:

;;; begin STOCK / UNMODIFIED
[...]
((cons_cells_consed 2455285)
  (symbols_consed 16084)
  (strings_consed 104220)
  (string_chars_consed 2152636)
  (vector_cells_consed 6884284)
  (floats_consed 572)
  (intervals_consed 112))


;;; end STOCK UNMODIFIED

============================

;;; begin MODIFIED -- CROSSHAIRS "OFF"

[...]
((cons_cells_consed 2408250)
  (symbols_consed 16120)
  (strings_consed 112081)
  (string_chars_consed 2208228)
  (vector_cells_consed 6903029)
  (floats_consed 23104)
  (intervals_consed 112))

;;; end MODIFIED -- CROSSHAIRS "OFF"

============================

;;; begin MODIFIED -- CROSSHAIRS "ON"

[...]
((cons_cells_consed 2471395)
  (symbols_consed 16122)
  (strings_consed 111473)
  (string_chars_consed 2209234)
  (vector_cells_consed 6898322)
  (floats_consed 19817)
  (intervals_consed 112))

Your floats look out of control. I checked your latest diff, and found
this:

+  int int_red = XFIXNUM (Ftruncate (make_float (term_red), Qnil));
+  int int_green = XFIXNUM (Ftruncate (make_float (term_green), Qnil));;
+  int int_blue = XFIXNUM (Ftruncate (make_float (term_blue), Qnil));;

Why do you make a Lisp float just to truncate it? Can you run your test
again using one of the following?

I really wish we had a generational collector. :-(



reply via email to

[Prev in Thread] Current Thread [Next in Thread]