From 7150db004543f465a863af0a2f5b0d1ef1be7a22 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 28 Aug 2023 14:57:58 -0700 Subject: [PATCH] sysprof: add ui to toggle ignoring kernel processes --- src/sysprof/sysprof-callgraph-view-private.h | 1 + src/sysprof/sysprof-callgraph-view.c | 37 ++++++++++++++++++++ src/sysprof/sysprof-callgraph-view.h | 3 ++ src/sysprof/sysprof-callgraph-view.ui | 4 +++ src/sysprof/sysprof-samples-section.ui | 5 +++ src/sysprof/sysprof-session.c | 15 ++++++++ src/sysprof/sysprof-window.c | 1 + src/sysprof/sysprof-window.ui | 4 +++ 8 files changed, 70 insertions(+) diff --git a/src/sysprof/sysprof-callgraph-view-private.h b/src/sysprof/sysprof-callgraph-view-private.h index 21d5acf4..c88df22f 100644 --- a/src/sysprof/sysprof-callgraph-view-private.h +++ b/src/sysprof/sysprof-callgraph-view-private.h @@ -55,6 +55,7 @@ struct _SysprofCallgraphView guint bottom_up : 1; guint categorize_frames : 1; guint hide_system_libraries : 1; + guint ignore_kernel_processes : 1; guint ignore_process_0 : 1; guint include_threads : 1; guint left_heavy : 1; diff --git a/src/sysprof/sysprof-callgraph-view.c b/src/sysprof/sysprof-callgraph-view.c index 20df65fb..ce089d52 100644 --- a/src/sysprof/sysprof-callgraph-view.c +++ b/src/sysprof/sysprof-callgraph-view.c @@ -36,6 +36,7 @@ enum { PROP_CALLGRAPH, PROP_DOCUMENT, PROP_HIDE_SYSTEM_LIBRARIES, + PROP_IGNORE_KERNEL_PROCESSES, PROP_IGNORE_PROCESS_0, PROP_INCLUDE_THREADS, PROP_LEFT_HEAVY, @@ -451,6 +452,10 @@ sysprof_callgraph_view_set_property (GObject *object, sysprof_callgraph_view_set_ignore_process_0 (self, g_value_get_boolean (value)); break; + case PROP_IGNORE_KERNEL_PROCESSES: + sysprof_callgraph_view_set_ignore_kernel_processes (self, g_value_get_boolean (value)); + break; + case PROP_INCLUDE_THREADS: sysprof_callgraph_view_set_include_threads (self, g_value_get_boolean (value)); break; @@ -517,6 +522,11 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass) FALSE, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties[PROP_IGNORE_KERNEL_PROCESSES] = + g_param_spec_boolean ("ignore-kernel-processes", NULL, NULL, + FALSE, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties[PROP_LEFT_HEAVY] = g_param_spec_boolean ("left-heavy", NULL, NULL, FALSE, @@ -714,6 +724,9 @@ sysprof_callgraph_view_reload (SysprofCallgraphView *self) if (self->merge_similar_processes) flags |= SYSPROF_CALLGRAPH_FLAGS_MERGE_SIMILAR_PROCESSES; + if (self->ignore_kernel_processes) + flags |= SYSPROF_CALLGRAPH_FLAGS_IGNORE_KERNEL_PROCESSES; + sysprof_document_callgraph_async (self->document, flags, self->traceables, @@ -944,6 +957,30 @@ sysprof_callgraph_view_set_include_threads (SysprofCallgraphView *self, } } +gboolean +sysprof_callgraph_view_get_ignore_kernel_processes (SysprofCallgraphView *self) +{ + g_return_val_if_fail (SYSPROF_IS_CALLGRAPH_VIEW (self), FALSE); + + return self->ignore_kernel_processes; +} + +void +sysprof_callgraph_view_set_ignore_kernel_processes (SysprofCallgraphView *self, + gboolean ignore_kernel_processes) +{ + g_return_if_fail (SYSPROF_IS_CALLGRAPH_VIEW (self)); + + ignore_kernel_processes = !!ignore_kernel_processes; + + if (self->ignore_kernel_processes != ignore_kernel_processes) + { + self->ignore_kernel_processes = ignore_kernel_processes; + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_IGNORE_KERNEL_PROCESSES]); + sysprof_callgraph_view_queue_reload (self); + } +} + gboolean sysprof_callgraph_view_get_ignore_process_0 (SysprofCallgraphView *self) { diff --git a/src/sysprof/sysprof-callgraph-view.h b/src/sysprof/sysprof-callgraph-view.h index 963327f1..85a1d92c 100644 --- a/src/sysprof/sysprof-callgraph-view.h +++ b/src/sysprof/sysprof-callgraph-view.h @@ -52,6 +52,9 @@ void sysprof_callgraph_view_set_categorize_frames (SysprofCal gboolean sysprof_callgraph_view_get_ignore_process_0 (SysprofCallgraphView *self); void sysprof_callgraph_view_set_ignore_process_0 (SysprofCallgraphView *self, gboolean ignore_process_0); +gboolean sysprof_callgraph_view_get_ignore_kernel_processes (SysprofCallgraphView *self); +void sysprof_callgraph_view_set_ignore_kernel_processes (SysprofCallgraphView *self, + gboolean ignore_kernel_processes); 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 5670201f..494d75a4 100644 --- a/src/sysprof/sysprof-callgraph-view.ui +++ b/src/sysprof/sysprof-callgraph-view.ui @@ -271,6 +271,10 @@ Bottom Up win.callgraph.bottom-up + + Ignore Kernel Processes + win.callgraph.ignore-kernel-processes + Ignore Process 0 win.callgraph.ignore-process-0 diff --git a/src/sysprof/sysprof-samples-section.ui b/src/sysprof/sysprof-samples-section.ui index 2d398ce5..6005dd43 100644 --- a/src/sysprof/sysprof-samples-section.ui +++ b/src/sysprof/sysprof-samples-section.ui @@ -109,6 +109,11 @@ SysprofSamplesSection + + + SysprofSamplesSection + + SysprofSamplesSection diff --git a/src/sysprof/sysprof-session.c b/src/sysprof/sysprof-session.c index 3b001f0a..10f323d6 100644 --- a/src/sysprof/sysprof-session.c +++ b/src/sysprof/sysprof-session.c @@ -43,6 +43,7 @@ struct _SysprofSession guint categorize_frames : 1; guint hide_system_libraries : 1; guint ignore_process_0 : 1; + guint ignore_kernel_processes : 1; guint include_threads : 1; guint left_heavy : 1; guint merge_similar_processes : 1; @@ -56,6 +57,7 @@ enum { PROP_DOCUMENT_TIME, PROP_FILTER, PROP_HIDE_SYSTEM_LIBRARIES, + PROP_IGNORE_KERNEL_PROCESSES, PROP_IGNORE_PROCESS_0, PROP_INCLUDE_THREADS, PROP_LEFT_HEAVY, @@ -156,6 +158,10 @@ sysprof_session_get_property (GObject *object, g_value_set_boolean (value, self->ignore_process_0); break; + case PROP_IGNORE_KERNEL_PROCESSES: + g_value_set_boolean (value, self->ignore_kernel_processes); + break; + case PROP_INCLUDE_THREADS: g_value_set_boolean (value, self->include_threads); break; @@ -219,6 +225,10 @@ sysprof_session_set_property (GObject *object, self->ignore_process_0 = g_value_get_boolean (value); break; + case PROP_IGNORE_KERNEL_PROCESSES: + self->ignore_kernel_processes = g_value_get_boolean (value); + break; + case PROP_INCLUDE_THREADS: self->include_threads = g_value_get_boolean (value); break; @@ -280,6 +290,11 @@ sysprof_session_class_init (SysprofSessionClass *klass) FALSE, (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties [PROP_IGNORE_KERNEL_PROCESSES] = + g_param_spec_boolean ("ignore-kernel-processes", NULL, NULL, + FALSE, + (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); + properties [PROP_INCLUDE_THREADS] = g_param_spec_boolean ("include-threads", NULL, NULL, FALSE, diff --git a/src/sysprof/sysprof-window.c b/src/sysprof/sysprof-window.c index ae65a137..36edb958 100644 --- a/src/sysprof/sysprof-window.c +++ b/src/sysprof/sysprof-window.c @@ -222,6 +222,7 @@ sysprof_window_set_document (SysprofWindow *self, "bottom-up", "categorize-frames", "hide-system-libraries", + "ignore-kernel-processes", "ignore-process-0", "include-threads", "left-heavy", diff --git a/src/sysprof/sysprof-window.ui b/src/sysprof/sysprof-window.ui index 49093169..0a065130 100644 --- a/src/sysprof/sysprof-window.ui +++ b/src/sysprof/sysprof-window.ui @@ -377,6 +377,10 @@ Bottom Up win.callgraph.bottom-up + + Ignore Kernel Processes + win.callgraph.ignore-kernel-processes + Ignore Process 0 win.callgraph.ignore-process-0