emacs-diffs
[Top][All Lists]
Advanced

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

master 4aa4a8f: Speed up animation of non-displayed images


From: Lars Ingebrigtsen
Subject: master 4aa4a8f: Speed up animation of non-displayed images
Date: Mon, 3 May 2021 05:45:31 -0400 (EDT)

branch: master
commit 4aa4a8f9525efa6453816aa588ad178b01df554d
Author: Lars Ingebrigtsen <larsi@gnus.org>
Commit: Lars Ingebrigtsen <larsi@gnus.org>

    Speed up animation of non-displayed images
    
    * lisp/image.el (image-animate): Only compute the animation data
    once -- this avoids recomputing the image on every iteration when
    the image is not displayed (bug#47895).
---
 lisp/image.el | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/lisp/image.el b/lisp/image.el
index 610d020..5e84536 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -839,6 +839,9 @@ number, play until that number of seconds has elapsed."
          (cancel-timer timer))
       (plist-put (cdr image) :animate-buffer (current-buffer))
       (plist-put (cdr image) :animate-tardiness 0)
+      ;; Stash the data about the animation here so that we don't
+      ;; trigger image recomputation unnecessarily later.
+      (plist-put (cdr image) :animate-multi-frame-data animation)
       (run-with-timer 0.2 nil #'image-animate-timeout
                      image (or index 0) (car animation)
                      0 limit (+ (float-time) 0.2)))))
@@ -869,7 +872,8 @@ Frames are indexed from 0.  Optional argument NOCHECK 
non-nil means
 do not check N is within the range of frames present in the image."
   (unless nocheck
     (if (< n 0) (setq n 0)
-      (setq n (min n (1- (car (image-multi-frame-p image)))))))
+      (setq n (min n (1- (car (plist-get (cdr image)
+                                         :animate-multi-frame-data)))))))
   (plist-put (cdr image) :index n)
   (force-window-update))
 
@@ -917,11 +921,11 @@ for the animation speed.  A negative value means to 
animate in reverse."
     (image-show-frame image n t)
     (let* ((speed (image-animate-get-speed image))
           (time (current-time))
-          (animation (image-multi-frame-p image))
           (time-to-load-image (time-since time))
-          (stated-delay-time (/ (or (cdr animation)
-                                    image-default-frame-delay)
-                                (float (abs speed))))
+          (stated-delay-time
+            (/ (or (cdr (plist-get (cdr image) :animate-multi-frame-data))
+                  image-default-frame-delay)
+              (float (abs speed))))
           ;; Subtract off the time we took to load the image from the
           ;; stated delay time.
           (delay (max (float-time (time-subtract stated-delay-time



reply via email to

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