emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master fc61ea4: Speed up lookup in redisplay--variables


From: Eli Zaretskii
Subject: [Emacs-diffs] master fc61ea4: Speed up lookup in redisplay--variables
Date: Sat, 07 Nov 2015 13:34:00 +0000

branch: master
commit fc61ea4fd744480dcd5cd174f4599e135752882a
Author: Eli Zaretskii <address@hidden>
Commit: Eli Zaretskii <address@hidden>

    Speed up lookup in redisplay--variables
    
    * lisp/frame.el (redisplay--variables): Make it a hash-table.
    
    * src/xdisp.c (maybe_set_redisplay): Access redisplay--variables
    as a hash-table.  This speeds up this function by an order of
    magnitude: where previously a setq was slowed down by 100% by
    introducing the maybe_set_redisplay test, it is now only 5%
    slower.
    (syms_of_xdisp) <redisplay--variables>: Doc fix.
---
 lisp/frame.el |    6 ++++--
 src/xdisp.c   |    5 +++--
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/lisp/frame.el b/lisp/frame.el
index 4b23cb2..3f31a29 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -2231,8 +2231,10 @@ See also `toggle-frame-maximized'."
 (make-obsolete-variable
  'window-system-version "it does not give useful information." "24.3")
 
-;; These variables should trigger redisplay of the current buffer.
-(setq redisplay--variables
+;; Variables which should trigger redisplay of the current buffer.
+(setq redisplay--variables (make-hash-table :test 'eq :size 10))
+(mapc (lambda (var)
+        (puthash var 1 redisplay--variables))
       '(line-spacing
         overline-margin
         line-prefix
diff --git a/src/xdisp.c b/src/xdisp.c
index dbc2d84..30dfac5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -623,7 +623,8 @@ bset_update_mode_line (struct buffer *b)
 void
 maybe_set_redisplay (Lisp_Object symbol)
 {
-  if (!NILP (Fassoc_string (symbol, Vredisplay__variables, Qnil)))
+  if (HASH_TABLE_P (Vredisplay__variables)
+      && hash_lookup (XHASH_TABLE (Vredisplay__variables), symbol, NULL) >= 0)
     {
       bset_update_mode_line (current_buffer);
       current_buffer->prevent_redisplay_optimizations_p = true;
@@ -31478,7 +31479,7 @@ display table takes effect; in this case, Emacs does 
not consult
   Vredisplay__mode_lines_cause = Fmake_hash_table (0, NULL);
 
   DEFVAR_LISP ("redisplay--variables", Vredisplay__variables,
-     doc: /* A list of variables changes to which trigger a thorough 
redisplay.  */);
+     doc: /* A hash-table of variables changing which triggers a thorough 
redisplay.  */);
   Vredisplay__variables = Qnil;
 }
 



reply via email to

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