[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 9ec81c5: Add an animation sanity check
From: |
Lars Ingebrigtsen |
Subject: |
[Emacs-diffs] master 9ec81c5: Add an animation sanity check |
Date: |
Tue, 03 May 2016 23:50:52 +0000 |
branch: master
commit 9ec81c5a6e12d9fec56767307d6072546b5a4dc2
Author: Lars Ingebrigtsen <address@hidden>
Commit: Lars Ingebrigtsen <address@hidden>
Add an animation sanity check
* lisp/image.el (image-multi-frame-p): Give up on animations
if it seems like they are too slow (bug#23431).
---
lisp/image.el | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/lisp/image.el b/lisp/image.el
index 2ae642a..57cfc4e 100644
--- a/lisp/image.el
+++ b/lisp/image.el
@@ -731,7 +731,7 @@ number, play until that number of seconds has elapsed."
(plist-put (cdr image) :animate-buffer (current-buffer))
(run-with-timer 0.2 nil 'image-animate-timeout
image (or index 0) (car animation)
- 0 limit))))
+ 0 limit (+ (float-time) 0.2)))))
(defun image-animate-timer (image)
"Return the animation timer for image IMAGE."
@@ -780,7 +780,7 @@ multiplication factor for the current value."
;; hence we need to call image-multi-frame-p to return it.
;; But it also returns count, so why do we bother passing that as an
;; argument?
-(defun image-animate-timeout (image n count time-elapsed limit)
+(defun image-animate-timeout (image n count time-elapsed limit target-time)
"Display animation frame N of IMAGE.
N=0 refers to the initial animation frame.
COUNT is the total number of frames in the animation.
@@ -793,7 +793,11 @@ The minimum delay between successive frames is
`image-minimum-frame-delay'.
If the image has a non-nil :speed property, it acts as a multiplier
for the animation speed. A negative value means to animate in reverse."
- (when (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ (when (and (buffer-live-p (plist-get (cdr image) :animate-buffer))
+ ;; Delayed more than two seconds more than expected.
+ (when (> (- (float-time) target-time) 2)
+ (message "Stopping animation; animation possibly too big")
+ nil))
(image-show-frame image n t)
(let* ((speed (image-animate-get-speed image))
(time (float-time))
@@ -817,7 +821,8 @@ for the animation speed. A negative value means to animate
in reverse."
(setq done (>= time-elapsed limit)))
(unless done
(run-with-timer delay nil 'image-animate-timeout
- image n count time-elapsed limit)))))
+ image n count time-elapsed limit
+ (+ (float-time) delay))))))
(defvar imagemagick-types-inhibit)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master 9ec81c5: Add an animation sanity check,
Lars Ingebrigtsen <=