Merge branch 'gbsneto/mark-name-in-waterfall-fixes' into 'master'

sysprof: Also render labels for instant marks

See merge request GNOME/sysprof!99
This commit is contained in:
Christian Hergert
2024-08-15 20:54:59 +00:00

View File

@ -106,7 +106,9 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
GtkSnapshot *snapshot) GtkSnapshot *snapshot)
{ {
SysprofTimeSpanLayer *self = (SysprofTimeSpanLayer *)widget; SysprofTimeSpanLayer *self = (SysprofTimeSpanLayer *)widget;
const GdkRGBA *label_color = _sysprof_chart_layer_get_accent_fg_color ();
static const GdkRGBA black = {0,0,0,1}; static const GdkRGBA black = {0,0,0,1};
g_autoptr(PangoLayout) layout = NULL;
const double *x_values; const double *x_values;
const double *x2_values; const double *x2_values;
const GdkRGBA *color; const GdkRGBA *color;
@ -117,6 +119,8 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
guint n_x_values = 0; guint n_x_values = 0;
guint n_x2_values = 0; guint n_x2_values = 0;
guint n_values; guint n_values;
int layout_y;
int layout_h;
int width; int width;
int height; int height;
@ -152,12 +156,9 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
!(n_values = MIN (n_x_values, n_x2_values))) !(n_values = MIN (n_x_values, n_x2_values)))
return; return;
if (color->alpha > 0) if (color->alpha > 0 || event_color->alpha > 0)
{ {
const GdkRGBA *label_color = _sysprof_chart_layer_get_accent_fg_color (); layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), NULL);
PangoLayout *layout = gtk_widget_create_pango_layout (GTK_WIDGET (self), NULL);
int layout_y;
int layout_h;
pango_layout_set_single_paragraph_mode (layout, TRUE); pango_layout_set_single_paragraph_mode (layout, TRUE);
pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END); pango_layout_set_ellipsize (layout, PANGO_ELLIPSIZE_END);
@ -165,7 +166,10 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
pango_layout_get_pixel_size (layout, NULL, &layout_h); pango_layout_get_pixel_size (layout, NULL, &layout_h);
layout_y = (height - layout_h) / 2; layout_y = (height - layout_h) / 2;
}
if (color->alpha > 0)
{
/* First pass, draw our rectangles for duration which we /* First pass, draw our rectangles for duration which we
* always want in the background compared to "points" which * always want in the background compared to "points" which
* are marks w/o a duration. * are marks w/o a duration.
@ -264,8 +268,6 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
} }
} }
} }
g_object_unref (layout);
} }
if (event_color->alpha > 0) if (event_color->alpha > 0)
@ -295,6 +297,34 @@ sysprof_time_span_layer_snapshot (GtkWidget *widget,
gtk_snapshot_restore (snapshot); gtk_snapshot_restore (snapshot);
last_x = begin; last_x = begin;
if (n_values == 1)
{
g_autofree char *label = sysprof_time_series_dup_label (self->series, i);
const GdkRGBA *fg = dark ? label_color : &black;
int right_empty_space;
int label_width;
int label_x;
if (label == NULL || *label == '\0')
continue;
pango_layout_set_text (layout, label, -1);
pango_layout_set_alignment (layout, PANGO_ALIGN_LEFT);
pango_layout_get_pixel_size (layout, &label_width, NULL);
label_x = begin * width + ceil (height / 3.) + 2;
right_empty_space = width - label_x;
pango_layout_set_width (layout, right_empty_space * PANGO_SCALE);
if (right_empty_space <= 20)
continue;
gtk_snapshot_save (snapshot);
gtk_snapshot_translate (snapshot, &GRAPHENE_POINT_INIT (label_x, layout_y));
gtk_snapshot_append_layout (snapshot, layout, fg);
gtk_snapshot_restore (snapshot);
}
} }
} }
} }