[gegl/threaded-base-classes: 4/22] buffer: use a 2d instead of 1d mapping for tile locks



commit 3375324c936cc7a1433d424e1b0b5c3bca4ff548
Author: Øyvind Kolås <pippin gimp org>
Date:   Fri Jun 27 07:53:30 2014 +0200

    buffer: use a 2d instead of 1d mapping for tile locks

 gegl/buffer/gegl-buffer-access.c   |    4 ++--
 gegl/buffer/gegl-buffer-iterator.c |    4 ++--
 2 files changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/gegl/buffer/gegl-buffer-access.c b/gegl/buffer/gegl-buffer-access.c
index 9a88b49..aa0367a 100644
--- a/gegl/buffer/gegl-buffer-access.c
+++ b/gegl/buffer/gegl-buffer-access.c
@@ -393,10 +393,10 @@ gegl_buffer_iterate_write (GeglBuffer          *buffer,
           index_x = gegl_tile_indice (tiledx, tile_width);
           index_y = gegl_tile_indice (tiledy, tile_height);
 
-          g_mutex_lock (&mutexes[ABS (index_x) % 256]);
+          g_mutex_lock (&mutexes[(index_x&15) * 16 + (index_y&15)]);
           tile = gegl_tile_source_get_tile ((GeglTileSource *) (buffer),
                                             index_x, index_y, level);
-          g_mutex_unlock (&mutexes[ABS (index_x) % 256]);
+          g_mutex_unlock (&mutexes[(index_x&15) * 16 + (index_y&15)]);
 
           lskip = (buffer_abyss_x) - (buffer_x + bufx);
           /* gap between left side of tile, and abyss */
diff --git a/gegl/buffer/gegl-buffer-iterator.c b/gegl/buffer/gegl-buffer-iterator.c
index 9a90e5c..e0a8360 100644
--- a/gegl/buffer/gegl-buffer-iterator.c
+++ b/gegl/buffer/gegl-buffer-iterator.c
@@ -314,10 +314,10 @@ get_tile (GeglBufferIterator *iter,
       int tile_x = gegl_tile_indice (iter->roi[index].x + shift_x, tile_width);
       int tile_y = gegl_tile_indice (iter->roi[index].y + shift_y, tile_height);
 
-      g_mutex_lock (&mutexes[ABS (tile_x) % 256]);
+      g_mutex_lock (&mutexes[(ABS(tile_x) % 16) * 16 + (ABS(tile_y)%16)]);
       sub->current_tile = gegl_tile_source_get_tile ((GeglTileSource *)(buf),
                                                      tile_x, tile_y, 0);
-      g_mutex_unlock (&mutexes[ABS (tile_x) % 256]);
+      g_mutex_unlock (&mutexes[(ABS(tile_x) % 16) * 16 + (ABS(tile_y)%16)]);
 
       if (sub->flags & GEGL_BUFFER_WRITE)
         gegl_tile_lock (sub->current_tile);


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