libsysprof-ui: allow switching to temporary allocations

This commit is contained in:
Christian Hergert
2020-02-18 19:20:38 -08:00
parent e3cb30e4ee
commit 16e35c1fa6
2 changed files with 295 additions and 157 deletions

View File

@ -59,9 +59,14 @@ typedef struct
GtkTreeViewColumn *function_size_column;
GtkCellRendererText *function_size_cell;
GtkStack *stack;
GtkRadioButton *summary;
GtkRadioButton *all_allocs;
GtkRadioButton *temp_allocs;
GQueue *history;
SysprofMemprofMode mode;
guint profile_size;
guint loading;
} SysprofMemprofPagePrivate;
@ -795,6 +800,7 @@ sysprof_memprof_page_generate_cb (GObject *object,
{
SysprofProfile *profile = (SysprofProfile *)object;
SysprofMemprofPage *self;
SysprofMemprofPagePrivate *priv;
g_autoptr(GTask) task = user_data;
g_autoptr(GError) error = NULL;
@ -803,11 +809,14 @@ sysprof_memprof_page_generate_cb (GObject *object,
g_assert (G_IS_TASK (task));
self = g_task_get_source_object (task);
priv = sysprof_memprof_page_get_instance_private (self);
if (!sysprof_profile_generate_finish (profile, result, &error))
g_task_return_error (task, g_steal_pointer (&error));
else
sysprof_memprof_page_set_profile (self, SYSPROF_MEMPROF_PROFILE (profile));
gtk_stack_set_visible_child_name (priv->stack, "callgraph");
}
static void
@ -820,6 +829,7 @@ sysprof_memprof_page_load_async (SysprofPage *page,
gpointer user_data)
{
SysprofMemprofPage *self = (SysprofMemprofPage *)page;
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
g_autoptr(SysprofCaptureReader) copy = NULL;
g_autoptr(SysprofProfile) profile = NULL;
g_autoptr(GTask) task = NULL;
@ -829,12 +839,15 @@ sysprof_memprof_page_load_async (SysprofPage *page,
g_assert (SYSPROF_IS_SELECTION (selection));
g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
gtk_stack_set_visible_child_name (priv->stack, "loading");
task = g_task_new (self, cancellable, callback, user_data);
g_task_set_source_tag (task, sysprof_memprof_page_load_async);
copy = sysprof_capture_reader_copy (reader);
profile = sysprof_memprof_profile_new_with_selection (selection);
sysprof_memprof_profile_set_mode (SYSPROF_MEMPROF_PROFILE (profile), priv->mode);
sysprof_profile_set_reader (profile, reader);
sysprof_profile_generate (profile,
cancellable,
@ -853,6 +866,51 @@ sysprof_memprof_page_load_finish (SysprofPage *page,
return g_task_propagate_boolean (G_TASK (result), error);
}
static void
do_summary (SysprofMemprofPage *self)
{
#if 0
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
gtk_stack_set_visible_child_name (priv->stack, "summary");
#endif
}
static void
do_allocs (SysprofMemprofPage *self,
SysprofMemprofMode mode)
{
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
priv->mode = mode;
sysprof_page_reload (SYSPROF_PAGE (self));
}
static void
mode_notify_active (SysprofMemprofPage *self,
GParamSpec *pspec,
GtkRadioButton *button)
{
SysprofMemprofPagePrivate *priv = sysprof_memprof_page_get_instance_private (self);
g_assert (SYSPROF_IS_MEMPROF_PAGE (self));
g_assert (GTK_IS_RADIO_BUTTON (button));
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)))
{
if (button == priv->summary)
do_summary (self);
else if (button == priv->all_allocs)
do_allocs (self, SYSPROF_MEMPROF_MODE_ALL_ALLOCS);
else if (button == priv->temp_allocs)
do_allocs (self, SYSPROF_MEMPROF_MODE_TEMP_ALLOCS);
}
}
static void
sysprof_memprof_page_finalize (GObject *object)
{
@ -947,6 +1005,9 @@ sysprof_memprof_page_class_init (SysprofMemprofPageClass *klass)
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, descendants_view);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, descendants_name_column);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, stack);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, all_allocs);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, temp_allocs);
gtk_widget_class_bind_template_child_private (widget_class, SysprofMemprofPage, summary);
bindings = gtk_binding_set_by_class (klass);
gtk_binding_entry_add_signal (bindings, GDK_KEY_Left, GDK_MOD1_MASK, "go-previous", 0);
@ -963,11 +1024,28 @@ sysprof_memprof_page_init (SysprofMemprofPage *self)
GtkCellRenderer *cell;
priv->history = g_queue_new ();
priv->mode = SYSPROF_MEMPROF_MODE_ALL_ALLOCS;
gtk_widget_init_template (GTK_WIDGET (self));
gtk_stack_set_visible_child_name (priv->stack, "empty-state");
g_signal_connect_object (priv->all_allocs,
"notify::active",
G_CALLBACK (mode_notify_active),
self,
G_CONNECT_SWAPPED);
g_signal_connect_object (priv->temp_allocs,
"notify::active",
G_CALLBACK (mode_notify_active),
self,
G_CONNECT_SWAPPED);
g_signal_connect_object (priv->summary,
"notify::active",
G_CALLBACK (mode_notify_active),
self,
G_CONNECT_SWAPPED);
selection = gtk_tree_view_get_selection (priv->functions_view);
g_signal_connect_object (selection,

View File

@ -4,193 +4,253 @@
<object class="GtkStack" id="stack">
<property name="visible">true</property>
<child>
<object class="GtkPaned">
<property name="orientation">horizontal</property>
<property name="position">450</property>
<object class="GtkBox">
<property name="orientation">vertical</property>
<property name="visible">true</property>
<child>
<object class="GtkPaned">
<property name="orientation">vertical</property>
<object class="GtkBox">
<property name="orientation">horizontal</property>
<property name="visible">true</property>
<child>
<object class="GtkScrolledWindow">
<child type="center">
<object class="GtkBox">
<property name="margin-top">6</property>
<property name="margin-bottom">6</property>
<property name="orientation">horizontal</property>
<property name="homogeneous">true</property>
<property name="visible">true</property>
<style>
<class name="linked"/>
</style>
<child>
<object class="GtkTreeView" id="functions_view">
<property name="fixed-height-mode">true</property>
<object class="GtkRadioButton" id="summary">
<property name="label" translatable="yes">Summary</property>
<property name="draw-indicator">false</property>
<property name="visible">false</property>
<property name="active">false</property>
</object>
</child>
<child>
<object class="GtkRadioButton" id="all_allocs">
<property name="label" translatable="yes">All Allocations</property>
<property name="draw-indicator">false</property>
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="function_name_column">
<property name="expand">true</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Functions</property>
<child>
<object class="GtkCellRendererText">
<property name="ellipsize">middle</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="function_self_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="function_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
</child>
<property name="group">summary</property>
<property name="active">true</property>
</object>
</child>
<child>
<object class="GtkRadioButton" id="temp_allocs">
<property name="label" translatable="yes">Temporary Allocations</property>
<property name="draw-indicator">false</property>
<property name="visible">true</property>
<property name="active">false</property>
<property name="group">summary</property>
</object>
</child>
</object>
<packing>
<property name="resize">true</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">true</property>
<child>
<object class="GtkTreeView" id="callers_view">
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="callers_name_column">
<property name="expand">true</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Callers</property>
<child>
<object class="GtkCellRendererText">
<property name="ellipsize">middle</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="callers_self_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="callers_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="resize">true</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow">
<object class="GtkSeparator">
<property name="orientation">horizontal</property>
<property name="visible">true</property>
</object>
</child>
<child>
<object class="GtkPaned">
<property name="orientation">horizontal</property>
<property name="position">450</property>
<property name="expand">true</property>
<property name="visible">true</property>
<child>
<object class="GtkTreeView" id="descendants_view">
<object class="GtkPaned">
<property name="orientation">vertical</property>
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="descendants_name_column">
<property name="expand">true</property>
<property name="sizing">autosize</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Descendants</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="descendants_self_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<object class="GtkScrolledWindow">
<property name="visible">true</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
<object class="GtkTreeView" id="functions_view">
<property name="fixed-height-mode">true</property>
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="function_name_column">
<property name="expand">true</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Functions</property>
<child>
<object class="GtkCellRendererText">
<property name="ellipsize">middle</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="function_self_column">
<property name="visible">false</property>
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="function_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
<packing>
<property name="resize">true</property>
</packing>
</child>
<child>
<object class="GtkTreeViewColumn" id="descendants_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<object class="GtkScrolledWindow">
<property name="visible">true</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
<object class="GtkTreeView" id="callers_view">
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="callers_name_column">
<property name="expand">true</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Callers</property>
<child>
<object class="GtkCellRendererText">
<property name="ellipsize">middle</property>
</object>
<attributes>
<attribute name="text">0</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="callers_self_column">
<property name="visible">false</property>
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="callers_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
</child>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
<packing>
<property name="resize">true</property>
</packing>
</child>
</object>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">true</property>
<child>
<object class="GtkTreeViewColumn" id="function_size_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">Size</property>
<object class="GtkTreeView" id="descendants_view">
<property name="visible">true</property>
<child>
<object class="GtkCellRendererText" id="function_size_cell">
<property name="xalign">1.0</property>
<object class="GtkTreeViewColumn" id="descendants_name_column">
<property name="expand">true</property>
<property name="sizing">autosize</property>
<property name="sort-column-id">0</property>
<property name="title" translatable="yes">Descendants</property>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="descendants_self_column">
<property name="visible">false</property>
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">1</property>
<property name="title" translatable="yes">Self</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">1</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="descendants_total_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="sort-column-id">2</property>
<property name="title" translatable="yes">Total</property>
<child>
<object class="SysprofCellRendererPercent">
<property name="width">65</property>
</object>
<attributes>
<attribute name="percent">2</attribute>
</attributes>
</child>
</object>
</child>
<child>
<object class="GtkTreeViewColumn" id="function_size_column">
<property name="expand">false</property>
<property name="sizing">fixed</property>
<property name="title" translatable="yes">Size</property>
<child>
<object class="GtkCellRendererText" id="function_size_cell">
<property name="xalign">1.0</property>
</object>
</child>
</object>
</child>
</object>