From 8c5b4720c0d5a87ea74c20dbae39896ca4570b56 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 28 Apr 2023 12:19:59 -0700 Subject: [PATCH] libsysprof-analyze: implement traceable for samples --- .../sysprof-document-sample.c | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/libsysprof-analyze/sysprof-document-sample.c b/src/libsysprof-analyze/sysprof-document-sample.c index 8fbbe2d4..a7c8fa23 100644 --- a/src/libsysprof-analyze/sysprof-document-sample.c +++ b/src/libsysprof-analyze/sysprof-document-sample.c @@ -21,7 +21,9 @@ #include "config.h" #include "sysprof-document-frame-private.h" + #include "sysprof-document-sample.h" +#include "sysprof-document-traceable.h" struct _SysprofDocumentSample { @@ -40,7 +42,32 @@ enum { N_PROPS }; -G_DEFINE_FINAL_TYPE (SysprofDocumentSample, sysprof_document_sample, SYSPROF_TYPE_DOCUMENT_FRAME) +static guint +sysprof_document_sample_get_stack_depth (SysprofDocumentTraceable *traceable) +{ + const SysprofCaptureSample *sample = SYSPROF_DOCUMENT_FRAME_GET (traceable, SysprofCaptureSample); + + return SYSPROF_DOCUMENT_FRAME_UINT16 (traceable, sample->n_addrs); +} + +static guint64 +sysprof_document_sample_get_stack_address (SysprofDocumentTraceable *traceable, + guint position) +{ + const SysprofCaptureSample *sample = SYSPROF_DOCUMENT_FRAME_GET (traceable, SysprofCaptureSample); + + return SYSPROF_DOCUMENT_FRAME_UINT64 (traceable, sample->addrs[position]); +} + +static void +traceable_iface_init (SysprofDocumentTraceableInterface *iface) +{ + iface->get_stack_depth = sysprof_document_sample_get_stack_depth; + iface->get_stack_address = sysprof_document_sample_get_stack_address; +} + +G_DEFINE_FINAL_TYPE_WITH_CODE (SysprofDocumentSample, sysprof_document_sample, SYSPROF_TYPE_DOCUMENT_FRAME, + G_IMPLEMENT_INTERFACE (SYSPROF_TYPE_DOCUMENT_TRACEABLE, traceable_iface_init)) static GParamSpec *properties [N_PROPS];