added gimp_g_type_instance_get_memsize() and

2006-04-15  Michael Natterer  <mitch@gimp.org>

	* app/core/gimp-utils.[ch]: added
	gimp_g_type_instance_get_memsize() and
	gimp_g_param_spec_get_memsize().
	Changed gimp_g_object_get_memsize() to use
	gimp_g_type_instance_get_memsize().
	Handle more boxed types in gimp_g_value_get_memsize().

	* app/core/gimp.c (gimp_get_memsize): add the memsize of some
	members that are new or were forgotten.

	* app/pdb/gimpprocedure.c
	* app/pdb/gimppluginprocedure.c: implement GimpObject::get_memsize().
This commit is contained in:
Michael Natterer 2006-04-15 15:15:33 +00:00 committed by Michael Natterer
parent 3fb71be183
commit 0855c2e12b
7 changed files with 378 additions and 83 deletions

View File

@ -1,3 +1,18 @@
2006-04-15 Michael Natterer <mitch@gimp.org>
* app/core/gimp-utils.[ch]: added
gimp_g_type_instance_get_memsize() and
gimp_g_param_spec_get_memsize().
Changed gimp_g_object_get_memsize() to use
gimp_g_type_instance_get_memsize().
Handle more boxed types in gimp_g_value_get_memsize().
* app/core/gimp.c (gimp_get_memsize): add the memsize of some
members that are new or were forgotten.
* app/pdb/gimpprocedure.c
* app/pdb/gimppluginprocedure.c: implement GimpObject::get_memsize().
2006-04-14 Manish Singh <yosh@gimp.org>
* app/plug-in/plug-in.h: Some compilers don't handle "'" in #error

View File

