[gegl] gegl-stats: add read/write swap stats



commit be9fffff9ad6fa8b5c4aebeb541261ff30975bd4
Author: Ell <ell_se yahoo com>
Date:   Thu Jun 21 03:43:24 2018 -0400

    gegl-stats: add read/write swap stats
    
    Add boolean "swap-reading" and "swap-writing" properties to
    GeglStats, indicating whether data is currently being read-from/
    written-to the tile swap, respectively.
    
    Add "swap-read-total" and "swap-write-total" properties to
    GeglStats, indicating the total amount of data read-from/written-to
    the tile swap, respectively.  These values are reset when calling
    gegl_stats_reset().

 gegl/buffer/gegl-tile-backend-swap.c | 67 +++++++++++++++++++++++++++++++-----
 gegl/buffer/gegl-tile-backend-swap.h | 12 +++++--
 gegl/gegl-stats.c                    | 51 +++++++++++++++++++++++++++
 3 files changed, 118 insertions(+), 12 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-backend-swap.c b/gegl/buffer/gegl-tile-backend-swap.c
index 40a774652..779ffc9b5 100644
--- a/gegl/buffer/gegl-tile-backend-swap.c
+++ b/gegl/buffer/gegl-tile-backend-swap.c
@@ -147,15 +147,19 @@ static void        gegl_tile_backend_swap_init          (GeglTileBackendSwap *se
 void               gegl_tile_backend_swap_cleanup       (void);
 
 
-static gchar    *path       = NULL;
-static gint      in_fd      = -1;
-static gint      out_fd     = -1;
-static gint64    in_offset  = 0;
-static gint64    out_offset = 0;
-static GList    *gap_list   = NULL;
-static gint64    file_size  = 0;
-static gint64    total      = 0;
-static gboolean  busy       = FALSE;
+static gchar    *path        = NULL;
+static gint      in_fd       = -1;
+static gint      out_fd      = -1;
+static gint64    in_offset   = 0;
+static gint64    out_offset  = 0;
+static GList    *gap_list    = NULL;
+static gint64    file_size   = 0;
+static gint64    total       = 0;
+static gboolean  busy        = FALSE;
+static gboolean  reading     = FALSE;
+static gint64    read_total  = 0;
+static gboolean  writing     = FALSE;
+static gint64    write_total = 0;
 
 static GThread      *writer_thread = NULL;
 static GQueue       *queue         = NULL;
@@ -285,6 +289,8 @@ gegl_tile_backend_swap_write (ThreadParams *params)
       out_offset = offset;
     }
 
+  writing = TRUE;
+
   while (to_be_written > 0)
     {
       gint wrote;
@@ -302,8 +308,12 @@ gegl_tile_backend_swap_write (ThreadParams *params)
 
       to_be_written -= wrote;
       out_offset    += wrote;
+
+      write_total   += wrote;
     }
 
+  writing = FALSE;
+
   GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "writer thread wrote at %i", (gint)offset);
 }
 
@@ -510,6 +520,8 @@ gegl_tile_backend_swap_entry_read (GeglTileBackendSwap *self,
       in_offset = offset;
     }
 
