]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow to disable compaction of font caches
authorEli Zaretskii <eliz@gnu.org>
Sat, 8 Oct 2016 19:31:14 +0000 (22:31 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 8 Oct 2016 19:31:14 +0000 (22:31 +0300)
* src/font.c (syms_of_font) <inhibit-compacting-font-caches>: New
boolean variable.
* src/alloc.c (compact_font_caches): Use it to bypass the call to
compact_font_cache_entry.  (Bug#24634)  (Bug#24565)

* etc/NEWS: Mention the new variable.

etc/NEWS
src/alloc.c
src/font.c

index 8c27289d5e0301ff4b51b78c416acc3cf49f4bfb..3e686f98db316631f3a5a5ef4ee09d72e1f45120 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -38,6 +38,12 @@ fontsets if the default font supports these characters.  Set this
 variable to nil to disable the new behavior and get back the old
 behavior.
 
+---
+** New variable 'inhibit-compacting-font-caches'.
+Set this variable to a non-nil value to speed up display of characters
+using large fonts, at the price of a larger memory footprint of the
+Emacs session.
+
 \f
 * Installation Changes in Emacs 25.1
 
index f33d93f83b47c81273d66bb46bdcc0bd2d57d84c..c7f58a8adc4b71831fe33ec9e154ed758361832f 100644 (file)
@@ -5584,7 +5584,11 @@ compact_font_caches (void)
   for (t = terminal_list; t; t = t->next_terminal)
     {
       Lisp_Object cache = TERMINAL_FONT_CACHE (t);
-      if (CONSP (cache))
+      /* Inhibit compacting the caches if the user so wishes.  Some of
+        the users don't mind a larger memory footprint, but do mind
+        slower redisplay.  */
+      if (!inhibit_compacting_font_caches
+         && CONSP (cache))
        {
          Lisp_Object entry;
 
index 2519599bc636b0dc7b54c5a2fc763d7341648397..b85956f225c9928c52181fce4c5fee7150968d82 100644 (file)
@@ -5430,6 +5430,19 @@ Set it to nil to enable logging.  If the environment variable
 EMACS_FONT_LOG is set at startup, it defaults to nil.  */);
   Vfont_log = Qnil;
 
+  DEFVAR_BOOL ("inhibit-compacting-font-caches", inhibit_compacting_font_caches,
+              doc: /*
+If non-nil, don't compact font caches during GC.
+Some large fonts cause lots of consing and trigger GC.  If they
+are removed from the font caches, they will need to be opened
+again during redisplay, which slows down redisplay.  If you
+see font-related delays in displaying some special characters,
+and cannot switch to a smaller font for those characters, set
+this variable non-nil.
+Disabling compaction of font caches might enlarge the Emacs memory
+footprint in sessions that use lots of different fonts.  */);
+  inhibit_compacting_font_caches = 0;
+
 #ifdef HAVE_WINDOW_SYSTEM
 #ifdef HAVE_FREETYPE
   syms_of_ftfont ();