libsysprof-gtk: create depth chart for samples

This commit is contained in:
Christian Hergert
2023-06-20 11:50:05 -07:00
parent 0cdb97973a
commit 86f5fc6338

View File

@ -22,6 +22,7 @@
#include <adwaita.h>
#include <gtk/gtk.h>
#include <sysprof-analyze.h>
#include <sysprof-gtk.h>
@ -39,11 +40,15 @@ main (int argc,
g_autoptr(SysprofDocumentLoader) loader = NULL;
g_autoptr(SysprofDocument) document = NULL;
g_autoptr(SysprofSession) session = NULL;
g_autoptr(SysprofXYSeries) samples_series = NULL;
g_autoptr(GListModel) samples = NULL;
g_autoptr(GError) error = NULL;
const SysprofTimeSpan *time_span;
GtkWidget *chart;
GtkWidget *layer;
GtkWindow *window;
GtkWidget *box;
guint n_samples;
sysprof_clock_init ();
@ -74,6 +79,20 @@ main (int argc,
g_error ("Failed to load document: %s", error->message);
session = sysprof_session_new (document);
time_span = sysprof_document_get_time_span (document);
/* Generate an XY Series using the stacktraces depth for Y */
samples = sysprof_document_list_samples (document);
n_samples = g_list_model_get_n_items (samples);
samples_series = sysprof_xy_series_new (samples, time_span->begin_nsec, 0, time_span->end_nsec, 128);
for (guint i = 0; i < n_samples; i++)
{
g_autoptr(SysprofDocumentTraceable) sample = g_list_model_get_item (samples, i);
gint64 time = sysprof_document_frame_get_time (SYSPROF_DOCUMENT_FRAME (sample));
guint depth = sysprof_document_traceable_get_stack_depth (sample);
sysprof_xy_series_add (samples_series, time, depth, i);
}
window = g_object_new (GTK_TYPE_WINDOW,
"default-width", 800,
@ -92,8 +111,10 @@ main (int argc,
chart = g_object_new (SYSPROF_TYPE_CHART,
"session", session,
"title", "Stack Traces",
"height-request", 128,
NULL);
layer = g_object_new (SYSPROF_TYPE_DEPTH_LAYER,
"series", samples_series,
NULL);
sysprof_chart_add_layer (SYSPROF_CHART (chart),
SYSPROF_CHART_LAYER (layer));