mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
sysprof: bind utility traceables to samples view stack child
We want the traceables to match the selection in either the callgraph or the flamegraph, depending which is visible. The summary is not currently implemented for flamegraph as it is already naturally a summary by virtue of it's colorization. Fixes #95
This commit is contained in:
@ -20,6 +20,8 @@
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <adwaita.h>
|
||||
|
||||
#include "sysprof-chart.h"
|
||||
#include "sysprof-column-layer.h"
|
||||
#include "sysprof-flame-graph.h"
|
||||
@ -41,10 +43,21 @@ struct _SysprofSamplesSection
|
||||
SysprofSection parent_instance;
|
||||
|
||||
SysprofWeightedCallgraphView *callgraph_view;
|
||||
SysprofFlameGraph *flamegraph;
|
||||
AdwViewStack *stack;
|
||||
};
|
||||
|
||||
G_DEFINE_FINAL_TYPE (SysprofSamplesSection, sysprof_samples_section, SYSPROF_TYPE_SECTION)
|
||||
|
||||
enum {
|
||||
PROP_0,
|
||||
PROP_UTILITY_TRACEABLES,
|
||||
PROP_UTILITY_SUMMARY,
|
||||
N_PROPS
|
||||
};
|
||||
|
||||
static GParamSpec *properties[N_PROPS];
|
||||
|
||||
static char *
|
||||
format_number (gpointer unused,
|
||||
guint number)
|
||||
@ -54,6 +67,15 @@ format_number (gpointer unused,
|
||||
return g_strdup_printf ("%'u", number);
|
||||
}
|
||||
|
||||
static void
|
||||
notify_utility_traceables_cb (SysprofSamplesSection *self,
|
||||
GParamSpec *pspec,
|
||||
GObject *instance)
|
||||
{
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UTILITY_TRACEABLES]);
|
||||
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_UTILITY_SUMMARY]);
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_samples_section_dispose (GObject *object)
|
||||
{
|
||||
@ -64,6 +86,45 @@ sysprof_samples_section_dispose (GObject *object)
|
||||
G_OBJECT_CLASS (sysprof_samples_section_parent_class)->dispose (object);
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_samples_section_get_property (GObject *object,
|
||||
guint prop_id,
|
||||
GValue *value,
|
||||
GParamSpec *pspec)
|
||||
{
|
||||
SysprofSamplesSection *self = SYSPROF_SAMPLES_SECTION (object);
|
||||
|
||||
switch (prop_id)
|
||||
{
|
||||
case PROP_UTILITY_SUMMARY:
|
||||
if (self->stack != NULL)
|
||||
{
|
||||
GtkWidget *visible_child = adw_view_stack_get_visible_child (self->stack);
|
||||
|
||||
if (gtk_widget_is_ancestor (GTK_WIDGET (self->flamegraph), visible_child))
|
||||
return;
|
||||
|
||||
g_object_get_property (G_OBJECT (self->callgraph_view), "utility-summary", value);
|
||||
}
|
||||
break;
|
||||
|
||||
case PROP_UTILITY_TRACEABLES:
|
||||
if (self->stack != NULL)
|
||||
{
|
||||
GtkWidget *visible_child = adw_view_stack_get_visible_child (self->stack);
|
||||
|
||||
if (gtk_widget_is_ancestor (GTK_WIDGET (self->flamegraph), visible_child))
|
||||
g_object_get_property (G_OBJECT (self->flamegraph), "utility-traceables", value);
|
||||
else
|
||||
g_object_get_property (G_OBJECT (self->callgraph_view), "utility-traceables", value);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_samples_section_class_init (SysprofSamplesSectionClass *klass)
|
||||
{
|
||||
@ -71,10 +132,26 @@ sysprof_samples_section_class_init (SysprofSamplesSectionClass *klass)
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||
|
||||
object_class->dispose = sysprof_samples_section_dispose;
|
||||
object_class->get_property = sysprof_samples_section_get_property;
|
||||
|
||||
properties [PROP_UTILITY_SUMMARY] =
|
||||
g_param_spec_object ("utility-summary", NULL, NULL,
|
||||
G_TYPE_LIST_MODEL,
|
||||
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
properties [PROP_UTILITY_TRACEABLES] =
|
||||
g_param_spec_object ("utility-traceables", NULL, NULL,
|
||||
G_TYPE_LIST_MODEL,
|
||||
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||
|
||||
g_object_class_install_properties (object_class, N_PROPS, properties);
|
||||
|
||||
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/sysprof-samples-section.ui");
|
||||
gtk_widget_class_bind_template_child (widget_class, SysprofSamplesSection, callgraph_view);
|
||||
gtk_widget_class_bind_template_child (widget_class, SysprofSamplesSection, flamegraph);
|
||||
gtk_widget_class_bind_template_child (widget_class, SysprofSamplesSection, stack);
|
||||
gtk_widget_class_bind_template_callback (widget_class, format_number);
|
||||
gtk_widget_class_bind_template_callback (widget_class, notify_utility_traceables_cb);
|
||||
|
||||
g_type_ensure (SYSPROF_TYPE_CATEGORY_SUMMARY);
|
||||
g_type_ensure (SYSPROF_TYPE_CHART);
|
||||
@ -95,4 +172,7 @@ static void
|
||||
sysprof_samples_section_init (SysprofSamplesSection *self)
|
||||
{
|
||||
gtk_widget_init_template (GTK_WIDGET (self));
|
||||
|
||||
g_assert (self->flamegraph);
|
||||
g_assert (self->callgraph_view);
|
||||
}
|
||||
|
||||
@ -82,12 +82,14 @@
|
||||
<child>
|
||||
<object class="AdwViewStack" id="stack">
|
||||
<property name="vexpand">true</property>
|
||||
<signal name="notify::visible-child" handler="notify_utility_traceables_cb" swapped="true"/>
|
||||
<child>
|
||||
<object class="AdwViewStackPage">
|
||||
<property name="icon-name">threads-symbolic</property>
|
||||
<property name="title" translatable="yes">Callgraph</property>
|
||||
<property name="child">
|
||||
<object class="SysprofWeightedCallgraphView" id="callgraph_view">
|
||||
<signal name="notify::utility-traceables" handler="notify_utility_traceables_cb" swapped="true"/>
|
||||
<property name="vexpand">true</property>
|
||||
<binding name="include-threads">
|
||||
<lookup name="include-threads" type="SysprofSession">
|
||||
@ -172,7 +174,8 @@
|
||||
<object class="GtkScrolledWindow">
|
||||
<property name="hscrollbar-policy">never</property>
|
||||
<property name="child">
|
||||
<object class="SysprofFlameGraph">
|
||||
<object class="SysprofFlameGraph" id="flamegraph">
|
||||
<signal name="notify::utility-traceables" handler="notify_utility_traceables_cb" swapped="true"/>
|
||||
<binding name="callgraph">
|
||||
<lookup name="callgraph">callgraph_view</lookup>
|
||||
</binding>
|
||||
@ -216,7 +219,7 @@
|
||||
<lookup name="session">SysprofSamplesSection</lookup>
|
||||
</binding>
|
||||
<binding name="traceables">
|
||||
<lookup name="utility-traceables">callgraph_view</lookup>
|
||||
<lookup name="utility-traceables">SysprofSamplesSection</lookup>
|
||||
</binding>
|
||||
</object>
|
||||
</child>
|
||||
@ -232,7 +235,7 @@
|
||||
<property name="model">
|
||||
<object class="GtkNoSelection">
|
||||
<binding name="model">
|
||||
<lookup name="utility-summary">callgraph_view</lookup>
|
||||
<lookup name="utility-summary">SysprofSamplesSection</lookup>
|
||||
</binding>
|
||||
</object>
|
||||
</property>
|
||||
|
||||
Reference in New Issue
Block a user