[gegl] GeglTileHandlerEmpty: Lazy allocation of 1st tile



commit e6337513c07ae8096b62f84354e3b1c47567b6a9
Author: Daniel Sabo <DanielSabo gmail com>
Date:   Thu Mar 14 19:17:50 2013 -0700

    GeglTileHandlerEmpty: Lazy allocation of 1st tile
    
    This is necessary to avoiding allocating a giant empty tile
    underneath gegl_buffer_linear_new_from_data's buffer.

 gegl/buffer/gegl-tile-handler-empty.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-handler-empty.c b/gegl/buffer/gegl-tile-handler-empty.c
index c4b40fe..c5d2614 100644
--- a/gegl/buffer/gegl-tile-handler-empty.c
+++ b/gegl/buffer/gegl-tile-handler-empty.c
@@ -58,6 +58,13 @@ get_tile (GeglTileSource *gegl_tile_source,
   if (tile)
     return tile;
 
+  if (G_UNLIKELY(!empty->tile))
+    {
+      gint tile_size = gegl_tile_backend_get_tile_size (empty->backend);
+      empty->tile    = gegl_tile_new (tile_size);
+      memset (gegl_tile_get_data (empty->tile), 0x00, tile_size);
+    }
+
   return gegl_tile_handler_dup_tile (GEGL_TILE_HANDLER (empty),
                                      empty->tile, x, y, z);
 }
@@ -94,11 +101,9 @@ GeglTileHandler *
 gegl_tile_handler_empty_new (GeglTileBackend *backend)
 {
   GeglTileHandlerEmpty *empty = g_object_new (GEGL_TYPE_TILE_HANDLER_EMPTY, NULL);
-  gint tile_size = gegl_tile_backend_get_tile_size (backend);
 
   empty->backend = backend;
-  empty->tile    = gegl_tile_new (tile_size);
-  memset (gegl_tile_get_data (empty->tile), 0x00, tile_size);
+  empty->tile    = NULL;
 
   return (void*)empty;
 }


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