mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 08:00:53 +00:00
libsysprof-gtk: show stack traces when traceable is selected
This commit is contained in:
@ -38,6 +38,7 @@ struct _SysprofCallgraphView
|
|||||||
GtkColumnView *descendants_column_view;
|
GtkColumnView *descendants_column_view;
|
||||||
GtkColumnView *functions_column_view;
|
GtkColumnView *functions_column_view;
|
||||||
GtkColumnView *traceables_column_view;
|
GtkColumnView *traceables_column_view;
|
||||||
|
GtkColumnView *traceable_column_view;
|
||||||
GtkCustomSorter *descendants_name_sorter;
|
GtkCustomSorter *descendants_name_sorter;
|
||||||
GtkCustomSorter *functions_name_sorter;
|
GtkCustomSorter *functions_name_sorter;
|
||||||
GtkScrolledWindow *scrolled_window;
|
GtkScrolledWindow *scrolled_window;
|
||||||
|
|||||||
@ -60,6 +60,29 @@ callers_selection_changed_cb (SysprofCallgraphView *self,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
traceables_selection_changed_cb (SysprofCallgraphView *self,
|
||||||
|
guint position,
|
||||||
|
guint n_items,
|
||||||
|
GtkSingleSelection *single)
|
||||||
|
{
|
||||||
|
GObject *object;
|
||||||
|
|
||||||
|
g_assert (SYSPROF_IS_CALLGRAPH_VIEW (self));
|
||||||
|
g_assert (GTK_IS_SINGLE_SELECTION (single));
|
||||||
|
|
||||||
|
gtk_column_view_set_model (self->traceable_column_view, NULL);
|
||||||
|
|
||||||
|
if ((object = gtk_single_selection_get_selected_item (single)))
|
||||||
|
{
|
||||||
|
SysprofDocumentTraceable *traceable = SYSPROF_DOCUMENT_TRACEABLE (object);
|
||||||
|
g_autoptr(GListModel) model = sysprof_document_list_symbols_in_traceable (self->document, traceable);
|
||||||
|
g_autoptr(GtkNoSelection) no = gtk_no_selection_new (g_object_ref (model));
|
||||||
|
|
||||||
|
gtk_column_view_set_model (self->traceable_column_view, GTK_SELECTION_MODEL (no));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_callgraph_view_list_traceables_cb (GObject *object,
|
sysprof_callgraph_view_list_traceables_cb (GObject *object,
|
||||||
GAsyncResult *result,
|
GAsyncResult *result,
|
||||||
@ -77,7 +100,14 @@ sysprof_callgraph_view_list_traceables_cb (GObject *object,
|
|||||||
if ((model = sysprof_callgraph_frame_list_traceables_finish (frame, result, &error)))
|
if ((model = sysprof_callgraph_frame_list_traceables_finish (frame, result, &error)))
|
||||||
{
|
{
|
||||||
g_autoptr(GtkSingleSelection) single = gtk_single_selection_new (g_object_ref (model));
|
g_autoptr(GtkSingleSelection) single = gtk_single_selection_new (g_object_ref (model));
|
||||||
|
|
||||||
|
g_signal_connect_object (single,
|
||||||
|
"selection-changed",
|
||||||
|
G_CALLBACK (traceables_selection_changed_cb),
|
||||||
|
self,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
gtk_column_view_set_model (self->traceables_column_view, GTK_SELECTION_MODEL (single));
|
gtk_column_view_set_model (self->traceables_column_view, GTK_SELECTION_MODEL (single));
|
||||||
|
traceables_selection_changed_cb (self, 0, 0, single);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -301,6 +331,7 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass)
|
|||||||
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_name_sorter);
|
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_name_sorter);
|
||||||
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, paned);
|
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, paned);
|
||||||
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, scrolled_window);
|
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, scrolled_window);
|
||||||
|
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, traceable_column_view);
|
||||||
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, traceables_column_view);
|
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, traceables_column_view);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, sysprof_callgraph_view_key_pressed_cb);
|
gtk_widget_class_bind_template_callback (widget_class, sysprof_callgraph_view_key_pressed_cb);
|
||||||
gtk_widget_class_bind_template_callback (widget_class, format_time_offset);
|
gtk_widget_class_bind_template_callback (widget_class, format_time_offset);
|
||||||
@ -456,6 +487,9 @@ sysprof_callgraph_view_queue_reload (SysprofCallgraphView *self)
|
|||||||
|
|
||||||
gtk_column_view_set_model (self->descendants_column_view, NULL);
|
gtk_column_view_set_model (self->descendants_column_view, NULL);
|
||||||
gtk_column_view_set_model (self->functions_column_view, NULL);
|
gtk_column_view_set_model (self->functions_column_view, NULL);
|
||||||
|
gtk_column_view_set_model (self->callers_column_view, NULL);
|
||||||
|
gtk_column_view_set_model (self->traceables_column_view, NULL);
|
||||||
|
gtk_column_view_set_model (self->traceable_column_view, NULL);
|
||||||
|
|
||||||
g_clear_handle_id (&self->reload_source, g_source_remove);
|
g_clear_handle_id (&self->reload_source, g_source_remove);
|
||||||
g_cancellable_cancel (self->cancellable);
|
g_cancellable_cancel (self->cancellable);
|
||||||
|
|||||||
@ -197,44 +197,14 @@
|
|||||||
<property name="end-child">
|
<property name="end-child">
|
||||||
<object class="GtkPaned">
|
<object class="GtkPaned">
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="start-child">
|
<property name="end-child">
|
||||||
<object class="GtkScrolledWindow">
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="vexpand">false</property>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColumnView" id="traceables_column_view">
|
<object class="GtkColumnView" id="traceables_column_view">
|
||||||
<property name="width-request">200</property>
|
|
||||||
<style>
|
<style>
|
||||||
<class name="data-table"/>
|
<class name="data-table"/>
|
||||||
</style>
|
</style>
|
||||||
<child>
|
|
||||||
<object class="GtkColumnViewColumn" id="traceables_pid_column">
|
|
||||||
<property name="title" translatable="yes">PID</property>
|
|
||||||
<property name="factory">
|
|
||||||
<object class="GtkBuilderListItemFactory">
|
|
||||||
<property name="bytes"><![CDATA[
|
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<interface>
|
|
||||||
<template class="GtkListItem">
|
|
||||||
<property name="child">
|
|
||||||
<object class="GtkLabel">
|
|
||||||
<property name="xalign">1.</property>
|
|
||||||
<attributes>
|
|
||||||
<attribute name="font-features" value="'tnum'"/>
|
|
||||||
</attributes>
|
|
||||||
<binding name="label">
|
|
||||||
<lookup name="pid" type="SysprofDocumentFrame">
|
|
||||||
<lookup name="item">GtkListItem</lookup>
|
|
||||||
</lookup>
|
|
||||||
</binding>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</template>
|
|
||||||
</interface>
|
|
||||||
]]>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</property>
|
|
||||||
</object>
|
|
||||||
</child>
|
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkColumnViewColumn" id="traceables_time_column">
|
<object class="GtkColumnViewColumn" id="traceables_time_column">
|
||||||
<property name="title" translatable="yes">Time</property>
|
<property name="title" translatable="yes">Time</property>
|
||||||
@ -259,6 +229,105 @@
|
|||||||
</property>
|
</property>
|
||||||
</template>
|
</template>
|
||||||
</interface>
|
</interface>
|
||||||
|
]]>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkColumnViewColumn" id="traceables_pid_column">
|
||||||
|
<property name="title" translatable="yes">PID</property>
|
||||||
|
<property name="expand">true</property>
|
||||||
|
<property name="factory">
|
||||||
|
<object class="GtkBuilderListItemFactory">
|
||||||
|
<property name="bytes"><![CDATA[
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<template class="GtkListItem">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="font-features" value="'tnum'"/>
|
||||||
|
</attributes>
|
||||||
|
<binding name="label">
|
||||||
|
<lookup name="pid" type="SysprofDocumentFrame">
|
||||||
|
<lookup name="item">GtkListItem</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</template>
|
||||||
|
</interface>
|
||||||
|
]]>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
<property name="start-child">
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="vexpand">true</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkColumnView" id="traceable_column_view">
|
||||||
|
<style>
|
||||||
|
<class name="data-table"/>
|
||||||
|
</style>
|
||||||
|
<child>
|
||||||
|
<object class="GtkColumnViewColumn" id="traceable_symbol_column">
|
||||||
|
<property name="title" translatable="yes">Stack Trace</property>
|
||||||
|
<property name="expand">true</property>
|
||||||
|
<property name="factory">
|
||||||
|
<object class="GtkBuilderListItemFactory">
|
||||||
|
<property name="bytes"><![CDATA[
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<template class="GtkListItem">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkInscription">
|
||||||
|
<property name="text-overflow">ellipsize-middle</property>
|
||||||
|
<binding name="text">
|
||||||
|
<lookup name="name" type="SysprofSymbol">
|
||||||
|
<lookup name="item">GtkListItem</lookup>
|
||||||
|
</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</template>
|
||||||
|
</interface>
|
||||||
|
]]>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkColumnViewColumn" id="traceable_depth_column">
|
||||||
|
<property name="title" translatable="yes">Frame</property>
|
||||||
|
<property name="factory">
|
||||||
|
<object class="GtkBuilderListItemFactory">
|
||||||
|
<property name="bytes"><![CDATA[
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<template class="GtkListItem">
|
||||||
|
<property name="child">
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="xalign">1</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="font-features" value="'tnum'"/>
|
||||||
|
</attributes>
|
||||||
|
<binding name="label">
|
||||||
|
<lookup name="position">GtkListItem</lookup>
|
||||||
|
</binding>
|
||||||
|
</object>
|
||||||
|
</property>
|
||||||
|
</template>
|
||||||
|
</interface>
|
||||||
]]>
|
]]>
|
||||||
</property>
|
</property>
|
||||||
</object>
|
</object>
|
||||||
|
|||||||
Reference in New Issue
Block a user