From e55d74d80c6554bf113c400da85b770a9ecf0dc8 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 13 Jul 2023 14:55:00 -0700 Subject: [PATCH] libsysprof-gtk: give session a copy of document time This way we don't have to constantly route through the document for it to determine relative axis information. --- src/libsysprof-gtk/sysprof-session.c | 22 ++++++++++++++++++++-- src/libsysprof-gtk/sysprof-session.h | 2 ++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/libsysprof-gtk/sysprof-session.c b/src/libsysprof-gtk/sysprof-session.c index 8788e556..ef5a1b88 100644 --- a/src/libsysprof-gtk/sysprof-session.c +++ b/src/libsysprof-gtk/sysprof-session.c @@ -38,6 +38,7 @@ struct _SysprofSession SysprofAxis *visible_time_axis; SysprofAxis *selected_time_axis; + SysprofTimeSpan document_time; SysprofTimeSpan selected_time; SysprofTimeSpan visible_time; @@ -48,6 +49,7 @@ struct _SysprofSession enum { PROP_0, PROP_DOCUMENT, + PROP_DOCUMENT_TIME, PROP_FILTER, PROP_HIDE_SYSTEM_LIBRARIES, PROP_INCLUDE_THREADS, @@ -93,8 +95,7 @@ sysprof_session_set_document (SysprofSession *self, /* Select/show the entire document time span */ time_span = sysprof_document_get_time_span (document); - memcpy (&self->visible_time, time_span, sizeof *time_span); - memcpy (&self->selected_time, time_span, sizeof *time_span); + self->selected_time = self->visible_time = self->document_time = *time_span; sysprof_session_update_axis (self); /* Discover tracks to show from the document */ @@ -129,6 +130,10 @@ sysprof_session_get_property (GObject *object, g_value_set_object (value, sysprof_session_get_document (self)); break; + case PROP_DOCUMENT_TIME: + g_value_set_boxed (value, sysprof_session_get_document_time (self)); + break; + case PROP_FILTER: g_value_set_object (value, sysprof_session_get_filter (self)); break; @@ -207,6 +212,11 @@ sysprof_session_class_init (SysprofSessionClass *klass) SYSPROF_TYPE_DOCUMENT, (G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + properties [PROP_DOCUMENT_TIME] = + g_param_spec_boxed ("document-time", NULL, NULL, + SYSPROF_TYPE_TIME_SPAN, + (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)); + properties [PROP_FILTER] = g_param_spec_object ("filter", NULL, NULL, GTK_TYPE_FILTER, @@ -316,6 +326,14 @@ sysprof_session_get_visible_time (SysprofSession *self) return &self->visible_time; } +const SysprofTimeSpan * +sysprof_session_get_document_time (SysprofSession *self) +{ + g_return_val_if_fail (SYSPROF_IS_SESSION (self), NULL); + + return &self->document_time; +} + void sysprof_session_select_time (SysprofSession *self, const SysprofTimeSpan *time_span) diff --git a/src/libsysprof-gtk/sysprof-session.h b/src/libsysprof-gtk/sysprof-session.h index 358382db..789f0a18 100644 --- a/src/libsysprof-gtk/sysprof-session.h +++ b/src/libsysprof-gtk/sysprof-session.h @@ -39,6 +39,8 @@ SysprofSession *sysprof_session_new (SysprofDocument SYSPROF_AVAILABLE_IN_ALL SysprofDocument *sysprof_session_get_document (SysprofSession *self); SYSPROF_AVAILABLE_IN_ALL +const SysprofTimeSpan *sysprof_session_get_document_time (SysprofSession *self); +SYSPROF_AVAILABLE_IN_ALL GtkFilter *sysprof_session_get_filter (SysprofSession *self); SYSPROF_AVAILABLE_IN_ALL const SysprofTimeSpan *sysprof_session_get_selected_time (SysprofSession *self);