[PATCH 3/3] optimize end of row check for images

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

 



Doing profiles reveals that the check for "is this pixel at end of row?"

  if ((cur_pix + 1 - lines) % width == 0)

leads to 2 divisions, one to compute (cur_pix + 1 - lines) (divided by
sizeof(*cur_pix) which could be 3) and one for (x % width).
Although the substituted code looks more long is faster as it does not
involve divisions.

Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx>
---
 server/red_bitmap_utils.h | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/server/red_bitmap_utils.h b/server/red_bitmap_utils.h
index bf82e79..1849588 100644
--- a/server/red_bitmap_utils.h
+++ b/server/red_bitmap_utils.h
@@ -117,7 +117,8 @@ static void FNAME(compute_lines_gradual_score)(PIXEL *lines, int width, int num_
                                                double *o_samples_sum_score, int *o_num_samples)
 {
     int jump = (SAMPLE_JUMP % width) ? SAMPLE_JUMP : SAMPLE_JUMP - 1;
-    PIXEL *cur_pix = lines + width / 2;
+    int cur_x = width / 2;
+    PIXEL *cur_pix = lines + cur_x;
     PIXEL *bottom_pix;
     PIXEL *last_line = lines + (num_lines - 1) * width;
     int num_samples;
@@ -133,13 +134,17 @@ static void FNAME(compute_lines_gradual_score)(PIXEL *lines, int width, int num_
     num_samples = 0;
 
     while (cur_pix < last_line) {
-        if ((cur_pix + 1 - lines) % width == 0) { // last pixel in the row
+        if (cur_x + 1 == width) { // last pixel in the row
             cur_pix--; // jump is bigger than 1 so we will not enter endless loop
+            cur_x--;
         }
         bottom_pix = cur_pix + width;
         samples_sum_score += FNAME(pixels_square_score)(cur_pix, bottom_pix);
         num_samples++;
         cur_pix += jump;
+        cur_x += jump;
+        while (cur_x >= width)
+            cur_x -= width;
     }
 
     (*o_samples_sum_score) = samples_sum_score;
-- 
2.4.3

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]