[gegl] buffer: trim cache when changing cache size



commit 60fdc06ec81a46c4a0df311ddab1a8881d5e2ddc
Author: Ell <ell_se yahoo com>
Date:   Thu May 24 10:45:32 2018 -0400

    buffer: trim cache when changing cache size
    
    When the GeglConfig::tile-cache-size property is changed, trim the
    tile cache, so that any excess data is moved to the swap.

 gegl/buffer/gegl-tile-handler-cache.c | 15 ++++++++++++++-
 gegl/gegl-init.c                      |  2 +-
 2 files changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-handler-cache.c b/gegl/buffer/gegl-tile-handler-cache.c
index e7cdff94b..cde985d67 100644
--- a/gegl/buffer/gegl-tile-handler-cache.c
+++ b/gegl/buffer/gegl-tile-handler-cache.c
@@ -114,7 +114,6 @@ gegl_tile_handler_cache_init (GeglTileHandlerCache *cache)
   ((GeglTileSource*)cache)->command = gegl_tile_handler_cache_command;
   cache->items = g_hash_table_new (gegl_tile_handler_cache_hashfunc, gegl_tile_handler_cache_equalfunc);
   g_queue_init (&cache->queue);
-  gegl_tile_cache_init ();
 
   gegl_tile_handler_cache_connect (cache);
 }
@@ -842,14 +841,28 @@ gegl_tile_handler_cache_equalfunc (gconstpointer a,
   return FALSE;
 }
 
+static void
+gegl_config_tile_cache_size_notify (GObject    *gobject,
+                                    GParamSpec *pspec,
+                                    gpointer    user_data)
+{
+  gegl_tile_handler_cache_trim (NULL);
+}
+
 void
 gegl_tile_cache_init (void)
 {
+  g_signal_connect (gegl_config (), "notify::tile-cache-size",
+                    G_CALLBACK (gegl_config_tile_cache_size_notify), NULL);
 }
 
 void
 gegl_tile_cache_destroy (void)
 {
+  g_signal_handlers_disconnect_by_func (gegl_config(),
+                                        gegl_config_tile_cache_size_notify,
+                                        NULL);
+
   g_warn_if_fail (g_queue_is_empty (&cache_queue));
   g_queue_clear (&cache_queue);
 }
diff --git a/gegl/gegl-init.c b/gegl/gegl-init.c
index b85d3f72f..465007be9 100644
--- a/gegl/gegl-init.c
+++ b/gegl/gegl-init.c
@@ -523,7 +523,6 @@ gegl_exit (void)
                     "variable GEGL_DEBUG to \"buffer-alloc\"\n");
 #endif
     }
-  gegl_tile_cache_destroy ();
 
   if (gegl_swap_dir ())
     {
@@ -704,6 +703,7 @@ gegl_post_parse_hook (GOptionContext *context,
   GEGL_INSTRUMENT_START();
 
   gegl_operation_gtype_init ();
+  gegl_tile_cache_init ();
 
   if (!module_db)
     {


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