From b2b1cb135b27d1bd77a3c224d209a8dc851a17f0 Mon Sep 17 00:00:00 2001 From: Michael Natterer Date: Thu, 24 Jun 2010 19:11:56 +0200 Subject: [PATCH] app: move the instance debug facility to the new file app/gimp-debug.c Build it unconditionally but enable it via GIMP_DEBUG=instances --- app/Makefile.am | 2 ++ app/app.c | 5 ++- app/core/gimpobject.c | 81 +++---------------------------------------- app/core/gimpobject.h | 6 ---- app/gimp-log.c | 7 +++- app/gimp-log.h | 4 ++- 6 files changed, 17 insertions(+), 88 deletions(-) diff --git a/app/Makefile.am b/app/Makefile.am index 75bc67fa93..c387d58e24 100644 --- a/app/Makefile.am +++ b/app/Makefile.am @@ -66,6 +66,8 @@ libapp_sources = \ units.h \ version.c \ version.h \ + gimp-debug.c \ + gimp-debug.h \ gimp-log.c \ gimp-log.h \ gimp-intl.h diff --git a/app/app.c b/app/app.c index 3c4334e433..5db4879dbd 100644 --- a/app/app.c +++ b/app/app.c @@ -59,6 +59,7 @@ #include "batch.h" #include "errors.h" #include "units.h" +#include "gimp-debug.h" #include "gimp-intl.h" @@ -255,9 +256,7 @@ app_run (const gchar *full_prog_name, g_object_unref (gimp); -#ifdef DEBUG_INSTANCES - gimp_object_debug_instances (); -#endif + gimp_debug_instances (); errors_exit (); gegl_exit (); diff --git a/app/core/gimpobject.c b/app/core/gimpobject.c index 9bff063777..253bf93b01 100644 --- a/app/core/gimpobject.c +++ b/app/core/gimpobject.c @@ -29,6 +29,8 @@ #include "gimpmarshal.h" #include "gimpobject.h" +#include "gimp-debug.h" + enum { @@ -75,10 +77,6 @@ static GObjectClass *parent_class = NULL; static guint object_signals[LAST_SIGNAL] = { 0 }; -#ifdef DEBUG_INSTANCES -static GHashTable *class_hash = NULL; -#endif - GType gimp_object_get_type (void) @@ -150,13 +148,6 @@ gimp_object_class_init (GimpObjectClass *klass) G_PARAM_CONSTRUCT)); g_type_class_add_private (klass, sizeof (GimpObjectPrivate)); - -#ifdef DEBUG_INSTANCES - class_hash = g_hash_table_new_full (g_str_hash, - g_str_equal, - NULL, - (GDestroyNotify )g_hash_table_unref); -#endif } static void @@ -169,25 +160,7 @@ gimp_object_init (GimpObject *object, object->p->name = NULL; object->p->normalized = NULL; -#ifdef DEBUG_INSTANCES - { - GHashTable *instance_hash; - const gchar *type_name; - - type_name = g_type_name (G_TYPE_FROM_CLASS (klass)); - - instance_hash = g_hash_table_lookup (class_hash, type_name); - - if (! instance_hash) - { - instance_hash = g_hash_table_new (g_direct_hash, - g_direct_equal); - g_hash_table_insert (class_hash, (gchar *) type_name, instance_hash); - } - - g_hash_table_insert (instance_hash, object, object); - } -#endif /* DEBUG_INSTANCES */ + gimp_debug_add_instance (G_OBJECT (object), G_OBJECT_CLASS (klass)); } static void @@ -210,24 +183,7 @@ gimp_object_finalize (GObject *object) { gimp_object_name_free (GIMP_OBJECT (object)); -#ifdef DEBUG_INSTANCES - { - GHashTable *instance_hash; - const gchar *type_name; - - type_name = g_type_name (G_OBJECT_TYPE (object)); - - instance_hash = g_hash_table_lookup (class_hash, type_name); - - if (instance_hash) - { - g_hash_table_remove (instance_hash, object); - - if (g_hash_table_size (instance_hash) == 0) - g_hash_table_remove (class_hash, type_name); - } - } -#endif /* DEBUG_INSTANCES */ + gimp_debug_remove_instance (object); G_OBJECT_CLASS (parent_class)->finalize (object); } @@ -568,32 +524,3 @@ gimp_object_real_get_memsize (GimpObject *object, return memsize + gimp_g_object_get_memsize ((GObject *) object); } - -#ifdef DEBUG_INSTANCES -static void -gimp_object_debug_instance_foreach (GimpObject *object) -{ - g_printerr (" \'%s\': ref_count = %d\n", - gimp_object_get_name (object), G_OBJECT (object)->ref_count); -} - -static void -gimp_object_debug_class_foreach (const gchar *type_name, - GHashTable *instance_hash) -{ - g_printerr ("Leaked %s instances: %d\n", - type_name, g_hash_table_size (instance_hash)); - - g_hash_table_foreach (instance_hash, - (GHFunc) gimp_object_debug_instance_foreach, - NULL); -} - -void -gimp_object_debug_instances (void) -{ - g_hash_table_foreach (class_hash, - (GHFunc) gimp_object_debug_class_foreach, - NULL); -} -#endif /* DEBUG_INSTANCES */ diff --git a/app/core/gimpobject.h b/app/core/gimpobject.h index 2b0ece7476..40960a62ee 100644 --- a/app/core/gimpobject.h +++ b/app/core/gimpobject.h @@ -70,11 +70,5 @@ gint gimp_object_name_collate (GimpObject *object1, gint64 gimp_object_get_memsize (GimpObject *object, gint64 *gui_size); -/* #define DEBUG_INSTANCES 1 */ - -#ifdef DEBUG_INSTANCES -void gimp_object_debug_instances (void); -#endif - #endif /* __GIMP_OBJECT_H__ */ diff --git a/app/gimp-log.c b/app/gimp-log.c index 3b0eb7a3be..24c59a52b2 100644 --- a/app/gimp-log.c +++ b/app/gimp-log.c @@ -19,6 +19,7 @@ #include "glib-object.h" +#include "gimp-debug.h" #include "gimp-log.h" @@ -52,7 +53,8 @@ gimp_log_init (void) { "shm", GIMP_LOG_SHM }, { "text-editing", GIMP_LOG_TEXT_EDITING }, { "key-events", GIMP_LOG_KEY_EVENTS }, - { "auto-tab-style", GIMP_LOG_AUTO_TAB_STYLE } + { "auto-tab-style", GIMP_LOG_AUTO_TAB_STYLE }, + { "instances", GIMP_LOG_INSTANCES } }; /* g_parse_debug_string() has special treatment of the string 'help', @@ -64,6 +66,9 @@ gimp_log_init (void) gimp_log_flags = g_parse_debug_string (env_log_val, log_keys, G_N_ELEMENTS (log_keys)); + + if (gimp_log_flags & GIMP_LOG_INSTANCES) + gimp_debug_enable_instances (); } } diff --git a/app/gimp-log.h b/app/gimp-log.h index 8aa7444d27..49c667cffd 100644 --- a/app/gimp-log.h +++ b/app/gimp-log.h @@ -36,7 +36,8 @@ typedef enum GIMP_LOG_SHM = 1 << 12, GIMP_LOG_TEXT_EDITING = 1 << 13, GIMP_LOG_KEY_EVENTS = 1 << 14, - GIMP_LOG_AUTO_TAB_STYLE = 1 << 15 + GIMP_LOG_AUTO_TAB_STYLE = 1 << 15, + GIMP_LOG_INSTANCES = 1 << 16 } GimpLogFlags; @@ -93,6 +94,7 @@ void gimp_logv (const gchar *function, #define TEXT_EDITING GIMP_LOG_TEXT_EDITING #define KEY_EVENTS GIMP_LOG_KEY_EVENTS #define AUTO_TAB_STYLE GIMP_LOG_AUTO_TAB_STYLE +#define INSTANCES GIMP_LOG_INSTANCES #if 0 /* last resort */ # define GIMP_LOG /* nothing => no varargs, no log */