From fe4b6ee8124632fdb081f9566d60efb3ef132119 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 28 Apr 2023 12:14:17 -0700 Subject: [PATCH] libsysprof-analyze: add interface for stracetrace types Currently, this would need to be implemented by SysprofDocumentSample and SysprofDocumentAllocation. But we could potentially start allowing many types to attach a trace if we modifier the capture format to allow it. --- src/libsysprof-analyze/meson.build | 2 + src/libsysprof-analyze/sysprof-analyze.h | 1 + .../sysprof-document-traceable.c | 44 +++++++++++++++++ .../sysprof-document-traceable.h | 48 +++++++++++++++++++ 4 files changed, 95 insertions(+) create mode 100644 src/libsysprof-analyze/sysprof-document-traceable.c create mode 100644 src/libsysprof-analyze/sysprof-document-traceable.h diff --git a/src/libsysprof-analyze/meson.build b/src/libsysprof-analyze/meson.build index f41e04bb..76388006 100644 --- a/src/libsysprof-analyze/meson.build +++ b/src/libsysprof-analyze/meson.build @@ -10,6 +10,7 @@ libsysprof_analyze_public_sources = [ 'sysprof-document-mmap.c', 'sysprof-document-process.c', 'sysprof-document-sample.c', + 'sysprof-document-traceable.c', ] libsysprof_analyze_public_headers = [ @@ -25,6 +26,7 @@ libsysprof_analyze_public_headers = [ 'sysprof-document-mmap.h', 'sysprof-document-process.h', 'sysprof-document-sample.h', + 'sysprof-document-traceable.h', ] libsysprof_analyze_deps = [ diff --git a/src/libsysprof-analyze/sysprof-analyze.h b/src/libsysprof-analyze/sysprof-analyze.h index 47dc4193..ed3f9bd3 100644 --- a/src/libsysprof-analyze/sysprof-analyze.h +++ b/src/libsysprof-analyze/sysprof-analyze.h @@ -36,6 +36,7 @@ G_BEGIN_DECLS # include "sysprof-document-mmap.h" # include "sysprof-document-process.h" # include "sysprof-document-sample.h" +# include "sysprof-document-traceable.h" #undef SYSPROF_ANALYZE_INSIDE G_END_DECLS diff --git a/src/libsysprof-analyze/sysprof-document-traceable.c b/src/libsysprof-analyze/sysprof-document-traceable.c new file mode 100644 index 00000000..2b6442c7 --- /dev/null +++ b/src/libsysprof-analyze/sysprof-document-traceable.c @@ -0,0 +1,44 @@ +/* + * sysprof-document-traceable.c + * + * Copyright 2023 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#include "config.h" + +#include "sysprof-document-traceable.h" + +G_DEFINE_INTERFACE (SysprofDocumentTraceable, sysprof_document_traceable, SYSPROF_TYPE_DOCUMENT_FRAME) + +static void +sysprof_document_traceable_default_init (SysprofDocumentTraceableInterface *iface) +{ +} + +guint +sysprof_document_traceable_get_stack_depth (SysprofDocumentTraceable *self) +{ + return SYSPROF_DOCUMENT_TRACEABLE_GET_IFACE (self)->get_stack_depth (self); +} + +guint64 +sysprof_document_traceable_get_stack_address (SysprofDocumentTraceable *self, + guint position) +{ + return SYSPROF_DOCUMENT_TRACEABLE_GET_IFACE (self)->get_stack_address (self, position); +} diff --git a/src/libsysprof-analyze/sysprof-document-traceable.h b/src/libsysprof-analyze/sysprof-document-traceable.h new file mode 100644 index 00000000..ad77117e --- /dev/null +++ b/src/libsysprof-analyze/sysprof-document-traceable.h @@ -0,0 +1,48 @@ +/* + * sysprof-document-traceable.h + * + * Copyright 2023 Christian Hergert + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +#pragma once + +#include "sysprof-document-frame.h" + +G_BEGIN_DECLS + +#define SYSPROF_TYPE_DOCUMENT_TRACEABLE (sysprof_document_traceable_get_type ()) + +SYSPROF_AVAILABLE_IN_ALL +G_DECLARE_INTERFACE (SysprofDocumentTraceable, sysprof_document_traceable, SYSPROF, DOCUMENT_TRACEABLE, SysprofDocumentFrame) + +struct _SysprofDocumentTraceableInterface +{ + GTypeInterface parent; + + guint (*get_stack_depth) (SysprofDocumentTraceable *self); + guint64 (*get_stack_address) (SysprofDocumentTraceable *self, + guint position); +}; + +SYSPROF_AVAILABLE_IN_ALL +guint sysprof_document_traceable_get_stack_depth (SysprofDocumentTraceable *self); +SYSPROF_AVAILABLE_IN_ALL +guint64 sysprof_document_traceable_get_stack_address (SysprofDocumentTraceable *self, + guint position); + +G_END_DECLS