[sysprof] libsysprof-ui: add timing information
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [sysprof] libsysprof-ui: add timing information
- Date: Wed, 29 May 2019 22:26:09 +0000 (UTC)
commit dc1abc0674f4b638c9422bcba1bf98daabc4dc07
Author: Christian Hergert <chergert redhat com>
Date: Mon May 13 21:07:18 2019 -0700
libsysprof-ui: add timing information
src/libsysprof-ui/sysprof-cell-renderer-duration.c | 51 +++++++++++++++++++---
1 file changed, 44 insertions(+), 7 deletions(-)
---
diff --git a/src/libsysprof-ui/sysprof-cell-renderer-duration.c
b/src/libsysprof-ui/sysprof-cell-renderer-duration.c
index 4f91a52..a5e0a0b 100644
--- a/src/libsysprof-ui/sysprof-cell-renderer-duration.c
+++ b/src/libsysprof-ui/sysprof-cell-renderer-duration.c
@@ -24,6 +24,8 @@
#include "sysprof-cell-renderer-duration.h"
+#define NSEC_PER_SEC (G_USEC_PER_SEC * 1000L)
+
typedef struct
{
gchar *text;
@@ -57,11 +59,13 @@ sysprof_cell_renderer_duration_render (GtkCellRenderer *renderer,
{
SysprofCellRendererDuration *self = (SysprofCellRendererDuration *)renderer;
SysprofCellRendererDurationPrivate *priv = sysprof_cell_renderer_duration_get_instance_private (self);
+ g_autoptr(GString) str = NULL;
GtkStyleContext *style_context;
gdouble zoom_range;
gdouble x1, x2;
GdkRGBA rgba;
GdkRectangle r;
+ gint off = -1;
g_assert (SYSPROF_IS_CELL_RENDERER_DURATION (self));
g_assert (cr != NULL);
@@ -95,22 +99,55 @@ sysprof_cell_renderer_duration_render (GtkCellRenderer *renderer,
gdk_cairo_set_source_rgba (cr, &rgba);
cairo_fill (cr);
- if (priv->text)
+ str = g_string_new (priv->text);
+
+ if (priv->begin_time != priv->end_time)
+ {
+ gint64 duration = priv->end_time - priv->begin_time;
+ gdouble sec = duration / (gdouble)NSEC_PER_SEC;
+ gchar fmt[32];
+
+ if (str->len)
+ g_string_append_c (str, ' ');
+
+ off = str->len;
+
+ if (ABS (sec) < 1.0)
+ g_snprintf (fmt, sizeof fmt, "(%0.2lf msec)", sec * 1000.0);
+ else
+ g_snprintf (fmt, sizeof fmt, "(%0.2lf sec)", sec);
+
+ g_string_append (str, fmt);
+ }
+
+ if (str->len)
{
PangoLayout *layout;
gint w, h;
/* Add some spacing before/after */
- r.x -= 12;
- r.width += 24;
+ r.x -= 24;
+ r.width += 48;
- layout = gtk_widget_create_pango_layout (widget, priv->text);
+ layout = gtk_widget_create_pango_layout (widget, NULL);
+ pango_layout_set_text (layout, str->str, str->len);
pango_layout_get_pixel_size (layout, &w, &h);
- if ((r.x - w) >= cell_area->x)
- cairo_move_to (cr, r.x - w, r.y + ((r.height - h) / 2));
- else
+ if ((r.x + r.width + w) < (cell_area->x + cell_area->width))
cairo_move_to (cr, r.x + r.width, r.y + ((r.height - h) / 2));
+ else
+ cairo_move_to (cr, r.x - w, r.y + ((r.height - h) / 2));
+
+ if (off > -1)
+ {
+ PangoAttrList *list = pango_attr_list_new ();
+ PangoAttribute *attr = pango_attr_scale_new (0.8333);
+ attr->start_index = off;
+ attr->end_index = str->len;
+ pango_attr_list_insert (list, g_steal_pointer (&attr));
+ pango_layout_set_attributes (layout, list);
+ pango_attr_list_unref (list);
+ }
rgba.alpha = 0.4;
gdk_cairo_set_source_rgba (cr, &rgba);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]