From a75de292417cf5becc51b6455a334924a1bb645d Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 10 Jul 2023 12:49:37 -0700 Subject: [PATCH] libsysprof-gtk: remove indirection from timeseries calculation Require an expression to get the end-time so that we can directly bind it to the series generation. --- src/libsysprof-gtk/sysprof-mark-chart-item.c | 2 +- src/libsysprof-gtk/sysprof-time-series-item.c | 45 ++++---- src/libsysprof-gtk/sysprof-time-series-item.h | 2 +- src/libsysprof-gtk/sysprof-time-series.c | 104 +++++++++--------- src/libsysprof-gtk/sysprof-time-series.h | 34 +++--- src/libsysprof-gtk/sysprof-time-span-layer.c | 4 +- src/libsysprof-gtk/tests/test-processes.ui | 6 +- src/sysprof/sysprof-processes-section.ui | 6 +- 8 files changed, 101 insertions(+), 102 deletions(-) diff --git a/src/libsysprof-gtk/sysprof-mark-chart-item.c b/src/libsysprof-gtk/sysprof-mark-chart-item.c index a78ec88f..c97e0ef6 100644 --- a/src/libsysprof-gtk/sysprof-mark-chart-item.c +++ b/src/libsysprof-gtk/sysprof-mark-chart-item.c @@ -159,7 +159,7 @@ sysprof_mark_chart_item_init (SysprofMarkChartItem *self) self->series = sysprof_time_series_new (NULL, g_object_ref (G_LIST_MODEL (self->filtered)), gtk_property_expression_new (SYSPROF_TYPE_DOCUMENT_MARK, NULL, "time"), - gtk_property_expression_new (SYSPROF_TYPE_DOCUMENT_MARK, NULL, "duration"), + gtk_property_expression_new (SYSPROF_TYPE_DOCUMENT_MARK, NULL, "end-time"), gtk_property_expression_new (SYSPROF_TYPE_DOCUMENT_MARK, NULL, "message")); } diff --git a/src/libsysprof-gtk/sysprof-time-series-item.c b/src/libsysprof-gtk/sysprof-time-series-item.c index c663a96e..7c1bae36 100644 --- a/src/libsysprof-gtk/sysprof-time-series-item.c +++ b/src/libsysprof-gtk/sysprof-time-series-item.c @@ -25,8 +25,8 @@ struct _SysprofTimeSeriesItem { GObject parent_instance; - GtkExpression *time_expression; - GtkExpression *duration_expression; + GtkExpression *begin_time_expression; + GtkExpression *end_time_expression; GObject *item; }; @@ -34,7 +34,7 @@ enum { PROP_0, PROP_DURATION, PROP_ITEM, - PROP_TIME, + PROP_BEGIN_TIME, PROP_END_TIME, N_PROPS }; @@ -49,8 +49,8 @@ sysprof_time_series_item_finalize (GObject *object) SysprofTimeSeriesItem *self = (SysprofTimeSeriesItem *)object; g_clear_object (&self->item); - g_clear_pointer (&self->time_expression, gtk_expression_unref); - g_clear_pointer (&self->duration_expression, gtk_expression_unref); + g_clear_pointer (&self->begin_time_expression, gtk_expression_unref); + g_clear_pointer (&self->end_time_expression, gtk_expression_unref); G_OBJECT_CLASS (sysprof_time_series_item_parent_class)->finalize (object); } @@ -73,8 +73,8 @@ sysprof_time_series_item_get_property (GObject *object, g_value_set_int64 (value, sysprof_time_series_item_get_duration (self)); break; - case PROP_TIME: - g_value_set_int64 (value, sysprof_time_series_item_get_time (self)); + case PROP_BEGIN_TIME: + g_value_set_int64 (value, sysprof_time_series_item_get_begin_time (self)); break; case PROP_END_TIME: @@ -99,8 +99,8 @@ sysprof_time_series_item_class_init (SysprofTimeSeriesItemClass *klass) G_TYPE_OBJECT, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); - properties [PROP_TIME] = - g_param_spec_int64 ("time", NULL, NULL, + properties [PROP_BEGIN_TIME] = + g_param_spec_int64 ("begin-time", NULL, NULL, G_MININT64, G_MAXINT64, 0, (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); @@ -124,15 +124,15 @@ sysprof_time_series_item_init (SysprofTimeSeriesItem *self) SysprofTimeSeriesItem * _sysprof_time_series_item_new (GObject *item, - GtkExpression *time_expression, - GtkExpression *duration_expression) + GtkExpression *begin_time_expression, + GtkExpression *end_time_expression) { SysprofTimeSeriesItem *self; self = g_object_new (SYSPROF_TYPE_TIME_SERIES_ITEM, NULL); self->item = item; - self->time_expression = time_expression; - self->duration_expression = duration_expression; + self->begin_time_expression = begin_time_expression; + self->end_time_expression = end_time_expression; return self; } @@ -154,7 +154,7 @@ sysprof_time_series_item_get_item (SysprofTimeSeriesItem *self) } gint64 -sysprof_time_series_item_get_time (SysprofTimeSeriesItem *self) +sysprof_time_series_item_get_begin_time (SysprofTimeSeriesItem *self) { GValue value = G_VALUE_INIT; gint64 ret; @@ -162,7 +162,7 @@ sysprof_time_series_item_get_time (SysprofTimeSeriesItem *self) g_return_val_if_fail (SYSPROF_IS_TIME_SERIES_ITEM (self), 0); g_value_init (&value, G_TYPE_INT64); - gtk_expression_evaluate (self->time_expression, self->item, &value); + gtk_expression_evaluate (self->begin_time_expression, self->item, &value); ret = g_value_get_int64 (&value); g_value_unset (&value); @@ -171,6 +171,12 @@ sysprof_time_series_item_get_time (SysprofTimeSeriesItem *self) gint64 sysprof_time_series_item_get_duration (SysprofTimeSeriesItem *self) +{ + return sysprof_time_series_item_get_end_time (self) - sysprof_time_series_item_get_begin_time (self); +} + +gint64 +sysprof_time_series_item_get_end_time (SysprofTimeSeriesItem *self) { GValue value = G_VALUE_INIT; gint64 ret; @@ -178,16 +184,9 @@ sysprof_time_series_item_get_duration (SysprofTimeSeriesItem *self) g_return_val_if_fail (SYSPROF_IS_TIME_SERIES_ITEM (self), 0); g_value_init (&value, G_TYPE_INT64); - gtk_expression_evaluate (self->duration_expression, self->item, &value); + gtk_expression_evaluate (self->end_time_expression, self->item, &value); ret = g_value_get_int64 (&value); g_value_unset (&value); return ret; } - -gint64 -sysprof_time_series_item_get_end_time (SysprofTimeSeriesItem *self) -{ - return sysprof_time_series_item_get_time (self) + - sysprof_time_series_item_get_duration (self); -} diff --git a/src/libsysprof-gtk/sysprof-time-series-item.h b/src/libsysprof-gtk/sysprof-time-series-item.h index 11881380..896c0cbe 100644 --- a/src/libsysprof-gtk/sysprof-time-series-item.h +++ b/src/libsysprof-gtk/sysprof-time-series-item.h @@ -32,7 +32,7 @@ SYSPROF_AVAILABLE_IN_ALL G_DECLARE_FINAL_TYPE (SysprofTimeSeriesItem, sysprof_time_series_item, SYSPROF, TIME_SERIES_ITEM, GObject) SYSPROF_AVAILABLE_IN_ALL -gint64 sysprof_time_series_item_get_time (SysprofTimeSeriesItem *self); +gint64 sysprof_time_series_item_get_begin_time (SysprofTimeSeriesItem *self); SYSPROF_AVAILABLE_IN_ALL gint64 sysprof_time_series_item_get_duration (SysprofTimeSeriesItem *self); SYSPROF_AVAILABLE_IN_ALL diff --git a/src/libsysprof-gtk/sysprof-time-series.c b/src/libsysprof-gtk/sysprof-time-series.c index cc3db02f..1b8b1c9b 100644 --- a/src/libsysprof-gtk/sysprof-time-series.c +++ b/src/libsysprof-gtk/sysprof-time-series.c @@ -27,8 +27,8 @@ struct _SysprofTimeSeries { SysprofSeries parent_instance; - GtkExpression *time_expression; - GtkExpression *duration_expression; + GtkExpression *begin_time_expression; + GtkExpression *end_time_expression; GtkExpression *label_expression; }; @@ -39,9 +39,9 @@ struct _SysprofTimeSeriesClass enum { PROP_0, - PROP_DURATION_EXPRESSION, + PROP_BEGIN_TIME_EXPRESSION, + PROP_END_TIME_EXPRESSION, PROP_LABEL_EXPRESSION, - PROP_TIME_EXPRESSION, N_PROPS }; @@ -57,8 +57,8 @@ sysprof_time_series_get_series_item (SysprofSeries *series, SysprofTimeSeries *self = SYSPROF_TIME_SERIES (series); return _sysprof_time_series_item_new (item, - gtk_expression_ref (self->time_expression), - gtk_expression_ref (self->duration_expression)); + gtk_expression_ref (self->begin_time_expression), + gtk_expression_ref (self->end_time_expression)); } static void @@ -66,9 +66,9 @@ sysprof_time_series_finalize (GObject *object) { SysprofTimeSeries *self = (SysprofTimeSeries *)object; - g_clear_pointer (&self->duration_expression, gtk_expression_unref); + g_clear_pointer (&self->end_time_expression, gtk_expression_unref); g_clear_pointer (&self->label_expression, gtk_expression_unref); - g_clear_pointer (&self->time_expression, gtk_expression_unref); + g_clear_pointer (&self->begin_time_expression, gtk_expression_unref); G_OBJECT_CLASS (sysprof_time_series_parent_class)->finalize (object); } @@ -83,12 +83,12 @@ sysprof_time_series_get_property (GObject *object, switch (prop_id) { - case PROP_TIME_EXPRESSION: - gtk_value_set_expression (value, self->time_expression); + case PROP_BEGIN_TIME_EXPRESSION: + gtk_value_set_expression (value, self->begin_time_expression); break; - case PROP_DURATION_EXPRESSION: - gtk_value_set_expression (value, self->duration_expression); + case PROP_END_TIME_EXPRESSION: + gtk_value_set_expression (value, self->end_time_expression); break; case PROP_LABEL_EXPRESSION: @@ -110,12 +110,12 @@ sysprof_time_series_set_property (GObject *object, switch (prop_id) { - case PROP_TIME_EXPRESSION: - sysprof_time_series_set_time_expression (self, gtk_value_get_expression (value)); + case PROP_BEGIN_TIME_EXPRESSION: + sysprof_time_series_set_begin_time_expression (self, gtk_value_get_expression (value)); break; - case PROP_DURATION_EXPRESSION: - sysprof_time_series_set_duration_expression (self, gtk_value_get_expression (value)); + case PROP_END_TIME_EXPRESSION: + sysprof_time_series_set_end_time_expression (self, gtk_value_get_expression (value)); break; case PROP_LABEL_EXPRESSION: @@ -140,12 +140,12 @@ sysprof_time_series_class_init (SysprofTimeSeriesClass *klass) series_class->series_item_type = SYSPROF_TYPE_TIME_SERIES_ITEM; series_class->get_series_item = sysprof_time_series_get_series_item; - properties [PROP_TIME_EXPRESSION] = - gtk_param_spec_expression ("time-expression", NULL, NULL, + properties [PROP_BEGIN_TIME_EXPRESSION] = + gtk_param_spec_expression ("begin-time-expression", NULL, NULL, (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); - properties [PROP_DURATION_EXPRESSION] = - gtk_param_spec_expression ("duration-expression", NULL, NULL, + properties [PROP_END_TIME_EXPRESSION] = + gtk_param_spec_expression ("end-time-expression", NULL, NULL, (G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS)); properties [PROP_LABEL_EXPRESSION] = @@ -164,10 +164,10 @@ sysprof_time_series_init (SysprofTimeSeries *self) * sysprof_time_series_new: * @title: (nullable): a title for the series * @model: (transfer full) (nullable): a #GListModel for the series - * @time_expression: (transfer full) (nullable): a #GtkExpression for - * extracting the time value from @model items. - * @duration_expression: (transfer full) (nullable): a #GtkExpression for - * extracting the duration value from @model items. + * @begin_time_expression: (transfer full) (nullable): a #GtkExpression for + * extracting the begin time value from @model items. + * @end_time_expression: (transfer full) (nullable): a #GtkExpression for + * extracting the end time value from @model items. * @label_expression: (transfer full) (nullable): a #GtkExpression for * extracting the label from @model items. * @@ -178,8 +178,8 @@ sysprof_time_series_init (SysprofTimeSeries *self) SysprofSeries * sysprof_time_series_new (const char *title, GListModel *model, - GtkExpression *time_expression, - GtkExpression *duration_expression, + GtkExpression *begin_time_expression, + GtkExpression *end_time_expression, GtkExpression *label_expression) { SysprofTimeSeries *xy; @@ -187,13 +187,13 @@ sysprof_time_series_new (const char *title, xy = g_object_new (SYSPROF_TYPE_TIME_SERIES, "title", title, "model", model, - "time-expression", time_expression, - "duration-expression", duration_expression, + "begin-time-expression", begin_time_expression, + "end-time-expression", end_time_expression, "label-expression", label_expression, NULL); - g_clear_pointer (&time_expression, gtk_expression_unref); - g_clear_pointer (&duration_expression, gtk_expression_unref); + g_clear_pointer (&begin_time_expression, gtk_expression_unref); + g_clear_pointer (&end_time_expression, gtk_expression_unref); g_clear_pointer (&label_expression, gtk_expression_unref); g_clear_object (&model); @@ -201,7 +201,7 @@ sysprof_time_series_new (const char *title, } /** - * sysprof_time_series_get_time_expression: + * sysprof_time_series_get_begin_time_expression: * @self: a #SysprofTimeSeries * * Gets the #SysprofTimeSeries:x-expression property. @@ -211,34 +211,34 @@ sysprof_time_series_new (const char *title, * Returns: (transfer none) (nullable): a #GtkExpression or %NULL */ GtkExpression * -sysprof_time_series_get_time_expression (SysprofTimeSeries *self) +sysprof_time_series_get_begin_time_expression (SysprofTimeSeries *self) { g_return_val_if_fail (SYSPROF_IS_TIME_SERIES (self), NULL); - return self->time_expression; + return self->begin_time_expression; } void -sysprof_time_series_set_time_expression (SysprofTimeSeries *self, - GtkExpression *time_expression) +sysprof_time_series_set_begin_time_expression (SysprofTimeSeries *self, + GtkExpression *begin_time_expression) { g_return_if_fail (SYSPROF_IS_TIME_SERIES (self)); - if (self->time_expression == time_expression) + if (self->begin_time_expression == begin_time_expression) return; - if (time_expression) - gtk_expression_ref (time_expression); + if (begin_time_expression) + gtk_expression_ref (begin_time_expression); - g_clear_pointer (&self->time_expression, gtk_expression_unref); + g_clear_pointer (&self->begin_time_expression, gtk_expression_unref); - self->time_expression = time_expression; + self->begin_time_expression = begin_time_expression; - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_TIME_EXPRESSION]); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_BEGIN_TIME_EXPRESSION]); } /** - * sysprof_time_series_get_duration_expression: + * sysprof_time_series_get_end_time_expression: * @self: a #SysprofTimeSeries * * Gets the #SysprofTimeSeries:y-expression property. @@ -248,30 +248,30 @@ sysprof_time_series_set_time_expression (SysprofTimeSeries *self, * Returns: (transfer none) (nullable): a #GtkExpression or %NULL */ GtkExpression * -sysprof_time_series_get_duration_expression (SysprofTimeSeries *self) +sysprof_time_series_get_end_time_expression (SysprofTimeSeries *self) { g_return_val_if_fail (SYSPROF_IS_TIME_SERIES (self), NULL); - return self->duration_expression; + return self->end_time_expression; } void -sysprof_time_series_set_duration_expression (SysprofTimeSeries *self, - GtkExpression *duration_expression) +sysprof_time_series_set_end_time_expression (SysprofTimeSeries *self, + GtkExpression *end_time_expression) { g_return_if_fail (SYSPROF_IS_TIME_SERIES (self)); - if (self->duration_expression == duration_expression) + if (self->end_time_expression == end_time_expression) return; - if (duration_expression) - gtk_expression_ref (duration_expression); + if (end_time_expression) + gtk_expression_ref (end_time_expression); - g_clear_pointer (&self->duration_expression, gtk_expression_unref); + g_clear_pointer (&self->end_time_expression, gtk_expression_unref); - self->duration_expression = duration_expression; + self->end_time_expression = end_time_expression; - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_DURATION_EXPRESSION]); + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_END_TIME_EXPRESSION]); } /** diff --git a/src/libsysprof-gtk/sysprof-time-series.h b/src/libsysprof-gtk/sysprof-time-series.h index dce6ebb6..d5100770 100644 --- a/src/libsysprof-gtk/sysprof-time-series.h +++ b/src/libsysprof-gtk/sysprof-time-series.h @@ -35,31 +35,31 @@ typedef struct _SysprofTimeSeries SysprofTimeSeries; typedef struct _SysprofTimeSeriesClass SysprofTimeSeriesClass; SYSPROF_AVAILABLE_IN_ALL -GType sysprof_time_series_get_type (void) G_GNUC_CONST; +GType sysprof_time_series_get_type (void) G_GNUC_CONST; SYSPROF_AVAILABLE_IN_ALL -SysprofSeries *sysprof_time_series_new (const char *title, - GListModel *model, - GtkExpression *time_expression, - GtkExpression *duration_expression, - GtkExpression *label_expression); +SysprofSeries *sysprof_time_series_new (const char *title, + GListModel *model, + GtkExpression *begin_time_expression, + GtkExpression *end_time_expression, + GtkExpression *label_expression); SYSPROF_AVAILABLE_IN_ALL -GtkExpression *sysprof_time_series_get_time_expression (SysprofTimeSeries *self); +GtkExpression *sysprof_time_series_get_begin_time_expression (SysprofTimeSeries *self); SYSPROF_AVAILABLE_IN_ALL -void sysprof_time_series_set_time_expression (SysprofTimeSeries *self, - GtkExpression *time_expression); +void sysprof_time_series_set_begin_time_expression (SysprofTimeSeries *self, + GtkExpression *time_expression); SYSPROF_AVAILABLE_IN_ALL -GtkExpression *sysprof_time_series_get_duration_expression (SysprofTimeSeries *self); +GtkExpression *sysprof_time_series_get_end_time_expression (SysprofTimeSeries *self); SYSPROF_AVAILABLE_IN_ALL -void sysprof_time_series_set_duration_expression (SysprofTimeSeries *self, - GtkExpression *duration_expression); +void sysprof_time_series_set_end_time_expression (SysprofTimeSeries *self, + GtkExpression *end_time_expression); SYSPROF_AVAILABLE_IN_ALL -GtkExpression *sysprof_time_series_get_label_expression (SysprofTimeSeries *self); +GtkExpression *sysprof_time_series_get_label_expression (SysprofTimeSeries *self); SYSPROF_AVAILABLE_IN_ALL -void sysprof_time_series_set_label_expression (SysprofTimeSeries *self, - GtkExpression *label_expression); +void sysprof_time_series_set_label_expression (SysprofTimeSeries *self, + GtkExpression *label_expression); SYSPROF_AVAILABLE_IN_ALL -char *sysprof_time_series_dup_label (SysprofTimeSeries *self, - guint position); +char *sysprof_time_series_dup_label (SysprofTimeSeries *self, + guint position); G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofTimeSeries, g_object_unref) diff --git a/src/libsysprof-gtk/sysprof-time-span-layer.c b/src/libsysprof-gtk/sysprof-time-span-layer.c index 6dcfe2e2..f25b5e19 100644 --- a/src/libsysprof-gtk/sysprof-time-span-layer.c +++ b/src/libsysprof-gtk/sysprof-time-span-layer.c @@ -426,10 +426,10 @@ sysprof_time_span_layer_init (SysprofTimeSpanLayer *self) G_CONNECT_SWAPPED); self->series_bindings = g_binding_group_new (); - g_binding_group_bind (self->series_bindings, "time-expression", + g_binding_group_bind (self->series_bindings, "begin-time-expression", self->normal_x, "expression", G_BINDING_SYNC_CREATE); - g_binding_group_bind (self->series_bindings, "duration-expression", + g_binding_group_bind (self->series_bindings, "end-time-expression", self->normal_x2, "expression", G_BINDING_SYNC_CREATE); } diff --git a/src/libsysprof-gtk/tests/test-processes.ui b/src/libsysprof-gtk/tests/test-processes.ui index 4181861c..006393b2 100644 --- a/src/libsysprof-gtk/tests/test-processes.ui +++ b/src/libsysprof-gtk/tests/test-processes.ui @@ -57,11 +57,11 @@ - + - - + + diff --git a/src/sysprof/sysprof-processes-section.ui b/src/sysprof/sysprof-processes-section.ui index e0afe756..10595f6d 100644 --- a/src/sysprof/sysprof-processes-section.ui +++ b/src/sysprof/sysprof-processes-section.ui @@ -63,11 +63,11 @@ - + - - + +