app: move the instance debug facility to the new file app/gimp-debug.c

Build it unconditionally but enable it via GIMP_DEBUG=instances
This commit is contained in:
Michael Natterer 2010-06-24 19:11:56 +02:00
parent c448cc7d25
commit b2b1cb135b
6 changed files with 17 additions and 88 deletions

View File

@ -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

View File

@ -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 ();

View File

@ -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 */

View File

@ -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__ */

View File

@ -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 ();
}
}

View File

@ -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 */