From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#21028: Performance regression in revision af1a69f4d17a482c359d98c00ef86fac835b5fac (Apr 2014). Date: Thu, 16 Mar 2017 17:27:09 +0200 Message-ID: <83ziglz1gy.fsf@gnu.org> References: <559F9FAF.8090708@live.com> <83lgvd581m.fsf@gnu.org> <83a8br6hq0.fsf@gnu.org> <672a0c69-4352-735f-cba4-025e642626ea@gmail.com> <83vauf50wb.fsf@gnu.org> <7408d59c-92ba-b879-5ac1-3cd5eee9b4db@gmail.com> <83tw9z4zzp.fsf@gnu.org> <2cad0da9-c931-b547-07bb-efec2f2bcf1f@gmail.com> <83h95w0w3p.fsf@gnu.org> <27853273-e6d8-077e-b9e0-b2bec2fe1fae@gmail.com> <834m1v2630.fsf@gnu.org> <1c224dc1-bd71-a910-b7cf-00313e4aec40@live.com> <83efy2cx5n.fsf@gnu.org> <3c3e8384-3412-f5a5-3ab2-a7eb4e699f1c@live.com> <83d1dmcrnl.fsf@gnu.org> <39fe847e-ef8a-149f-4478-d02e7c794c9a@live.com> <837f3tch7y.fsf@gnu.org> <1e7bc066-3f29-3897-5039-de7233efc58a@live.com> <83y3w9ay6y.fsf@gnu.org> <16f9db27-dd0f-ddaf-2f34-45b9fd4e69c6@live.com> <83k27rc15x.fsf@gnu.org> <79f4e3ce-6284-8fc5-fd8f-9f0c9cebe873@live.com> <831styblhv.fsf@gnu.org> Reply-To: Eli Zaretskii NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Trace: blaine.gmane.org 1489678100 20575 195.159.176.226 (16 Mar 2017 15:28:20 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Thu, 16 Mar 2017 15:28:20 +0000 (UTC) Cc: 21028@debbugs.gnu.org To: =?UTF-8?Q?Cl=C3=A9ment?= Pit--Claudel Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Thu Mar 16 16:28:16 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coXJy-0004U0-TD for geb-bug-gnu-emacs@m.gmane.org; Thu, 16 Mar 2017 16:28:11 +0100 Original-Received: from localhost ([::1]:44300 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1coXK4-0003Sa-Vv for geb-bug-gnu-emacs@m.gmane.org; Thu, 16 Mar 2017 11:28:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49703) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1coXJv-0003R1-08 for bug-gnu-emacs@gnu.org; Thu, 16 Mar 2017 11:28:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1coXJp-0002zl-Vt for bug-gnu-emacs@gnu.org; Thu, 16 Mar 2017 11:28:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:60851) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1coXJp-0002zh-SU for bug-gnu-emacs@gnu.org; Thu, 16 Mar 2017 11:28:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1coXJp-0000AP-LE for bug-gnu-emacs@gnu.org; Thu, 16 Mar 2017 11:28:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 16 Mar 2017 15:28:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 21028 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 21028-submit@debbugs.gnu.org id=B21028.1489678069622 (code B ref 21028); Thu, 16 Mar 2017 15:28:01 +0000 Original-Received: (at 21028) by debbugs.gnu.org; 16 Mar 2017 15:27:49 +0000 Original-Received: from localhost ([127.0.0.1]:59050 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coXJd-00009y-0W for submit@debbugs.gnu.org; Thu, 16 Mar 2017 11:27:49 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:58545) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1coXJb-00009k-Lf for 21028@debbugs.gnu.org; Thu, 16 Mar 2017 11:27:48 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1coXJR-0002sS-Rq for 21028@debbugs.gnu.org; Thu, 16 Mar 2017 11:27:42 -0400 Original-Received: from fencepost.gnu.org ([2001:4830:134:3::e]:44979) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1coXJR-0002sO-Nf; Thu, 16 Mar 2017 11:27:37 -0400 Original-Received: from 84.94.185.246.cable.012.net.il ([84.94.185.246]:2582 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1coXJQ-0003a2-Rr; Thu, 16 Mar 2017 11:27:37 -0400 In-reply-to: (message from =?UTF-8?Q?Cl=C3=A9ment?= Pit--Claudel on Wed, 15 Mar 2017 16:46:33 -0400) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:130645 Archived-At: > Cc: 21028@debbugs.gnu.org > From: Clément Pit--Claudel > Date: Wed, 15 Mar 2017 16:46:33 -0400 > > > The problem here is that opening a font and looking up a character is > > very expensive, certainly when there are hundreds of fonts installed. > > So Emacs filters the fonts according to the scripts they claim to > > support, and only opens those which appear to be valid candidates for > > the script of the character it needs to display. By using 'unicode as > > the script when you set up your fontset, you actually trip Emacs by > > telling it to try this font for every character it needs to display. > > You should instead specify the scripts which the fonts supports well. > > Ok — but why wasn't it slow in 24.3? That's the question about the significance of the zero_vector in the font-cache, the patch you want to apply. I'm still struggling with understanding why it speeds up the font search. > And why does the number of fonts matter, > if I'm only adding one (Symbola) with 'unicode? Any font has several variants, and they are all checked. Moreover, checking too many fonts conses a lot of Lisp data, which is likely to trigger GC, which is likely to throw away font caches, which will then require us to check those fonts again. > > That shouldn't be a problem in Emacs 25: it by default uses the > > default face's font for any punctuation and symbol characters for > > which the font has glyphs, even if the fontset specifies a different > > font for punctuation and symbol blocks. > > Neat. Though of course that doesn't help for Emacs < 24. Users who care about fonts and exotic characters shouldn't stay with Emacs 24. > > So using more accurate scripts gives a major improvement. Good. > > It also seems to negate the previous conclusion, right? Not really. > In these fast example I'm still adding Symbola with 'unicode — but > adding Ubuntu Mono with 'latin. Ubuntu Mono _is_ the problem. Symbola has very good coverage of almost all Unicode blocks, so it is not the problem. > > That could sometimes be the case, but I have found that in some cases > > omitting the registry for characters beyond Latin-1 can be a major > > setback. So I recommend to always use it. > > Ok. Could Emacs not infer it? I think Emacs still goes by the XLFD rules, which require iso8859-1 be the default. I don't know how important it is to keep that compatibility. > > You can use a font utility, such as Fontforge, to see which blocks the > > font supports, and how many characters from each block it can display. > > My conclusion from looking at Ubuntu Mono is that the above 3 scripts > > are the only ones it supports well; the rest are not covered well at > > all. You can, of course, add more scripts if you need them, but the > > downside will be that some of those scripts will be displayed by a mix > > of more than one font, which I think will make the display ugly. > > I don't care about the display being pretty as much as it being properly align > (vertically), which means that using Ubuntu Mono helps a lot. That's fine, just don't tell Emacs Ubuntu Mono supports the entire Unicode. > > Moreover, Emacs cannot compose glyphs that come from different fonts, > > so you will sometimes see decomposed display if you request a font for > > scripts where its support is incomplete. I think this is an important > > factor for users of prettify-symbols-mode in particular. > > Why? prettify-symbols-mode composes strings (typically) into single characters, > so why would this matter? I imagine that prettify-symbols-mode is not limited to single existing characters, but if it is, this issue is indeed not relevant to that mode. > >> (dolist (ft (fontset-list)) > >> (set-fontset-font ft 'unicode (font-spec :name "YOUR-USUAL-FONT")) > >> (set-fontset-font ft 'unicode (font-spec :name "Symbola") nil 'append)) > > > > Well, maybe with the new insights you have now, you can recommend them > > better setups which don't use 'unicode'. > I think I still have a blurry picture of the whole process, or at least it > sounds very complicated. Is it really the following? > > * Pick a good monospace font. Set that as the default Emacs font (this is easy) Yes. > * Pick a good math font. Symbola is easier than others, because Emacs knows > about it. Yes. > * Download and install fontforge. Figure out which ranges the math font > support, and all the characters that it supports that are not punctuation or > symbols, too Not needed, as long as the default font is set up via default-frame-alist. > * Create a set-fontset-font rule for each range and character. Figure out the > font's registry too. Add all these rules with 'append, though for better > performance you can use 'prepend, but for that you'll need to know which ranges > the first font supports, too. Should not be needed at all, as math symbols are already set up in the default fontset (if I understand correctly what you need the math font for, see below). Definitely not needed if Symbola is to be used. For other Math fonts, I expect the default to just work; if it doesn't, I'd like to see bug reports. > In Emacs 25, given that symbols use the default font, it looks like the > following should work, at least with your patch: > > 25.1/src/emacs -Q --eval "(set-fontset-font \"fontset-default\" 'unicode > (font-spec :name \"XITS Math\") nil 'prepend)" What happens if you don't do this? Which font is used for math symbols? Or are the problems with symbols other than math symbols? IOW, I don't understand fully why you need to set up XITS Math in the fontset, what is missing/incorrect/ugly if you don't?