mirror of https://github.com/GNOME/gimp.git
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:
parent
c448cc7d25
commit
b2b1cb135b
|
@ -66,6 +66,8 @@ libapp_sources = \
|
||||||
units.h \
|
units.h \
|
||||||
version.c \
|
version.c \
|
||||||
version.h \
|
version.h \
|
||||||
|
gimp-debug.c \
|
||||||
|
gimp-debug.h \
|
||||||
gimp-log.c \
|
gimp-log.c \
|
||||||
gimp-log.h \
|
gimp-log.h \
|
||||||
gimp-intl.h
|
gimp-intl.h
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
#include "batch.h"
|
#include "batch.h"
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "units.h"
|
#include "units.h"
|
||||||
|
#include "gimp-debug.h"
|
||||||
|
|
||||||
#include "gimp-intl.h"
|
#include "gimp-intl.h"
|
||||||
|
|
||||||
|
@ -255,9 +256,7 @@ app_run (const gchar *full_prog_name,
|
||||||
|
|
||||||
g_object_unref (gimp);
|
g_object_unref (gimp);
|
||||||
|
|
||||||
#ifdef DEBUG_INSTANCES
|
gimp_debug_instances ();
|
||||||
gimp_object_debug_instances ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
errors_exit ();
|
errors_exit ();
|
||||||
gegl_exit ();
|
gegl_exit ();
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include "gimpmarshal.h"
|
#include "gimpmarshal.h"
|
||||||
#include "gimpobject.h"
|
#include "gimpobject.h"
|
||||||
|
|
||||||
|
#include "gimp-debug.h"
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
|
@ -75,10 +77,6 @@ static GObjectClass *parent_class = NULL;
|
||||||
|
|
||||||
static guint object_signals[LAST_SIGNAL] = { 0 };
|
static guint object_signals[LAST_SIGNAL] = { 0 };
|
||||||
|
|
||||||
#ifdef DEBUG_INSTANCES
|
|
||||||
static GHashTable *class_hash = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
GType
|
GType
|
||||||
gimp_object_get_type (void)
|
gimp_object_get_type (void)
|
||||||
|
@ -150,13 +148,6 @@ gimp_object_class_init (GimpObjectClass *klass)
|
||||||
G_PARAM_CONSTRUCT));
|
G_PARAM_CONSTRUCT));
|
||||||
g_type_class_add_private (klass,
|
g_type_class_add_private (klass,
|
||||||
sizeof (GimpObjectPrivate));
|
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
|
static void
|
||||||
|
@ -169,25 +160,7 @@ gimp_object_init (GimpObject *object,
|
||||||
object->p->name = NULL;
|
object->p->name = NULL;
|
||||||
object->p->normalized = NULL;
|
object->p->normalized = NULL;
|
||||||
|
|
||||||
#ifdef DEBUG_INSTANCES
|
gimp_debug_add_instance (G_OBJECT (object), G_OBJECT_CLASS (klass));
|
||||||
{
|
|
||||||
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 */
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -210,24 +183,7 @@ gimp_object_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
gimp_object_name_free (GIMP_OBJECT (object));
|
gimp_object_name_free (GIMP_OBJECT (object));
|
||||||
|
|
||||||
#ifdef DEBUG_INSTANCES
|
gimp_debug_remove_instance (object);
|
||||||
{
|
|
||||||
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 */
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (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);
|
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 */
|
|
||||||
|
|
|
@ -70,11 +70,5 @@ gint gimp_object_name_collate (GimpObject *object1,
|
||||||
gint64 gimp_object_get_memsize (GimpObject *object,
|
gint64 gimp_object_get_memsize (GimpObject *object,
|
||||||
gint64 *gui_size);
|
gint64 *gui_size);
|
||||||
|
|
||||||
/* #define DEBUG_INSTANCES 1 */
|
|
||||||
|
|
||||||
#ifdef DEBUG_INSTANCES
|
|
||||||
void gimp_object_debug_instances (void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __GIMP_OBJECT_H__ */
|
#endif /* __GIMP_OBJECT_H__ */
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
|
|
||||||
#include "glib-object.h"
|
#include "glib-object.h"
|
||||||
|
|
||||||
|
#include "gimp-debug.h"
|
||||||
#include "gimp-log.h"
|
#include "gimp-log.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -52,7 +53,8 @@ gimp_log_init (void)
|
||||||
{ "shm", GIMP_LOG_SHM },
|
{ "shm", GIMP_LOG_SHM },
|
||||||
{ "text-editing", GIMP_LOG_TEXT_EDITING },
|
{ "text-editing", GIMP_LOG_TEXT_EDITING },
|
||||||
{ "key-events", GIMP_LOG_KEY_EVENTS },
|
{ "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',
|
/* 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,
|
gimp_log_flags = g_parse_debug_string (env_log_val,
|
||||||
log_keys,
|
log_keys,
|
||||||
G_N_ELEMENTS (log_keys));
|
G_N_ELEMENTS (log_keys));
|
||||||
|
|
||||||
|
if (gimp_log_flags & GIMP_LOG_INSTANCES)
|
||||||
|
gimp_debug_enable_instances ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,8 @@ typedef enum
|
||||||
GIMP_LOG_SHM = 1 << 12,
|
GIMP_LOG_SHM = 1 << 12,
|
||||||
GIMP_LOG_TEXT_EDITING = 1 << 13,
|
GIMP_LOG_TEXT_EDITING = 1 << 13,
|
||||||
GIMP_LOG_KEY_EVENTS = 1 << 14,
|
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;
|
} GimpLogFlags;
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,6 +94,7 @@ void gimp_logv (const gchar *function,
|
||||||
#define TEXT_EDITING GIMP_LOG_TEXT_EDITING
|
#define TEXT_EDITING GIMP_LOG_TEXT_EDITING
|
||||||
#define KEY_EVENTS GIMP_LOG_KEY_EVENTS
|
#define KEY_EVENTS GIMP_LOG_KEY_EVENTS
|
||||||
#define AUTO_TAB_STYLE GIMP_LOG_AUTO_TAB_STYLE
|
#define AUTO_TAB_STYLE GIMP_LOG_AUTO_TAB_STYLE
|
||||||
|
#define INSTANCES GIMP_LOG_INSTANCES
|
||||||
|
|
||||||
#if 0 /* last resort */
|
#if 0 /* last resort */
|
||||||
# define GIMP_LOG /* nothing => no varargs, no log */
|
# define GIMP_LOG /* nothing => no varargs, no log */
|
||||||
|
|
Loading…
Reference in New Issue