[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Image transforms as a benchmark?
From: |
Arthur Miller |
Subject: |
Image transforms as a benchmark? |
Date: |
Sun, 12 Sep 2021 13:45:39 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
I tried to make another little benchmark, I saw with optimization flags, that
quite some loops have got unrolled and vectorized in image.c, so I wanted to see
if it matters when doing some transforms on images. I tested so far just with
svg.
I wonder if image-rotate is handled completely by external libraries? I see
no effect on performance, regardless of how many time I rotate some image. Is it
same situation for scaling down? I see big difference when scaling up images so
I guess that is handled by Emacs own code?
#+begin_src emacs-lisp
(require 'svg)
(defun svg-position (image)
"Return buffer position of the svg image."
(let ((marker (cdr (assoc :image (car-safe (cdr image))))))
(when (markerp marker)
(marker-position marker))))
(defun svg-image-rotate (svg &optional angle)
(let ((image (image--get-image (svg-position svg))))
(setf (image-property image :rotation)
(float (mod (+ (or (image-property image :rotation) 0)
(or angle 90))
360)))))
(defun svg-increase-size ()
(with-temp-buffer
(let ((svg (svg-create 10 10))
(max-image-size t))
(svg-rectangle svg 0 0 10 10)
(svg-insert-image svg)
(dotimes (_ 40)
;; use internal image--change-size
;; to bypass the optimization with idle-timer.
(image--change-size
(1+ (/ (prefix-numeric-value 2) 10.0))
(svg-position svg))))))
(defun svg-decrease-size ()
(with-temp-buffer
(let ((svg (svg-create 10 10)))
(svg-rectangle svg 0 0 10 10)
(svg-insert-image svg)
(dotimes (_ 20)
(image--change-size
(- 1 (/ (prefix-numeric-value 0.1) 10.0))
(svg-position svg))))))
#+end_src