[Sorry about the CC, must have escaped me] I recompiled from latest git of today so emacs decalres version 26.0.50 I tried recompiling without your patch and also with your patch. No apparent improvement I tried running both (text-scale-adjust INC) and buffer-set-face both with and without (setq inhibit-compacting-font-caches t) The profiler profiles are attached. The profiler output for moving the cursor down from the beginning of the file to the end are as follows: ***************** M-x buffer-set-face variable-width without (setq inhibit-compacting-font-caches t) ***************** > - command-execute 2227 99% > - call-interactively 2227 99% > - funcall-interactively 2189 98% > - next-line 2176 97% > - line-move 2176 97% > - line-move-partial 1560 69% > - default-line-height 808 36% > default-font-height 808 36% > - window-screen-lines 752 33% > - default-line-height 752 33% > default-font-height 752 33% > - default-line-height 616 27% > default-font-height 612 27% > - display-graphic-p 4 0% > framep-on-display 4 0% > - execute-extended-command 13 0% > - sit-for 13 0% > redisplay 8 0% > - byte-code 34 1% > - read-extended-command 34 1% > - completing-read 34 1% > - completing-read-default 34 1% > - read-from-minibuffer 17 0% > - window--sanitize-window-sizes 5 0% > - walk-window-tree 5 0% > - walk-window-tree-1 5 0% > - # 5 0% > window-min-size 5 0% > - ... 4 0% > Automatic GC 4 0% ***************** M-x buffer-set-face variable-width with (setq inhibit-compacting-font-caches t) ***************** > - command-execute 2509 99% > - call-interactively 2509 99% > - funcall-interactively 2459 97% > - next-line 2415 96% > - line-move 2415 96% > - line-move-partial 1763 70% > - default-line-height 887 35% > default-font-height 887 35% > - window-screen-lines 876 34% > - default-line-height 876 34% > default-font-height 876 34% > - default-line-height 652 25% > default-font-height 652 25% > - execute-extended-command 44 1% > - sit-for 23 0% > - redisplay 12 0% > - redisplay_internal (C function) 4 0% > kill-this-buffer-enabled-p 4 0% > - command-execute 21 0% > - call-interactively 21 0% > - funcall-interactively 21 0% > - profiler-report 21 0% > - profiler-report-cpu 21 0% > profiler-cpu-profile 21 0% > - byte-code 50 1% > - read-extended-command 50 1% > - completing-read 50 1% > - completing-read-default 50 1% > - read-from-minibuffer 21 0% > - command-execute 3 0% > - call-interactively 3 0% > - funcall-interactively 3 0% > delete-backward-char 3 0% > - ... 5 0% > Automatic GC 5 0% On 08/04/17 19:18, Eli Zaretskii wrote: > [Please keep the bug address on the CC list.] > >> From: Gennady Uraltsev >> Date: Sat, 8 Apr 2017 18:32:34 +0200 >> >> The default font that emacs -Q starts with is >> >> xft:-adobe-Source Code >> Pro-normal-normal-normal-*-15-*-*-*-m-0-iso10646-1 (#x2C) >> >> (I guess it comes from the fact that that is my predefined qt and gtk >> monospace font) >> >> once zooming in (text-scale-adjust INC) I get >> >> xft:-adobe-Source Code >> Pro-normal-normal-normal-*-18-*-*-*-m-0-iso10646-1 (#x1E) >> >> If instead of zooming in I do M-x buffer-face-set variable-pitch >> I get the font >> >> xft:-unknown-Roboto-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1 (#x48) >> >> >> >> I can also replicate this by setting the global font to be something >> else like >> >> xft:-unknown-Droid Sans-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1 >> (#x54) >> xft:-monotype-Noto Sans-normal-normal-normal-*-15-*-*-*-*-0-iso10646-1 >> (#x36) >> >> at the level of the frame by using >> >> M-x set-frame-font >> -unknown-Droid Sans-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1 >> or >> -monotype-Noto Sans-normal-normal-normal-*-*-*-*-*-*-0-iso10646-1 >> >> respectively. This does not have a negative impact on performance. But >> as soon as I enable something like >> >> M-x buffer-face-set fixed-pitch or >> (text-scale-adjust INC) the problem returns > > Can you build your own Emacs? If so, could you please apply the > following patch and see if it solves the problem? > > diff --git a/src/font.c b/src/font.c > index a929509..bb6d18b 100644 > --- a/src/font.c > +++ b/src/font.c > @@ -2777,21 +2777,22 @@ font_list_entities (struct frame *f, Lisp_Object spec) > val = XCDR (val); > else > { > - val = driver_list->driver->list (f, scratch_font_spec); > - if (!NILP (val)) > - { > - Lisp_Object copy = copy_font_spec (scratch_font_spec); > + Lisp_Object copy; > > - val = Fvconcat (1, &val); > - ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); > - XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache))); > - } > + val = driver_list->driver->list (f, scratch_font_spec); > + if (NILP (val)) > + val = zero_vector; > + else > + val = Fvconcat (1, &val); > + copy = copy_font_spec (scratch_font_spec); > + ASET (copy, FONT_TYPE_INDEX, driver_list->driver->type); > + XSETCDR (cache, Fcons (Fcons (copy, val), XCDR (cache))); > } > - if (VECTORP (val) && ASIZE (val) > 0 > + if (ASIZE (val) > 0 > && (need_filtering > || ! NILP (Vface_ignored_fonts))) > val = font_delete_unmatched (val, need_filtering ? spec : Qnil, size); > - if (VECTORP (val) && ASIZE (val) > 0) > + if (ASIZE (val) > 0) > list = Fcons (val, list); > } > >