kwo pushed a commit to branch master.

http://git.enlightenment.org/legacy/imlib2.git/commit/?id=5627edbb76f6eafd8914aed49129816256827967

commit 5627edbb76f6eafd8914aed49129816256827967
Author: Kim Woelders <[email protected]>
Date:   Sat Nov 20 21:09:08 2021 +0100

    Speedup in imlib_create_scaled_image_from_drawable()
    
    Avoid intermediate pixmap copy when scaling 1:1 with no offset.
---
 src/lib/x11_grab.c | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/lib/x11_grab.c b/src/lib/x11_grab.c
index e57179f..7893e8b 100644
--- a/src/lib/x11_grab.c
+++ b/src/lib/x11_grab.c
@@ -880,7 +880,6 @@ __imlib_GrabDrawableScaledToRGBA(DATA32 * data, int 
nu_x_dst, int nu_y_dst,
    Pixmap              psc, msc;
 
    h_tmp = h_dst > h_src ? h_dst : h_src;
-   psc = XCreatePixmap(d, p, w_dst, h_tmp, depth);
 
    gcv.foreground = 0;
    gcv.subwindow_mode = IncludeInferiors;
@@ -896,11 +895,21 @@ __imlib_GrabDrawableScaledToRGBA(DATA32 * data, int 
nu_x_dst, int nu_y_dst,
 
    if (w_dst == w_src && h_dst == h_src)
      {
-        XCopyArea(d, p, psc, gc, x_src, y_src, w_src, h_src, 0, 0);
+        if (x_src == 0 && y_src == 0)
+          {
+             psc = p;
+          }
+        else
+          {
+             psc = XCreatePixmap(d, p, w_src, h_tmp, depth);
+             XCopyArea(d, p, psc, gc, x_src, y_src, w_src, h_src, 0, 0);
+          }
         msc = m;
      }
    else
      {
+        psc = XCreatePixmap(d, p, w_dst, h_tmp, depth);
+
         if (*pdomask)
           {
              msc = XCreatePixmap(d, p, w_dst, h_tmp, 1);
@@ -953,7 +962,8 @@ __imlib_GrabDrawableScaledToRGBA(DATA32 * data, int 
nu_x_dst, int nu_y_dst,
    if (m != None && m != m_)
       XFreePixmap(d, m);
    XFreeGC(d, gc);
-   XFreePixmap(d, psc);
+   if (psc != p)
+      XFreePixmap(d, psc);
 
    return rc;
 }

-- 


Reply via email to