[gimp] app: add temp-buf-total varaible to the dashboard



commit bb645bae1762d70158f7ff62fe349a02dcfc5b22
Author: Ell <ell_se yahoo com>
Date:   Fri Feb 22 08:38:05 2019 -0500

    app: add temp-buf-total varaible to the dashboard
    
    Add a temp-buf-total variable to the dashboard's misc group,
    showing the total size of all GimpTempBuf objects.

 app/core/gimptempbuf.c      | 23 +++++++++++++++++
 app/core/gimptempbuf.h      | 60 ++++++++++++++++++++++++---------------------
 app/widgets/gimpdashboard.c | 17 +++++++++++++
 3 files changed, 72 insertions(+), 28 deletions(-)
---
diff --git a/app/core/gimptempbuf.c b/app/core/gimptempbuf.c
index f06579ad67..0d84d779e2 100644
--- a/app/core/gimptempbuf.c
+++ b/app/core/gimptempbuf.c
@@ -53,6 +53,13 @@ typedef struct
 G_STATIC_ASSERT (sizeof (LockData) <= LOCK_DATA_ALIGNMENT);
 
 
+/*  local variables  */
+
+static guintptr gimp_temp_buf_total_memsize = 0;
+
+
+/*  public functions  */
+
 GimpTempBuf *
 gimp_temp_buf_new (gint        width,
                    gint        height,
@@ -76,6 +83,9 @@ gimp_temp_buf_new (gint        width,
   temp->format    = format;
   temp->data      = gegl_malloc ((gsize) width * height * bpp);
 
+  g_atomic_pointer_add (&gimp_temp_buf_total_memsize,
+                        +gimp_temp_buf_get_memsize (temp));
+
   return temp;
 }
 
@@ -162,6 +172,10 @@ gimp_temp_buf_unref (GimpTempBuf *buf)
 
   if (buf->ref_count < 1)
     {
+      g_atomic_pointer_add (&gimp_temp_buf_total_memsize,
+                            -gimp_temp_buf_get_memsize (buf));
+
+
       if (buf->data)
         gegl_free (buf->data);
 
@@ -426,3 +440,12 @@ gimp_gegl_buffer_get_temp_buf (GeglBuffer *buffer)
 
   return g_object_get_data (G_OBJECT (buffer), "gimp-temp-buf");
 }
+
+
+/*  public functions (stats)  */
+
+guint64
+gimp_temp_buf_get_total_memsize (void)
+{
+  return gimp_temp_buf_total_memsize;
+}
diff --git a/app/core/gimptempbuf.h b/app/core/gimptempbuf.h
index af4e8c4cf4..1569138345 100644
--- a/app/core/gimptempbuf.h
+++ b/app/core/gimptempbuf.h
@@ -19,45 +19,49 @@
 #define __GIMP_TEMP_BUF_H__
 
 
-GimpTempBuf * gimp_temp_buf_new             (gint               width,
-                                             gint               height,
-                                             const Babl        *format) G_GNUC_WARN_UNUSED_RESULT;
-GimpTempBuf * gimp_temp_buf_new_from_pixbuf (GdkPixbuf         *pixbuf,
-                                             const Babl        *f_or_null) G_GNUC_WARN_UNUSED_RESULT;
-GimpTempBuf * gimp_temp_buf_copy            (const GimpTempBuf *src) G_GNUC_WARN_UNUSED_RESULT;
+GimpTempBuf * gimp_temp_buf_new               (gint               width,
+                                               gint               height,
+                                               const Babl        *format) G_GNUC_WARN_UNUSED_RESULT;
+GimpTempBuf * gimp_temp_buf_new_from_pixbuf   (GdkPixbuf         *pixbuf,
+                                               const Babl        *f_or_null) G_GNUC_WARN_UNUSED_RESULT;
+GimpTempBuf * gimp_temp_buf_copy              (const GimpTempBuf *src) G_GNUC_WARN_UNUSED_RESULT;
 
-GimpTempBuf * gimp_temp_buf_ref             (GimpTempBuf       *buf);
-void          gimp_temp_buf_unref           (GimpTempBuf       *buf);
+GimpTempBuf * gimp_temp_buf_ref               (GimpTempBuf       *buf);
+void          gimp_temp_buf_unref             (GimpTempBuf       *buf);
 
-GimpTempBuf * gimp_temp_buf_scale           (const GimpTempBuf *buf,
-                                             gint               width,
-                                             gint               height) G_GNUC_WARN_UNUSED_RESULT;
+GimpTempBuf * gimp_temp_buf_scale             (const GimpTempBuf *buf,
+                                               gint               width,
+                                               gint               height) G_GNUC_WARN_UNUSED_RESULT;
 
-gint          gimp_temp_buf_get_width       (const GimpTempBuf *buf);
-gint          gimp_temp_buf_get_height      (const GimpTempBuf *buf);
+gint          gimp_temp_buf_get_width         (const GimpTempBuf *buf);
+gint          gimp_temp_buf_get_height        (const GimpTempBuf *buf);
 
-const Babl  * gimp_temp_buf_get_format      (const GimpTempBuf *buf);
-void          gimp_temp_buf_set_format      (GimpTempBuf       *buf,
-                                             const Babl        *format);
+const Babl  * gimp_temp_buf_get_format        (const GimpTempBuf *buf);
+void          gimp_temp_buf_set_format        (GimpTempBuf       *buf,
+                                               const Babl        *format);
 
-guchar      * gimp_temp_buf_get_data        (const GimpTempBuf *buf);
-gsize         gimp_temp_buf_get_data_size   (const GimpTempBuf *buf);
+guchar      * gimp_temp_buf_get_data          (const GimpTempBuf *buf);
+gsize         gimp_temp_buf_get_data_size     (const GimpTempBuf *buf);
 
-guchar      * gimp_temp_buf_data_clear      (GimpTempBuf       *buf);
+guchar      * gimp_temp_buf_data_clear        (GimpTempBuf       *buf);
 
-gpointer      gimp_temp_buf_lock            (const GimpTempBuf *buf,
-                                             const Babl        *format,
-                                             GeglAccessMode     access_mode) G_GNUC_WARN_UNUSED_RESULT;
-void          gimp_temp_buf_unlock          (const GimpTempBuf *buf,
-                                             gconstpointer      data);
+gpointer      gimp_temp_buf_lock              (const GimpTempBuf *buf,
+                                               const Babl        *format,
+                                               GeglAccessMode     access_mode) G_GNUC_WARN_UNUSED_RESULT;
+void          gimp_temp_buf_unlock            (const GimpTempBuf *buf,
+                                               gconstpointer      data);
 
-gsize         gimp_temp_buf_get_memsize     (const GimpTempBuf *buf);
+gsize         gimp_temp_buf_get_memsize       (const GimpTempBuf *buf);
 
-GeglBuffer  * gimp_temp_buf_create_buffer   (GimpTempBuf       *temp_buf) G_GNUC_WARN_UNUSED_RESULT;
-GdkPixbuf   * gimp_temp_buf_create_pixbuf   (GimpTempBuf       *temp_buf) G_GNUC_WARN_UNUSED_RESULT;
+GeglBuffer  * gimp_temp_buf_create_buffer     (GimpTempBuf       *temp_buf) G_GNUC_WARN_UNUSED_RESULT;
+GdkPixbuf   * gimp_temp_buf_create_pixbuf     (GimpTempBuf       *temp_buf) G_GNUC_WARN_UNUSED_RESULT;
 
-GimpTempBuf * gimp_gegl_buffer_get_temp_buf (GeglBuffer        *buffer);
+GimpTempBuf * gimp_gegl_buffer_get_temp_buf   (GeglBuffer        *buffer);
 
 
+/*  stats  */
+
+guint64       gimp_temp_buf_get_total_memsize (void);
+
 
 #endif  /*  __GIMP_TEMP_BUF_H__  */
diff --git a/app/widgets/gimpdashboard.c b/app/widgets/gimpdashboard.c
index 45e9114b2c..52b7310359 100644
--- a/app/widgets/gimpdashboard.c
+++ b/app/widgets/gimpdashboard.c
@@ -59,6 +59,7 @@
 #include "core/gimp-parallel.h"
 #include "core/gimpasync.h"
 #include "core/gimpbacktrace.h"
+#include "core/gimptempbuf.h"
 #include "core/gimpwaitable.h"
 
 #include "gimpactiongroup.h"
@@ -138,6 +139,7 @@ typedef enum
   VARIABLE_MIPMAPED,
   VARIABLE_ASYNC_RUNNING,
   VARIABLE_SCRATCH_TOTAL,
+  VARIABLE_TEMP_BUF_TOTAL,
 
 
   N_VARIABLES,
@@ -696,6 +698,18 @@ static const VariableInfo variables[] =
     .type             = VARIABLE_TYPE_SIZE,
     .sample_func      = gimp_dashboard_sample_gegl_stats,
     .data             = "scratch-total"
+  },
+
+  [VARIABLE_TEMP_BUF_TOTAL] =
+  { .name             = "temp-buf-total",
+    /* Translators:  "TempBuf" is a technical term referring to an internal
+     * GIMP data structure.  It's probably OK to leave it untranslated.
+     */
+    .title            = NC_("dashboard-variable", "TempBuf"),
+    .description      = N_("Total size of temporary buffers"),
+    .type             = VARIABLE_TYPE_SIZE,
+    .sample_func      = gimp_dashboard_sample_function,
+    .data             = gimp_temp_buf_get_total_memsize
   }
 };
 
@@ -897,6 +911,9 @@ static const GroupInfo groups[] =
                           { .variable       = VARIABLE_SCRATCH_TOTAL,
                             .default_active = TRUE
                           },
+                          { .variable       = VARIABLE_TEMP_BUF_TOTAL,
+                            .default_active = TRUE
+                          },
 
                           {}
                         }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]