From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.ciao.gmane.io!not-for-mail From: Eli Zaretskii Newsgroups: gmane.emacs.bugs Subject: bug#41200: Displaying a tooltip with x-show-tip gets very slow as more faces are defined Date: Fri, 15 May 2020 20:28:11 +0300 Message-ID: <833681glas.fsf@gnu.org> References: <8fd8896a-cd5c-66f4-4792-f65cac4dc4f5@gmail.com> <83lflx896q.fsf@gnu.org> <837dxd31cb.fsf@gnu.org> <789d786d-a07a-65c1-c0e4-433e4c18d64e@gmail.com> <835zcxgrby.fsf@gnu.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: ciao.gmane.io; posting-host="ciao.gmane.io:159.69.161.202"; logging-data="4383"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 41200@debbugs.gnu.org, andlind@gmail.com To: =?UTF-8?Q?Cl=C3=A9ment?= Pit-Claudel Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri May 15 19:30:50 2020 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jZeAc-00012O-2J for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 15 May 2020 19:30:50 +0200 Original-Received: from localhost ([::1]:38982 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZeAb-0007pQ-3j for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 15 May 2020 13:30:49 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:45178) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jZe8s-0004qm-9A for bug-gnu-emacs@gnu.org; Fri, 15 May 2020 13:29:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:55351) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jZe8r-0001AW-Uw for bug-gnu-emacs@gnu.org; Fri, 15 May 2020 13:29:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jZe8r-00086H-Rn for bug-gnu-emacs@gnu.org; Fri, 15 May 2020 13:29: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: Fri, 15 May 2020 17:29:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 41200 X-GNU-PR-Package: emacs Original-Received: via spool by 41200-submit@debbugs.gnu.org id=B41200.158956371431090 (code B ref 41200); Fri, 15 May 2020 17:29:01 +0000 Original-Received: (at 41200) by debbugs.gnu.org; 15 May 2020 17:28:34 +0000 Original-Received: from localhost ([127.0.0.1]:38664 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZe8P-00085L-PF for submit@debbugs.gnu.org; Fri, 15 May 2020 13:28:34 -0400 Original-Received: from eggs.gnu.org ([209.51.188.92]:37702) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jZe8O-000855-JP for 41200@debbugs.gnu.org; Fri, 15 May 2020 13:28:32 -0400 Original-Received: from fencepost.gnu.org ([2001:470:142:3::e]:46307) by eggs.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jZe8I-000166-AW; Fri, 15 May 2020 13:28:26 -0400 Original-Received: from [176.228.60.248] (port=4530 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1jZe8G-0006bE-UU; Fri, 15 May 2020 13:28:25 -0400 In-Reply-To: (message from =?UTF-8?Q?Cl=C3=A9ment?= Pit-Claudel on Fri, 15 May 2020 12:22:53 -0400) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.io gmane.emacs.bugs:180344 Archived-At: > Cc: 41200@debbugs.gnu.org, Anders Lindgren > From: Clément Pit-Claudel > Date: Fri, 15 May 2020 12:22:53 -0400 > > >>> face_hash_table? > >> > >> Thanks, good idea. I also liked Stefan's frame_face_map. > > > > "Map" is too general, IMO, it doesn't tell enough about the kind of > > object it is. > > Got it. Is face_table better? (that was Stefan's other suggestion) Is anything wrong with face_hash_table? > > I thought about updating the alist when the hash-table is modified. > > Since you always know whether the face is already in the hash-table, > > you don't need to scan the alist looking for it. > > Would that be done in C, or in any place where frame-new-face-defaults is modified? (for example, edebug changes face-new-frame-defaults in one place; if we keep the alist in addition to the hash table, would it modify both or would there be a C mechanism that mirrors hash-table modifications to the alist?) The latter was what I had in mind. > I have a variant of the patch that keeps the alist variable, but I fear that it's worse than removing it: since changes to the alist won't be propagated to the hash table, it might be better to error out with a compilation error? Not sure yet, it depends on how this is used. > Btw, I have one more question: some callers of face-list seems to rely on the order of faces added to it, so it would be better to preserve that order. Since hash-tables are not necessarily ordered, should I sort faces by face-id before returning them? Yes, I think so. > > I think the problem is that tab-line is declared a basic face, but its > > defface form is not in faces.el. > > Ah, good catch. Current there's a defface for tab-bar in lisp/tab-bar, and since that's preloaded it works, but the defface for tab-line is in lisp/tab-line.el and so isn't preloaded. > Should I move both to faces.el? Yes, I think so. > >>> I'm not sure I understand why do you need to look at the existing > >>> face's 'face' property? The original code didn't. > >> > >> The original code iterated over face-frame-alist in the order in which entries were added to it. If I understand correctly, iteration order isn't guaranteed on hash tables (is it?), so I had to find a different source of truth for these. > > > > Maybe we should store the ID with the face? I think we wanted to get > > rid of the 'face' property of the faces at some point. > > Sounds reasonable; but where would we store it? Right now faces are just symbols, right? Don't hash-tables allow us to store more than one item in each slot? > > No, I was asking why not start with it as nil and actually make a > > hash-table when we first need it. > > Oh, I thought it would be simpler to always have a hash table instead of having to sanity check every time. What is the default size of a hash-table?