From ecdcfb83d088db17ae425fc8ef3161723b30b334 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Thu, 20 Jul 2023 12:30:11 -0700 Subject: [PATCH] sysprof: add toggles to categorize frames --- src/sysprof/sysprof-callgraph-view-private.h | 1 + src/sysprof/sysprof-callgraph-view.c | 43 ++++++++++++++++++++ src/sysprof/sysprof-callgraph-view.h | 3 ++ src/sysprof/sysprof-callgraph-view.ui | 4 ++ src/sysprof/sysprof-memory-section.ui | 5 +++ src/sysprof/sysprof-samples-section.ui | 5 +++ src/sysprof/sysprof-session.c | 16 ++++++++ src/sysprof/sysprof-window.c | 1 + 8 files changed, 78 insertions(+) diff --git a/src/sysprof/sysprof-callgraph-view-private.h b/src/sysprof/sysprof-callgraph-view-private.h index 5a48d3a7..fa3076ae 100644 --- a/src/sysprof/sysprof-callgraph-view-private.h +++ b/src/sysprof/sysprof-callgraph-view-private.h @@ -51,6 +51,7 @@ struct _SysprofCallgraphView guint reload_source; guint bottom_up : 1; + guint categorize_frames : 1; guint include_threads : 1; guint hide_system_libraries : 1; }; diff --git a/src/sysprof/sysprof-callgraph-view.c b/src/sysprof/sysprof-callgraph-view.c index 51456394..1c98c35b 100644 --- a/src/sysprof/sysprof-callgraph-view.c +++ b/src/sysprof/sysprof-callgraph-view.c @@ -32,6 +32,7 @@ enum { PROP_0, PROP_BOTTOM_UP, + PROP_CATEGORIZE_FRAMES, PROP_CALLGRAPH, PROP_DOCUMENT, PROP_HIDE_SYSTEM_LIBRARIES, @@ -323,6 +324,10 @@ sysprof_callgraph_view_get_property (GObject *object, g_value_set_boolean (value, sysprof_callgraph_view_get_bottom_up (self)); break; + case PROP_CATEGORIZE_FRAMES: + g_value_set_boolean (value, sysprof_callgraph_view_get_categorize_frames (self)); + break; + case PROP_CALLGRAPH: g_value_set_object (value, sysprof_callgraph_view_get_callgraph (self)); break; @@ -366,6 +371,10 @@ sysprof_callgraph_view_set_property (GObject *object, sysprof_callgraph_view_set_bottom_up (self, g_value_get_boolean (value)); break; + case PROP_CATEGORIZE_FRAMES: + sysprof_callgraph_view_set_categorize_frames (self, g_value_get_boolean (value)); + break; + case PROP_DOCUMENT: sysprof_callgraph_view_set_document (self, g_value_get_object (value)); break; @@ -402,6 +411,11 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass) FALSE, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties[PROP_CATEGORIZE_FRAMES] = + g_param_spec_boolean ("categorize-frames", NULL, NULL, + TRUE, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties[PROP_CALLGRAPH] = g_param_spec_object ("callgraph", NULL, NULL, SYSPROF_TYPE_CALLGRAPH, @@ -460,6 +474,8 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass) static void sysprof_callgraph_view_init (SysprofCallgraphView *self) { + self->categorize_frames = TRUE; + self->traceables_signals = g_signal_group_new (G_TYPE_LIST_MODEL); g_signal_connect_object (self->traceables_signals, "bind", @@ -583,6 +599,9 @@ sysprof_callgraph_view_reload (SysprofCallgraphView *self) if (self->bottom_up) flags |= SYSPROF_CALLGRAPH_FLAGS_BOTTOM_UP; + if (self->categorize_frames) + flags |= SYSPROF_CALLGRAPH_FLAGS_CATEGORIZE_FRAMES; + sysprof_document_callgraph_async (self->document, flags, self->traceables, @@ -741,6 +760,30 @@ sysprof_callgraph_view_set_bottom_up (SysprofCallgraphView *self, } } +gboolean +sysprof_callgraph_view_get_categorize_frames (SysprofCallgraphView *self) +{ + g_return_val_if_fail (SYSPROF_IS_CALLGRAPH_VIEW (self), FALSE); + + return self->categorize_frames; +} + +void +sysprof_callgraph_view_set_categorize_frames (SysprofCallgraphView *self, + gboolean categorize_frames) +{ + g_return_if_fail (SYSPROF_IS_CALLGRAPH_VIEW (self)); + + categorize_frames = !!categorize_frames; + + if (self->categorize_frames != categorize_frames) + { + self->categorize_frames = categorize_frames; + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_CATEGORIZE_FRAMES]); + sysprof_callgraph_view_queue_reload (self); + } +} + gboolean sysprof_callgraph_view_get_hide_system_libraries (SysprofCallgraphView *self) { diff --git a/src/sysprof/sysprof-callgraph-view.h b/src/sysprof/sysprof-callgraph-view.h index f234acdb..96e28dd8 100644 --- a/src/sysprof/sysprof-callgraph-view.h +++ b/src/sysprof/sysprof-callgraph-view.h @@ -46,6 +46,9 @@ void sysprof_callgraph_view_set_traceables (SysprofCallg gboolean sysprof_callgraph_view_get_bottom_up (SysprofCallgraphView *self); void sysprof_callgraph_view_set_bottom_up (SysprofCallgraphView *self, gboolean bottom_up); +gboolean sysprof_callgraph_view_get_categorize_frames (SysprofCallgraphView *self); +void sysprof_callgraph_view_set_categorize_frames (SysprofCallgraphView *self, + gboolean categorize_frames); gboolean sysprof_callgraph_view_get_include_threads (SysprofCallgraphView *self); void sysprof_callgraph_view_set_include_threads (SysprofCallgraphView *self, gboolean include_threads); diff --git a/src/sysprof/sysprof-callgraph-view.ui b/src/sysprof/sysprof-callgraph-view.ui index 2af89dd8..c86058b8 100644 --- a/src/sysprof/sysprof-callgraph-view.ui +++ b/src/sysprof/sysprof-callgraph-view.ui @@ -234,6 +234,10 @@
Options + + Categorize Frames + win.callgraph.categorize-frames + Hide System Libraries win.callgraph.hide-system-libraries diff --git a/src/sysprof/sysprof-memory-section.ui b/src/sysprof/sysprof-memory-section.ui index 17b2a085..92982f42 100644 --- a/src/sysprof/sysprof-memory-section.ui +++ b/src/sysprof/sysprof-memory-section.ui @@ -92,6 +92,11 @@ SysprofMemorySection + + + SysprofMemorySection + + SysprofMemorySection diff --git a/src/sysprof/sysprof-samples-section.ui b/src/sysprof/sysprof-samples-section.ui index 76e014bd..e37b6521 100644 --- a/src/sysprof/sysprof-samples-section.ui +++ b/src/sysprof/sysprof-samples-section.ui @@ -92,6 +92,11 @@ SysprofSamplesSection + + + SysprofSamplesSection + + SysprofSamplesSection diff --git a/src/sysprof/sysprof-session.c b/src/sysprof/sysprof-session.c index 14183820..4637cb80 100644 --- a/src/sysprof/sysprof-session.c +++ b/src/sysprof/sysprof-session.c @@ -40,6 +40,7 @@ struct _SysprofSession SysprofTimeSpan visible_time; guint bottom_up : 1; + guint categorize_frames : 1; guint include_threads : 1; guint hide_system_libraries : 1; }; @@ -52,6 +53,7 @@ enum { PROP_FILTER, PROP_HIDE_SYSTEM_LIBRARIES, PROP_INCLUDE_THREADS, + PROP_CATEGORIZE_FRAMES, PROP_SELECTED_TIME, PROP_SELECTED_TIME_AXIS, PROP_VISIBLE_TIME, @@ -124,6 +126,10 @@ sysprof_session_get_property (GObject *object, g_value_set_boolean (value, self->bottom_up); break; + case PROP_CATEGORIZE_FRAMES: + g_value_set_boolean (value, self->categorize_frames); + break; + case PROP_DOCUMENT: g_value_set_object (value, sysprof_session_get_document (self)); break; @@ -179,6 +185,10 @@ sysprof_session_set_property (GObject *object, self->bottom_up = g_value_get_boolean (value); break; + case PROP_CATEGORIZE_FRAMES: + self->categorize_frames = g_value_get_boolean (value); + break; + case PROP_DOCUMENT: sysprof_session_set_document (self, g_value_get_object (value)); break; @@ -210,6 +220,11 @@ sysprof_session_class_init (SysprofSessionClass *klass) FALSE, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties [PROP_CATEGORIZE_FRAMES] = + g_param_spec_boolean ("categorize-frames", NULL, NULL, + FALSE, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties [PROP_DOCUMENT] = g_param_spec_object ("document", NULL, NULL, SYSPROF_TYPE_DOCUMENT, @@ -264,6 +279,7 @@ sysprof_session_init (SysprofSession *self) self->filter = gtk_every_filter_new (); self->selected_time_axis = sysprof_value_axis_new (0, 0); self->visible_time_axis = sysprof_value_axis_new (0, 0); + self->categorize_frames = TRUE; } SysprofSession * diff --git a/src/sysprof/sysprof-window.c b/src/sysprof/sysprof-window.c index 2fe997d6..e58613e2 100644 --- a/src/sysprof/sysprof-window.c +++ b/src/sysprof/sysprof-window.c @@ -125,6 +125,7 @@ sysprof_window_set_document (SysprofWindow *self, { static const char *callgraph_actions[] = { "bottom-up", + "categorize-frames", "hide-system-libraries", "include-threads", };