@ -50,6 +50,7 @@
#include "gimp.h"
#include "gimp-utils.h"
#include "gimpparamspecs.h"
gboolean
@ -83,20 +84,30 @@ gimp_rectangle_intersect (gint x1,
}
gint64
gimp_g_object_get_memsize (GObject *object)
gimp_g_type_instance_get_memsize (GTypeInstance *instance)
{
GTypeQuery type_query;
gint64 memsize = 0;
g_return_val_if_fail (G_IS_OBJECT (object), 0);
g_return_val_if_fail (instance != NULL, 0);
g_type_query (G_TYPE_FROM_INSTANCE (object), &type_query);
g_type_query (G_TYPE_FROM_INSTANCE (instance), &type_query);
memsize += type_query.instance_size;
return memsize;
}
gint64
gimp_g_object_get_memsize (GObject *object)
{
gint64 memsize = 0;
g_return_val_if_fail (G_IS_OBJECT (object), 0);
return memsize + gimp_g_type_instance_get_memsize ((GTypeInstance *) object);
}
gint64
gimp_g_hash_table_get_memsize (GHashTable *hash)
{
@ -124,7 +135,7 @@ gimp_g_list_get_memsize (GList *list,
gint64
gimp_g_value_get_memsize (GValue *value)
{
gint64 memsize = sizeof (GValue);
gint64 memsize = sizeof (GValue);
if (G_VALUE_HOLDS_STRING (value))
{
@ -143,6 +154,46 @@ gimp_g_value_get_memsize (GValue *value)
{
memsize += sizeof (GimpMatrix2);
}
else if (GIMP_VALUE_HOLDS_PARASITE (value))
{
GimpParasite *parasite = g_value_get_boxed (value);
if (parasite)
memsize += (sizeof (GimpParasite) + parasite->size +
parasite->name ? (strlen (parasite->name) + 1) : 0);
}
else if (GIMP_VALUE_HOLDS_ARRAY (value) ||
GIMP_VALUE_HOLDS_INT8_ARRAY (value) ||
GIMP_VALUE_HOLDS_INT16_ARRAY (value) ||
GIMP_VALUE_HOLDS_INT32_ARRAY (value) ||
GIMP_VALUE_HOLDS_FLOAT_ARRAY (value))
{
GimpArray *array = g_value_get_boxed (value);
if (array)
memsize += (sizeof (GimpArray) +
array->static_data ? 0 : array->length);
}
else if (GIMP_VALUE_HOLDS_STRING_ARRAY (value))
{
GimpArray *array = g_value_get_boxed (value);
if (array)
{
memsize += sizeof (GimpArray);
if (! array->static_data)
{
gchar **tmp = (gchar **) array->data;
gint i;
memsize += array->length * sizeof (gchar *);
for (i = 0; i < array->length; i++)
memsize += strlen (tmp[i]) + 1;
}
}
}
else
{
g_printerr ("%s: unhandled boxed value type: %s\n",
@ -158,6 +209,37 @@ gimp_g_value_get_memsize (GValue *value)
return memsize;
}
gint64
gimp_g_param_spec_get_memsize (GParamSpec *pspec)
{
const gchar *str;
gint64 memsize = 0;
if (! (pspec->flags & G_PARAM_STATIC_NAME))
{
str = g_param_spec_get_name (pspec);
if (str)
memsize += strlen (str) + 1;
}
if (! (pspec->flags & G_PARAM_STATIC_NICK))
{
str = g_param_spec_get_nick (pspec);
if (str)
memsize += strlen (str) + 1;
}
if (! (pspec->flags & G_PARAM_STATIC_BLURB))
{
str = g_param_spec_get_blurb (pspec);
if (str)
memsize += strlen (str) + 1;
}
return memsize + gimp_g_type_instance_get_memsize ((GTypeInstance *) pspec);
}
/*
* basically copied from gtk_get_default_language()
*/

View File

@ -20,51 +20,53 @@
#define __APP_GIMP_UTILS_H__
gboolean gimp_rectangle_intersect (gint x1,
gint y1,
gint width1,
gint height1,
gint x2,
gint y2,
gint width2,
gint height2,
gint *dest_x,
gint *dest_y,
gint *dest_width,
gint *dest_height);
gboolean gimp_rectangle_intersect (gint x1,
gint y1,
gint width1,
gint height1,
gint x2,
gint y2,
gint width2,
gint height2,
gint *dest_x,
gint *dest_y,
gint *dest_width,
gint *dest_height);
gint64 gimp_g_object_get_memsize (GObject *object);
gint64 gimp_g_hash_table_get_memsize (GHashTable *hash);
gint64 gimp_g_slist_get_memsize (GSList *slist,
gint64 data_size);
gint64 gimp_g_list_get_memsize (GList *list,
gint64 data_size);
gint64 gimp_g_value_get_memsize (GValue *value);
gint64 gimp_g_type_instance_get_memsize (GTypeInstance *instance);
gint64 gimp_g_object_get_memsize (GObject *object);
gint64 gimp_g_hash_table_get_memsize (GHashTable *hash);
gint64 gimp_g_slist_get_memsize (GSList *slist,
gint64 data_size);
gint64 gimp_g_list_get_memsize (GList *list,
gint64 data_size);
gint64 gimp_g_value_get_memsize (GValue *value);
gint64 gimp_g_param_spec_get_memsize (GParamSpec *pspec);
gchar * gimp_get_default_language (const gchar *category);
GimpUnit gimp_get_default_unit (void);
gchar * gimp_get_default_language (const gchar *category);
GimpUnit gimp_get_default_unit (void);
gboolean gimp_boolean_handled_accum (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
gboolean gimp_boolean_handled_accum (GSignalInvocationHint *ihint,
GValue *return_accu,
const GValue *handler_return,
gpointer dummy);
GParameter * gimp_parameters_append (GType object_type,
GParameter *params,
gint *n_params,
...) G_GNUC_NULL_TERMINATED;
GParameter * gimp_parameters_append_valist (GType object_type,
GParameter *params,
gint *n_params,
va_list args);
void gimp_parameters_free (GParameter *params,
gint n_params);
GParameter * gimp_parameters_append (GType object_type,
GParameter *params,
gint *n_params,
...) G_GNUC_NULL_TERMINATED;
GParameter * gimp_parameters_append_valist (GType object_type,
GParameter *params,
gint *n_params,
va_list args);
void gimp_parameters_free (GParameter *params,
gint n_params);
void gimp_value_array_truncate (GValueArray *args,
gint n_values);
void gimp_value_array_truncate (GValueArray *args,
gint n_values);
gchar * gimp_get_temp_filename (Gimp *gimp,
const gchar *extension);
gchar * gimp_get_temp_filename (Gimp *gimp,
const gchar *extension);
#endif /* __APP_GIMP_UTILS_H__ */

View File

@ -459,8 +459,21 @@ gimp_get_memsize (GimpObject *object,
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->parasites),
gui_size);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->paint_info_list),
gui_size);
memsize += gimp_g_object_get_memsize (G_OBJECT (gimp->module_db));
memsize += gimp_g_slist_get_memsize (gimp->plug_in_menu_branches,
0 /* FIXME */);
memsize += gimp_g_slist_get_memsize (gimp->plug_in_locale_domains,
0 /* FIXME */);
memsize += gimp_g_slist_get_memsize (gimp->plug_in_help_domains,
0 /* FIXME */);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->interpreter_db),
gui_size);
memsize += gimp_object_get_memsize (GIMP_OBJECT (gimp->environ_table),
gui_size);
memsize += gimp_g_list_get_memsize (gimp->plug_in_data_list,
0 /* FIXME */);

View File

@ -42,19 +42,22 @@
#include "gimp-intl.h"
static void gimp_plug_in_procedure_finalize (GObject *object);
static void gimp_plug_in_procedure_finalize (GObject *object);
static GValueArray * gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args);
static void gimp_plug_in_procedure_execute_async (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args,
gint32 display_ID);
static gint64 gimp_plug_in_procedure_get_memsize (GimpObject *object,
gint64 *gui_size);
static GValueArray * gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args);
static void gimp_plug_in_procedure_execute_async (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args,
gint32 display_ID);
const gchar * gimp_plug_in_procedure_real_get_progname (const GimpPlugInProcedure *procedure);
@ -68,15 +71,18 @@ G_DEFINE_TYPE (GimpPlugInProcedure, gimp_plug_in_procedure,
static void
gimp_plug_in_procedure_class_init (GimpPlugInProcedureClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpProcedureClass *proc_class = GIMP_PROCEDURE_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
GimpProcedureClass *proc_class = GIMP_PROCEDURE_CLASS (klass);
object_class->finalize = gimp_plug_in_procedure_finalize;
object_class->finalize = gimp_plug_in_procedure_finalize;
proc_class->execute = gimp_plug_in_procedure_execute;
proc_class->execute_async = gimp_plug_in_procedure_execute_async;
gimp_object_class->get_memsize = gimp_plug_in_procedure_get_memsize;
klass->get_progname = gimp_plug_in_procedure_real_get_progname;
proc_class->execute = gimp_plug_in_procedure_execute;
proc_class->execute_async = gimp_plug_in_procedure_execute_async;
klass->get_progname = gimp_plug_in_procedure_real_get_progname;
}
static void
@ -120,6 +126,65 @@ gimp_plug_in_procedure_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static gint64
gimp_plug_in_procedure_get_memsize (GimpObject *object,
gint64 *gui_size)
{
GimpPlugInProcedure *proc = GIMP_PLUG_IN_PROCEDURE (object);
gint64 memsize = 0;
GList *list;
GSList *slist;
if (proc->prog)
memsize += strlen (proc->prog) + 1;
if (proc->menu_label)
memsize += strlen (proc->menu_label) + 1;
for (list = proc->menu_paths; list; list = g_list_next (list))
memsize += sizeof (GList) + strlen (list->data) + 1;
switch (proc->icon_type)
{
case GIMP_ICON_TYPE_STOCK_ID:
case GIMP_ICON_TYPE_IMAGE_FILE:
if (proc->icon_data)
memsize += strlen ((gchar *) proc->icon_data) + 1;
break;
case GIMP_ICON_TYPE_INLINE_PIXBUF:
memsize += proc->icon_data_length;
break;
}
if (proc->extensions)
memsize += strlen (proc->extensions) + 1;
if (proc->prefixes)
memsize += strlen (proc->prefixes) + 1;
if (proc->magics)
memsize += strlen (proc->magics) + 1;
if (proc->mime_type)
memsize += strlen (proc->mime_type) + 1;
if (proc->thumb_loader)
memsize += strlen (proc->thumb_loader) + 1;
for (slist = proc->extensions_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
for (slist = proc->prefixes_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
for (slist = proc->magics_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);
}
static GValueArray *
gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,

View File

@ -30,6 +30,7 @@
#include "pdb-types.h"
#include "core/gimp.h"
#include "core/gimp-utils.h"
#include "core/gimpcontext.h"
#include "core/gimpchannel.h"
#include "core/gimplayer.h"
@ -45,6 +46,9 @@
static void gimp_procedure_finalize (GObject *object);
static gint64 gimp_procedure_get_memsize (GimpObject *object,
gint64 *gui_size);
static GValueArray * gimp_procedure_real_execute (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
@ -70,12 +74,15 @@ G_DEFINE_TYPE (GimpProcedure, gimp_procedure, GIMP_TYPE_OBJECT);
static void
gimp_procedure_class_init (GimpProcedureClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
object_class->finalize = gimp_procedure_finalize;
object_class->finalize = gimp_procedure_finalize;
klass->execute = gimp_procedure_real_execute;
klass->execute_async = gimp_procedure_real_execute_async;
gimp_object_class->get_memsize = gimp_procedure_get_memsize;
klass->execute = gimp_procedure_real_execute;
klass->execute_async = gimp_procedure_real_execute_async;
}
static void
@ -113,6 +120,52 @@ gimp_procedure_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static gint64
gimp_procedure_get_memsize (GimpObject *object,
gint64 *gui_size)
{
GimpProcedure *procedure = GIMP_PROCEDURE (object);
gint64 memsize = 0;
gint i;
if (! procedure->static_strings)
{
if (procedure->original_name)
memsize += strlen (procedure->original_name) + 1;
if (procedure->blurb)
memsize += strlen (procedure->blurb) + 1;
if (procedure->help)
memsize += strlen (procedure->help) + 1;
if (procedure->author)
memsize += strlen (procedure->author) + 1;
if (procedure->copyright)
memsize += strlen (procedure->copyright) + 1;
if (procedure->date)
memsize += strlen (procedure->date) + 1;
if (procedure->deprecated)
memsize += strlen (procedure->deprecated) + 1;
}
memsize += procedure->num_args * sizeof (GParamSpec *);
for (i = 0; i < procedure->num_args; i++)
memsize += gimp_g_param_spec_get_memsize (procedure->args[i]);
memsize += procedure->num_values * sizeof (GParamSpec *);
for (i = 0; i < procedure->num_values; i++)
memsize += gimp_g_param_spec_get_memsize (procedure->values[i]);
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);
}
static GValueArray *
gimp_procedure_real_execute (GimpProcedure *procedure,
Gimp *gimp,

View File

@ -42,19 +42,22 @@
#include "gimp-intl.h"
static void gimp_plug_in_procedure_finalize (GObject *object);
static void gimp_plug_in_procedure_finalize (GObject *object);
static GValueArray * gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args);
static void gimp_plug_in_procedure_execute_async (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args,
gint32 display_ID);
static gint64 gimp_plug_in_procedure_get_memsize (GimpObject *object,
gint64 *gui_size);
static GValueArray * gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args);
static void gimp_plug_in_procedure_execute_async (GimpProcedure *procedure,
Gimp *gimp,
GimpContext *context,
GimpProgress *progress,
GValueArray *args,
gint32 display_ID);
const gchar * gimp_plug_in_procedure_real_get_progname (const GimpPlugInProcedure *procedure);
@ -68,15 +71,18 @@ G_DEFINE_TYPE (GimpPlugInProcedure, gimp_plug_in_procedure,
static void
gimp_plug_in_procedure_class_init (GimpPlugInProcedureClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpProcedureClass *proc_class = GIMP_PROCEDURE_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GimpObjectClass *gimp_object_class = GIMP_OBJECT_CLASS (klass);
GimpProcedureClass *proc_class = GIMP_PROCEDURE_CLASS (klass);
object_class->finalize = gimp_plug_in_procedure_finalize;
object_class->finalize = gimp_plug_in_procedure_finalize;
proc_class->execute = gimp_plug_in_procedure_execute;
proc_class->execute_async = gimp_plug_in_procedure_execute_async;
gimp_object_class->get_memsize = gimp_plug_in_procedure_get_memsize;
klass->get_progname = gimp_plug_in_procedure_real_get_progname;
proc_class->execute = gimp_plug_in_procedure_execute;
proc_class->execute_async = gimp_plug_in_procedure_execute_async;
klass->get_progname = gimp_plug_in_procedure_real_get_progname;
}
static void
@ -120,6 +126,65 @@ gimp_plug_in_procedure_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static gint64
gimp_plug_in_procedure_get_memsize (GimpObject *object,
gint64 *gui_size)
{
GimpPlugInProcedure *proc = GIMP_PLUG_IN_PROCEDURE (object);
gint64 memsize = 0;
GList *list;
GSList *slist;
if (proc->prog)
memsize += strlen (proc->prog) + 1;
if (proc->menu_label)
memsize += strlen (proc->menu_label) + 1;
for (list = proc->menu_paths; list; list = g_list_next (list))
memsize += sizeof (GList) + strlen (list->data) + 1;
switch (proc->icon_type)
{
case GIMP_ICON_TYPE_STOCK_ID:
case GIMP_ICON_TYPE_IMAGE_FILE:
if (proc->icon_data)
memsize += strlen ((gchar *) proc->icon_data) + 1;
break;
case GIMP_ICON_TYPE_INLINE_PIXBUF:
memsize += proc->icon_data_length;
break;
}
if (proc->extensions)
memsize += strlen (proc->extensions) + 1;
if (proc->prefixes)
memsize += strlen (proc->prefixes) + 1;
if (proc->magics)
memsize += strlen (proc->magics) + 1;
if (proc->mime_type)
memsize += strlen (proc->mime_type) + 1;
if (proc->thumb_loader)
memsize += strlen (proc->thumb_loader) + 1;
for (slist = proc->extensions_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
for (slist = proc->prefixes_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
for (slist = proc->magics_list; slist; slist = g_slist_next (slist))
memsize += sizeof (GSList) + strlen (slist->data) + 1;
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);
}
static GValueArray *
gimp_plug_in_procedure_execute (GimpProcedure *procedure,
Gimp *gimp,