+  reading = TRUE;
+
   while (to_be_read > 0)
     {
       GError *error = NULL;
@@ -518,6 +530,8 @@ gegl_tile_backend_swap_entry_read (GeglTileBackendSwap *self,
       byte_read = read (in_fd, dest + tile_size - to_be_read, to_be_read);
       if (byte_read <= 0)
         {
+          reading = FALSE;
+
           g_mutex_unlock (&read_mutex);
 
           g_message ("unable to read tile data from swap: "
@@ -527,8 +541,12 @@ gegl_tile_backend_swap_entry_read (GeglTileBackendSwap *self,
         }
       to_be_read -= byte_read;
       in_offset  += byte_read;
+
+      read_total += byte_read;
     }
 
+  reading = FALSE;
+
   g_mutex_unlock (&read_mutex);
 
   GEGL_NOTE(GEGL_DEBUG_TILE_BACKEND, "read entry %i, %i, %i from %i", entry->x, entry->y, entry->z, 
(gint)offset);
@@ -963,3 +981,34 @@ gegl_tile_backend_swap_get_busy (void)
 {
   return busy;
 }
+
+gboolean
+gegl_tile_backend_swap_get_reading (void)
+{
+  return reading;
+}
+
+guint64
+gegl_tile_backend_swap_get_read_total (void)
+{
+  return read_total;
+}
+
+gboolean
+gegl_tile_backend_swap_get_writing (void)
+{
+  return writing;
+}
+
+guint64
+gegl_tile_backend_swap_get_write_total (void)
+{
+  return write_total;
+}
+
+void
+gegl_tile_backend_swap_reset_stats (void)
+{
+  read_total  = 0;
+  write_total = 0;
+}
diff --git a/gegl/buffer/gegl-tile-backend-swap.h b/gegl/buffer/gegl-tile-backend-swap.h
index def9b4a1b..6a07b3a96 100644
--- a/gegl/buffer/gegl-tile-backend-swap.h
+++ b/gegl/buffer/gegl-tile-backend-swap.h
@@ -48,9 +48,15 @@ struct _GeglTileBackendSwap
 
 GType      gegl_tile_backend_swap_get_type      (void) G_GNUC_CONST;
 
-guint64    gegl_tile_backend_swap_get_total     (void);
-guint64    gegl_tile_backend_swap_get_file_size (void);
-gboolean   gegl_tile_backend_swap_get_busy      (void);
+guint64    gegl_tile_backend_swap_get_total       (void);
+guint64    gegl_tile_backend_swap_get_file_size   (void);
+gboolean   gegl_tile_backend_swap_get_busy        (void);
+gboolean   gegl_tile_backend_swap_get_reading     (void);
+guint64    gegl_tile_backend_swap_get_read_total  (void);
+gboolean   gegl_tile_backend_swap_get_writing     (void);
+guint64    gegl_tile_backend_swap_get_write_total (void);
+
+void       gegl_tile_backend_swap_reset_stats     (void);
 
 G_END_DECLS
 
diff --git a/gegl/gegl-stats.c b/gegl/gegl-stats.c
index f76b571ec..f64d811e2 100644
--- a/gegl/gegl-stats.c
+++ b/gegl/gegl-stats.c
@@ -40,6 +40,10 @@ enum
   PROP_SWAP_TOTAL,
   PROP_SWAP_FILE_SIZE,
   PROP_SWAP_BUSY,
+  PROP_SWAP_READING,
+  PROP_SWAP_READ_TOTAL,
+  PROP_SWAP_WRITING,
+  PROP_SWAP_WRITE_TOTAL,
   PROP_ZOOM_TOTAL
 };
 
@@ -121,6 +125,36 @@ gegl_stats_class_init (GeglStatsClass *klass)
                                                          FALSE,
                                                          G_PARAM_READABLE));
 
+  g_object_class_install_property (object_class, PROP_SWAP_READING,
+                                   g_param_spec_boolean ("swap-reading",
+                                                         "Swap reading",
+                                                         "Whether data is being read from the swap",
+                                                         FALSE,
+                                                         G_PARAM_READABLE));
+
+
+  g_object_class_install_property (object_class, PROP_SWAP_READ_TOTAL,
+                                   g_param_spec_uint64 ("swap-read-total",
+                                                        "Swap read total",
+                                                        "Total amount of data read from the swap",
+                                                        0, G_MAXUINT64, 0,
+                                                        G_PARAM_READABLE));
+
+  g_object_class_install_property (object_class, PROP_SWAP_WRITING,
+                                   g_param_spec_boolean ("swap-writing",
+                                                         "Swap writing",
+                                                         "Whether data is being written to the swap",
+                                                         FALSE,
+                                                         G_PARAM_READABLE));
+
+
+  g_object_class_install_property (object_class, PROP_SWAP_WRITE_TOTAL,
+                                   g_param_spec_uint64 ("swap-write-total",
+                                                        "Swap write total",
+                                                        "Total amount of data written to the swap",
+                                                        0, G_MAXUINT64, 0,
+                                                        G_PARAM_READABLE));
+
   g_object_class_install_property (object_class, PROP_ZOOM_TOTAL,
                                    g_param_spec_uint64 ("zoom-total",
                                                         "Zoom total",
@@ -188,6 +222,22 @@ gegl_stats_get_property (GObject    *object,
         g_value_set_boolean (value, gegl_tile_backend_swap_get_busy ());
         break;
 
+      case PROP_SWAP_READING:
+        g_value_set_boolean (value, gegl_tile_backend_swap_get_reading ());
+        break;
+
+      case PROP_SWAP_READ_TOTAL:
+        g_value_set_uint64 (value, gegl_tile_backend_swap_get_read_total ());
+        break;
+
+      case PROP_SWAP_WRITING:
+        g_value_set_boolean (value, gegl_tile_backend_swap_get_writing ());
+        break;
+
+      case PROP_SWAP_WRITE_TOTAL:
+        g_value_set_uint64 (value, gegl_tile_backend_swap_get_write_total ());
+        break;
+
       case PROP_ZOOM_TOTAL:
         g_value_set_uint64 (value, gegl_tile_handler_zoom_get_total ());
         break;
@@ -202,5 +252,6 @@ void
 gegl_stats_reset (GeglStats *stats)
 {
   gegl_tile_handler_cache_reset_stats ();
+  gegl_tile_backend_swap_reset_stats ();
   gegl_tile_handler_zoom_reset_stats ();
 }


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