diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2014-11-14 13:40:24 +0300 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2014-11-14 13:40:24 +0300 |
commit | a5cbb7d9cc072db90201dd6e7e597c424a7d015e (patch) | |
tree | f2fb93ecad8d075bf772506428fa2a29b29ee6e5 | |
parent | eb976992367d5b265dc779d82af5948987ec6de3 (diff) |
Attempt to allocate less font entity objects in xfont_list_pattern
* xfont.c (xfont_list_pattern): Do not allocate font entity object
for each candidate font but attempt to reuse it from previous improper
candidate, if any.
-rw-r--r-- | src/ChangeLog | 8 | ||||
-rw-r--r-- | src/xfont.c | 10 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 2be24fa851..6f105ead81 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2014-11-14 Dmitry Antipov <dmantipov@yandex.ru> + + * xfont.c (xfont_list_pattern): Do not allocate font entity object + for each candidate font but attempt to reuse it from previous improper + candidate, if any. + 2014-11-13 Paul Eggert <eggert@cs.ucla.edu> Avoid undefined behavior in color table hashing. @@ -237,7 +243,7 @@ functions in Vselection_converter_alist (Bug#18911). (syms_of_nsselect): Remove Vselection_converter_alist. -(2014-10-31 Dmitry Antipov <dmantipov@yandex.ru> +2014-10-31 Dmitry Antipov <dmantipov@yandex.ru> * font.c (copy_font_spec): Redesign to avoid Fcopy_alist and unnecessary initialization. Adjust comments. diff --git a/src/xfont.c b/src/xfont.c index 5e8dd37012..06a4479436 100644 --- a/src/xfont.c +++ b/src/xfont.c @@ -386,7 +386,7 @@ xfont_list_pattern (Display *display, const char *pattern, { char **indices = alloca (sizeof (char *) * num_fonts); Lisp_Object *props = XVECTOR (xfont_scratch_props)->contents; - Lisp_Object scripts = Qnil; + Lisp_Object scripts = Qnil, entity = Qnil; for (i = 0; i < ASIZE (xfont_scratch_props); i++) ASET (xfont_scratch_props, i, Qnil); @@ -397,11 +397,11 @@ xfont_list_pattern (Display *display, const char *pattern, for (i = 0; i < num_fonts; i++) { ptrdiff_t len; - Lisp_Object entity; if (i > 0 && xstrcasecmp (indices[i - 1], indices[i]) == 0) continue; - entity = font_make_entity (); + if (NILP (entity)) + entity = font_make_entity (); len = xfont_decode_coding_xlfd (indices[i], -1, buf); if (font_parse_xlfd (buf, len, entity) < 0) continue; @@ -459,7 +459,7 @@ xfont_list_pattern (Display *display, const char *pattern, { if (NILP (script) || xfont_chars_supported (chars, NULL, encoding, repertory)) - list = Fcons (entity, list); + list = Fcons (entity, list), entity = Qnil; continue; } if (memcmp (props, aref_addr (entity, FONT_FOUNDRY_INDEX), @@ -474,7 +474,7 @@ xfont_list_pattern (Display *display, const char *pattern, } if (NILP (script) || ! NILP (Fmemq (script, scripts))) - list = Fcons (entity, list); + list = Fcons (entity, list), entity = Qnil; } XFreeFontNames (names); } |