diff --git a/app/core/gimp-utils.c b/app/core/gimp-utils.c index 7980bb4adf..cb0ead909d 100644 --- a/app/core/gimp-utils.c +++ b/app/core/gimp-utils.c @@ -304,6 +304,23 @@ gimp_gegl_buffer_get_memsize (GeglBuffer *buffer) return 0; } +gint64 +gimp_gegl_pyramid_get_memsize (GeglBuffer *buffer) +{ + if (buffer) + { + const Babl *format = gegl_buffer_get_format (buffer); + + /* The pyramid levels constitute a geometric sum with a ratio of 1/4. */ + return ((gint64) babl_format_get_bytes_per_pixel (format) * + (gint64) gegl_buffer_get_width (buffer) * + (gint64) gegl_buffer_get_height (buffer) * 1.33 + + gimp_g_object_get_memsize (G_OBJECT (buffer))); + } + + return 0; +} + gint64 gimp_string_get_memsize (const gchar *string) { diff --git a/app/core/gimp-utils.h b/app/core/gimp-utils.h index f1126e07eb..90404b5d95 100644 --- a/app/core/gimp-utils.h +++ b/app/core/gimp-utils.h @@ -53,6 +53,7 @@ gint64 gimp_g_value_get_memsize (GValue *value); gint64 gimp_g_param_spec_get_memsize (GParamSpec *pspec); gint64 gimp_gegl_buffer_get_memsize (GeglBuffer *buffer); +gint64 gimp_gegl_pyramid_get_memsize (GeglBuffer *buffer); gint64 gimp_string_get_memsize (const gchar *string); gint64 gimp_parasite_get_memsize (GimpParasite *parasite, diff --git a/app/core/gimpprojection.c b/app/core/gimpprojection.c index 72a7e261db..092b68f857 100644 --- a/app/core/gimpprojection.c +++ b/app/core/gimpprojection.c @@ -296,7 +296,7 @@ gimp_projection_get_memsize (GimpObject *object, GimpProjection *projection = GIMP_PROJECTION (object); gint64 memsize = 0; - memsize += gimp_gegl_buffer_get_memsize (projection->priv->buffer); + memsize += gimp_gegl_pyramid_get_memsize (projection->priv->buffer); return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object, gui_size);