diff --git a/src/libsysprof-ui/sysprof-callgraph-view.c b/src/libsysprof-ui/sysprof-callgraph-view.c index 87876b5c..07ea0d09 100644 --- a/src/libsysprof-ui/sysprof-callgraph-view.c +++ b/src/libsysprof-ui/sysprof-callgraph-view.c @@ -60,6 +60,7 @@ typedef struct GQueue *history; guint profile_size; + guint loading; } SysprofCallgraphViewPrivate; G_DEFINE_TYPE_WITH_PRIVATE (SysprofCallgraphView, sysprof_callgraph_view, GTK_TYPE_BIN) @@ -1203,3 +1204,22 @@ sysprof_callgraph_view_get_n_functions (SysprofCallgraphView *self) return ret; } + +void +_sysprof_callgraph_view_set_loading (SysprofCallgraphView *self, + gboolean loading) +{ + SysprofCallgraphViewPrivate *priv = sysprof_callgraph_view_get_instance_private (self); + + g_return_if_fail (SYSPROF_IS_CALLGRAPH_VIEW (self)); + + if (loading) + priv->loading++; + else + priv->loading--; + + if (priv->loading) + gtk_stack_set_visible_child_name (priv->stack, "loading"); + else + gtk_stack_set_visible_child_name (priv->stack, "callgraph"); +} diff --git a/src/libsysprof-ui/sysprof-capture-view.c b/src/libsysprof-ui/sysprof-capture-view.c index a7462a35..70332ffd 100644 --- a/src/libsysprof-ui/sysprof-capture-view.c +++ b/src/libsysprof-ui/sysprof-capture-view.c @@ -254,6 +254,7 @@ sysprof_capture_view_generate_callgraph_async (SysprofCaptureView *self, GAsyncReadyCallback callback, gpointer user_data) { + SysprofCaptureViewPrivate *priv = sysprof_capture_view_get_instance_private (self); g_autoptr(SysprofCaptureReader) copy = NULL; g_autoptr(SysprofProfile) callgraph = NULL; g_autoptr(GTask) task = NULL; @@ -267,6 +268,8 @@ sysprof_capture_view_generate_callgraph_async (SysprofCaptureView *self, g_task_set_source_tag (task, sysprof_capture_view_generate_callgraph_async); sysprof_capture_view_monitor_task (self, task); + _sysprof_callgraph_view_set_loading (priv->callgraph_view, TRUE); + copy = sysprof_capture_reader_copy (reader); callgraph = sysprof_callgraph_profile_new_with_selection (selection); sysprof_profile_set_reader (callgraph, copy); @@ -281,9 +284,13 @@ sysprof_capture_view_generate_callgraph_finish (SysprofCaptureView *self, GAsyncResult *result, GError **error) { + SysprofCaptureViewPrivate *priv = sysprof_capture_view_get_instance_private (self); + g_assert (SYSPROF_IS_CAPTURE_VIEW (self)); g_assert (G_IS_TASK (result)); + _sysprof_callgraph_view_set_loading (priv->callgraph_view, FALSE); + return g_task_propagate_boolean (G_TASK (result), error); } diff --git a/src/libsysprof-ui/sysprof-ui-private.h b/src/libsysprof-ui/sysprof-ui-private.h index f4eed566..38956839 100644 --- a/src/libsysprof-ui/sysprof-ui-private.h +++ b/src/libsysprof-ui/sysprof-ui-private.h @@ -50,6 +50,8 @@ void _sysprof_rounded_rectangle (cairo_t gint y_radius); gchar *_sysprof_format_duration (gint64 duration); void _sysprof_callgraph_view_set_failed (SysprofCallgraphView *self); +void _sysprof_callgraph_view_set_loading (SysprofCallgraphView *self, + gboolean loading); void _sysprof_display_focus_record (SysprofDisplay *self); void _sysprof_profiler_assistant_focus_record (SysprofProfilerAssistant *self); diff --git a/src/libsysprof-ui/ui/sysprof-callgraph-view.ui b/src/libsysprof-ui/ui/sysprof-callgraph-view.ui index 848c2a0e..e1939e07 100644 --- a/src/libsysprof-ui/ui/sysprof-callgraph-view.ui +++ b/src/libsysprof-ui/ui/sysprof-callgraph-view.ui @@ -207,6 +207,17 @@ callgraph + + + content-loading-symbolic + Generating Callgraph + Sysprof is busy creating the selected callgraph. + true + + + loading + + computer-fail-symbolic