mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-10 07:00:53 +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 "config.h"
|
||||||
|
|
||||||
|
#include <adwaita.h>
|
||||||
|
|
||||||
#include "sysprof-chart.h"
|
#include "sysprof-chart.h"
|
||||||
#include "sysprof-column-layer.h"
|
#include "sysprof-column-layer.h"
|
||||||
#include "sysprof-flame-graph.h"
|
#include "sysprof-flame-graph.h"
|
||||||
@ -41,10 +43,21 @@ struct _SysprofSamplesSection
|
|||||||
SysprofSection parent_instance;
|
SysprofSection parent_instance;
|
||||||
|
|
||||||
SysprofWeightedCallgraphView *callgraph_view;
|
SysprofWeightedCallgraphView *callgraph_view;
|
||||||
|
SysprofFlameGraph *flamegraph;
|
||||||
|
AdwViewStack *stack;
|
||||||
};
|
};
|
||||||
|
|
||||||
G_DEFINE_FINAL_TYPE (SysprofSamplesSection, sysprof_samples_section, SYSPROF_TYPE_SECTION)
|
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 *
|
static char *
|
||||||
format_number (gpointer unused,
|
format_number (gpointer unused,
|
||||||
guint number)
|
guint number)
|
||||||
@ -54,6 +67,15 @@ format_number (gpointer unused,
|
|||||||
return g_strdup_printf ("%'u", number);
|
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
|
static void
|
||||||
sysprof_samples_section_dispose (GObject *object)
|
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);
|
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
|
static void
|
||||||
sysprof_samples_section_class_init (SysprofSamplesSectionClass *klass)
|
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);
|
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
|
||||||
|
|
||||||
object_class->dispose = sysprof_samples_section_dispose;
|
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_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, 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, 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_CATEGORY_SUMMARY);
|
||||||
g_type_ensure (SYSPROF_TYPE_CHART);
|
g_type_ensure (SYSPROF_TYPE_CHART);
|
||||||
@ -95,4 +172,7 @@ static void
|
|||||||
sysprof_samples_section_init (SysprofSamplesSection *self)
|
sysprof_samples_section_init (SysprofSamplesSection *self)
|
||||||
{
|
{
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
|
|
||||||
|
g_assert (self->flamegraph);
|
||||||
|
g_assert (self->callgraph_view);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,12 +82,14 @@
|
|||||||
<child>
|
<child>
|
||||||
<object class="AdwViewStack" id="stack">
|
<object class="AdwViewStack" id="stack">
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
|
<signal name="notify::visible-child" handler="notify_utility_traceables_cb" swapped="true"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="AdwViewStackPage">
|
<object class="AdwViewStackPage">
|
||||||
<property name="icon-name">threads-symbolic</property>
|
<property name="icon-name">threads-symbolic</property>
|
||||||
<property name="title" translatable="yes">Callgraph</property>
|
<property name="title" translatable="yes">Callgraph</property>
|
||||||
<property name="child">
|
<property name="child">
|
||||||
<object class="SysprofWeightedCallgraphView" id="callgraph_view">
|
<object class="SysprofWeightedCallgraphView" id="callgraph_view">
|
||||||
|
<signal name="notify::utility-traceables" handler="notify_utility_traceables_cb" swapped="true"/>
|
||||||
<property name="vexpand">true</property>
|
<property name="vexpand">true</property>
|
||||||
<binding name="include-threads">
|
<binding name="include-threads">
|
||||||
<lookup name="include-threads" type="SysprofSession">
|
<lookup name="include-threads" type="SysprofSession">
|
||||||
@ -172,7 +174,8 @@
|
|||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow">
|
||||||
<property name="hscrollbar-policy">never</property>
|
<property name="hscrollbar-policy">never</property>
|
||||||
<property name="child">
|
<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">
|
<binding name="callgraph">
|
||||||
<lookup name="callgraph">callgraph_view</lookup>
|
<lookup name="callgraph">callgraph_view</lookup>
|
||||||
</binding>
|
</binding>
|
||||||
@ -216,7 +219,7 @@
|
|||||||
<lookup name="session">SysprofSamplesSection</lookup>
|
<lookup name="session">SysprofSamplesSection</lookup>
|
||||||
</binding>
|
</binding>
|
||||||
<binding name="traceables">
|
<binding name="traceables">
|
||||||
<lookup name="utility-traceables">callgraph_view</lookup>
|
<lookup name="utility-traceables">SysprofSamplesSection</lookup>
|
||||||
</binding>
|
</binding>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
@ -232,7 +235,7 @@
|
|||||||
<property name="model">
|
<property name="model">
|
||||||
<object class="GtkNoSelection">
|
<object class="GtkNoSelection">
|
||||||
<binding name="model">
|
<binding name="model">
|
||||||
<lookup name="utility-summary">callgraph_view</lookup>
|
<lookup name="utility-summary">SysprofSamplesSection</lookup>
|
||||||
</binding>
|
</binding>
|
||||||
</object>
|
</object>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
Reference in New Issue
Block a user