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
+
+
+
+ loading
+
+