[Xfce4-commits] <xfwm4:xfce-4.10> Some small optimizations in placement code.

Nick Schermer noreply at xfce.org
Sun May 5 18:00:03 CEST 2013


Updating branch refs/heads/xfce-4.10
         to 84d9d0b9b846bc98e6ebea543fd8ebb2f67a38a1 (commit)
       from 80b43808cf854d1713e0c00d1760c08e1e09c4c8 (commit)

commit 84d9d0b9b846bc98e6ebea543fd8ebb2f67a38a1
Author: Nick Schermer <nick at xfce.org>
Date:   Fri Nov 30 22:50:59 2012 +0100

    Some small optimizations in placement code.
    
    Callgrind showed that the frameX/Y functions were called
    a lot, so save the result inside the loop to do less calls.
    
    Also inline the overlap functions, both are just simple calculations
    so help the compiler a bit.
    
    (cherry picked from commit e207a6bb16b5396544fa57e0b5cb5e621e8eaefb)

 src/placement.c |   17 +++++++++++------
 1 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/placement.c b/src/placement.c
index f926de3..01f2590 100644
--- a/src/placement.c
+++ b/src/placement.c
@@ -38,9 +38,10 @@
 #include "frame.h"
 #include "netwm.h"
 
+
 /* Compute rectangle overlap area */
 
-static unsigned long
+static inline unsigned long
 segment_overlap (int x0, int x1, int tx0, int tx1)
 {
     if (tx0 > x0)
@@ -58,7 +59,7 @@ segment_overlap (int x0, int x1, int tx0, int tx1)
     return (x1 - x0);
 }
 
-static unsigned long
+static inline unsigned long
 overlap (int x0, int y0, int x1, int y1, int tx0, int ty0, int tx1, int ty1)
 {
     /* Compute overlapping box */
@@ -541,6 +542,7 @@ smartPlacement (Client * c, int full_x, int full_y, int full_w, int full_h)
     gint test_x, test_y, xmax, ymax, best_x, best_y;
     gint frame_height, frame_width, frame_left, frame_top;
     gboolean first;
+    gint c2_x, c2_y;
 
     g_return_if_fail (c != NULL);
     TRACE ("entering smartPlacement");
@@ -574,14 +576,17 @@ smartPlacement (Client * c, int full_x, int full_y, int full_w, int full_h)
                     && (c->win_workspace == c2->win_workspace)
                     && FLAG_TEST (c2->xfwm_flags, XFWM_FLAG_VISIBLE))
                 {
+                    c2_x = frameX (c2);
+                    c2_y = frameY (c2);
+
                     count_overlaps += overlap (test_x - frame_left,
                                                test_y - frame_top,
                                                test_x - frame_left + frame_width,
                                                test_y - frame_top + frame_height,
-                                               frameX (c2),
-                                               frameY (c2),
-                                               frameX (c2) + frameWidth (c2),
-                                               frameY (c2) + frameHeight (c2));
+                                               c2_x,
+                                               c2_y,
+                                               c2_x + frameWidth (c2),
+                                               c2_y + frameHeight (c2));
                 }
             }
             if (count_overlaps < 0.1)


More information about the Xfce4-commits mailing list