[gegl] buffer: trim cache when changing cache size
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: trim cache when changing cache size
- Date: Fri, 25 May 2018 12:10:44 +0000 (UTC)
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]