unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Lars Ingebrigtsen <larsi@gnus.org>
To: Gregory Heytings <ghe@sdf.org>
Cc: Eli Zaretskii <eliz@gnu.org>, emacs-devel@gnu.org
Subject: Re: Redisplay slower in Emacs 28 than Emacs 27
Date: Tue, 08 Dec 2020 00:48:24 +0100	[thread overview]
Message-ID: <87eek15gaf.fsf@gnus.org> (raw)
In-Reply-To: <alpine.NEB.2.22.394.2012080008360453.25298@sdf.lonestar.org> (Gregory Heytings's message of "Mon, 07 Dec 2020 23:09:10 +0000")

It's getting a bit late, I think.  This is the one!  For sure:


diff --git a/lisp/image.el b/lisp/image.el
index 9ebb603086..4b6710e4a3 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -679,8 +679,10 @@ image-search-load-path
       (setq path (cdr path)))
     (if found filename)))
 
+(defvar find-image--cache (make-hash-table :test #'equal))
+
 ;;;###autoload
-(defun find-image (specs)
+(defun find-image (specs &optional cache)
   "Find an image, choosing one of a list of image specifications.
 
 SPECS is a list of image specifications.
@@ -698,23 +700,28 @@ find-image
 The image is looked for in `image-load-path'.
 
 Image files should not be larger than specified by `max-image-size'."
-  (let (image)
-    (while (and specs (null image))
-      (let* ((spec (car specs))
-	     (type (plist-get spec :type))
-	     (data (plist-get spec :data))
-	     (file (plist-get spec :file))
-	     found)
-	(when (image-type-available-p type)
-	  (cond ((stringp file)
-		 (if (setq found (image-search-load-path file))
-		     (setq image
-			   (cons 'image (plist-put (copy-sequence spec)
-						   :file found)))))
-		((not (null data))
-		 (setq image (cons 'image spec)))))
-	(setq specs (cdr specs))))
-    image))
+  (or (and cache
+           (gethash specs find-image--cache))
+      (let ((orig-specs specs)
+            image)
+        (while (and specs (null image))
+          (let* ((spec (car specs))
+	         (type (plist-get spec :type))
+	         (data (plist-get spec :data))
+	         (file (plist-get spec :file))
+	         found)
+	    (when (image-type-available-p type)
+	      (cond ((stringp file)
+		     (if (setq found (image-search-load-path file))
+		         (setq image
+			       (cons 'image (plist-put (copy-sequence spec)
+						       :file found)))))
+		    ((not (null data))
+		     (setq image (cons 'image spec)))))
+	    (setq specs (cdr specs))))
+        (when cache
+          (setf (gethash orig-specs find-image--cache) image))
+        image)))
 
 
 ;;;###autoload
diff --git a/lisp/tool-bar.el b/lisp/tool-bar.el
index 8456216430..37f42be3f4 100644
--- a/lisp/tool-bar.el
+++ b/lisp/tool-bar.el
@@ -159,7 +159,8 @@ tool-bar--image-expression
 		       ((< (display-color-cells) 256)
 			',(list xpm-lo-spec xpm-spec pbm-spec xbm-spec))
 		       (t
-			',(list xpm-spec pbm-spec xbm-spec))))))
+			',(list xpm-spec pbm-spec xbm-spec)))
+                 t)))
 
 ;;;###autoload
 (defun tool-bar-local-item (icon def key map &rest props)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




  parent reply	other threads:[~2020-12-07 23:48 UTC|newest]

Thread overview: 82+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-07 14:53 Redisplay slower in Emacs 28 than Emacs 27 Gregory Heytings via Emacs development discussions.
2020-12-07 15:04 ` Lars Ingebrigtsen
2020-12-07 15:14   ` Gregory Heytings via Emacs development discussions.
2020-12-07 15:19     ` Lars Ingebrigtsen
2020-12-07 15:28       ` Gregory Heytings via Emacs development discussions.
2020-12-07 15:41         ` Lars Ingebrigtsen
2020-12-07 15:43           ` Gregory Heytings via Emacs development discussions.
2020-12-07 15:45             ` Gregory Heytings via Emacs development discussions.
2020-12-07 16:14             ` Lars Ingebrigtsen
2020-12-07 16:46               ` Gregory Heytings via Emacs development discussions.
2020-12-07 17:30                 ` Eli Zaretskii
2020-12-07 18:45                   ` Gregory Heytings via Emacs development discussions.
2020-12-07 18:47                     ` Lars Ingebrigtsen
2020-12-07 18:49                       ` Gregory Heytings via Emacs development discussions.
2020-12-07 20:58                         ` Alan Third
2020-12-07 21:24                           ` Gregory Heytings via Emacs development discussions.
2020-12-07 21:06                         ` Gregory Heytings via Emacs development discussions.
2020-12-07 21:15                           ` Lars Ingebrigtsen
2020-12-07 21:23                             ` Alan Third
2020-12-07 21:31                               ` Lars Ingebrigtsen
2020-12-07 21:47                                 ` Lars Ingebrigtsen
2020-12-07 21:46                               ` Gregory Heytings via Emacs development discussions.
2020-12-07 21:49                             ` Gregory Heytings via Emacs development discussions.
2020-12-07 21:59                               ` Lars Ingebrigtsen
2020-12-07 22:11                                 ` Lars Ingebrigtsen
2020-12-07 22:56                                   ` Gregory Heytings via Emacs development discussions.
2020-12-07 23:02                                     ` Lars Ingebrigtsen
2020-12-07 23:09                                       ` Gregory Heytings via Emacs development discussions.
2020-12-07 23:44                                         ` Lars Ingebrigtsen
2020-12-07 23:47                                         ` Lars Ingebrigtsen
2020-12-08  0:04                                           ` Gregory Heytings via Emacs development discussions.
2020-12-07 23:48                                         ` Lars Ingebrigtsen [this message]
2020-12-08  0:17                                           ` Gregory Heytings via Emacs development discussions.
2020-12-08  0:23                                             ` Lars Ingebrigtsen
2020-12-08  0:41                                               ` Lars Ingebrigtsen
2020-12-08  1:21                                                 ` Lars Ingebrigtsen
2020-12-08 17:21                                               ` João Távora
2020-12-08 14:58                                           ` Eli Zaretskii
2020-12-08 15:07                                             ` Lars Ingebrigtsen
2020-12-08 15:19                                               ` Lars Ingebrigtsen
2020-12-08 16:17                                                 ` Eli Zaretskii
2020-12-08 16:34                                                   ` Lars Ingebrigtsen
2020-12-08 16:56                                                     ` Eli Zaretskii
2020-12-08 17:52                                                       ` Lars Ingebrigtsen
2020-12-08 16:11                                               ` Eli Zaretskii
2020-12-07 22:23                                 ` Alan Third
2020-12-07 22:32                                   ` Lars Ingebrigtsen
2020-12-07 18:50                       ` Lars Ingebrigtsen
2020-12-07 19:26                       ` Eli Zaretskii
2020-12-08 14:06                         ` Lars Ingebrigtsen
2020-12-08 15:50                           ` Eli Zaretskii
2020-12-08 15:56                             ` Stefan Monnier
2020-12-08 16:21                               ` Eli Zaretskii
2020-12-08 16:31                             ` Lars Ingebrigtsen
2020-12-08 16:53                               ` Eli Zaretskii
2020-12-08 17:29                                 ` Lars Ingebrigtsen
2020-12-08 17:36                                   ` Eli Zaretskii
2020-12-08 17:51                                     ` Lars Ingebrigtsen
2020-12-08 18:03                                       ` Eli Zaretskii
2020-12-08 18:39                                         ` Stefan Monnier
2020-12-08 19:12                                           ` Lars Ingebrigtsen
2020-12-08 19:36                                             ` Lars Ingebrigtsen
2020-12-08 20:21                                               ` Eli Zaretskii
2020-12-08 20:32                                                 ` Lars Ingebrigtsen
2020-12-08 20:35                                                   ` Lars Ingebrigtsen
2020-12-08 20:51                                                     ` Lars Ingebrigtsen
2020-12-08 21:10                                               ` Alfred M. Szmidt
2020-12-08 21:41                                                 ` Lars Ingebrigtsen
2020-12-08 22:31                                                   ` Alfred M. Szmidt
2020-12-08 21:33                                             ` Stefan Monnier
2020-12-08 22:46                                               ` Stefan Monnier
2020-12-08 22:58                                                 ` Lars Ingebrigtsen
2020-12-08 23:10                                                   ` Stefan Monnier
2020-12-08 23:43                                                     ` Lars Ingebrigtsen
2020-12-09 18:49                                                     ` Eli Zaretskii
2020-12-09 21:01                                                       ` Stefan Monnier
2020-12-10  3:36                                                         ` Eli Zaretskii
2020-12-10 16:21                                                           ` Stefan Monnier
2020-12-07 16:06         ` Óscar Fuentes
2020-12-07 16:15           ` Gregory Heytings via Emacs development discussions.
2020-12-07 16:16         ` Eli Zaretskii
2020-12-07 15:21 ` Jean Louis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87eek15gaf.fsf@gnus.org \
    --to=larsi@gnus.org \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=ghe@sdf.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).