diff options
author | Eli Zaretskii <eliz@gnu.org> | 2015-11-07 15:32:45 +0200 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2015-11-07 15:32:45 +0200 |
commit | fc61ea4fd744480dcd5cd174f4599e135752882a (patch) | |
tree | 19cdf0cf369c47385c7e0a759506107af6f096c9 | |
parent | b74c8847e86a9fc2abfe3a80e75cd361ce2d53af (diff) | |
download | emacs-fc61ea4fd744480dcd5cd174f4599e135752882a.tar.gz emacs-fc61ea4fd744480dcd5cd174f4599e135752882a.tar.bz2 emacs-fc61ea4fd744480dcd5cd174f4599e135752882a.zip |
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.
-rw-r--r-- | lisp/frame.el | 6 | ||||
-rw-r--r-- | src/xdisp.c | 5 |
2 files changed, 7 insertions, 4 deletions
diff --git a/lisp/frame.el b/lisp/frame.el index 4b23cb20ac4..3f31a2973c6 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 dbc2d840d44..30dfac55601 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; } |