emacs-devel
[Top][All Lists]
Advanced

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

reducing equality tests in displaying text


From: YAMAMOTO Mitsuharu
Subject: reducing equality tests in displaying text
Date: Fri, 23 Jan 2009 11:23:00 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.8 (Shijō) APEL/10.6 Emacs/22.3 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

I experimented with some performance tool and noticed that there were
frequent equality tests in displaying text.  I think most of them can
safely be reduced.

1. Each call of assoc_no_quit (charset,_encoding_charset_alist) in
   fontset.c can be replaced with assq_no_quit because
   Vfont_encoding_charset_alist is a symbol-keyed alist.

2. Also in fontset.c:

   472    if (c >= 0)
   473      font_group = char_table_ref_and_range (base_fontset, c, &from, &to);
   474    else
   475      font_group = FONTSET_FALLBACK (base_fontset);
   476    if (NILP (font_group))
   477      return Qnil;

   If `font_group' becomes Qnil in line 473, `from' and `to' are not
   used at all.  So the most of the task of char_table_ref_and_range
   is wasted for this case.  Because font_group == Qnil case happens
   frequently, the char_table_ref_and_range call should be avoided for
   this case.

3. Despite its argument name, `has_char' functions in font backend
   drivers are mostly called for a font object instead of a font
   entity.  Some font backend drivers could make use of this fact:
   e.g., ftfont_has_char can avoid frequent assoc_no_quit calls if
   struct ft_font has a reference to fc_charset in ft_face_cache.

BTW, I suspect Ffontset_font is broken.  I couldn't get any meaningful
result from (fontset-font t ?a), for example.

                                     YAMAMOTO Mitsuharu
                                address@hidden




reply via email to

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