1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-07 12:26:15 +00:00

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.
This commit is contained in:
Eli Zaretskii 2015-11-07 15:32:45 +02:00
parent b74c8847e8
commit fc61ea4fd7
2 changed files with 7 additions and 4 deletions

View File

@ -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

View File

@ -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;
}