mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: add setup hooks for symbolizers
This gives the symbolizer access to the loader so we can propagate tasks back to it.
This commit is contained in:
@ -27,6 +27,7 @@ struct _SysprofMultiSymbolizer
|
||||
{
|
||||
SysprofSymbolizer parent_instance;
|
||||
GPtrArray *symbolizers;
|
||||
guint frozen : 1;
|
||||
};
|
||||
|
||||
struct _SysprofMultiSymbolizerClass
|
||||
@ -138,6 +139,25 @@ sysprof_multi_symbolizer_symbolize (SysprofSymbolizer *symbolizer,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_multi_symbolizer_setup (SysprofSymbolizer *symbolizer,
|
||||
SysprofDocumentLoader *loader)
|
||||
{
|
||||
SysprofMultiSymbolizer *self = (SysprofMultiSymbolizer *)symbolizer;
|
||||
|
||||
g_assert (SYSPROF_IS_MULTI_SYMBOLIZER (self));
|
||||
g_assert (SYSPROF_IS_DOCUMENT_LOADER (loader));
|
||||
|
||||
self->frozen = TRUE;
|
||||
|
||||
for (guint i = 0; i < self->symbolizers->len; i++)
|
||||
{
|
||||
SysprofSymbolizer *child = g_ptr_array_index (self->symbolizers, i);
|
||||
|
||||
_sysprof_symbolizer_setup (child, loader);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_multi_symbolizer_finalize (GObject *object)
|
||||
{
|
||||
@ -159,6 +179,7 @@ sysprof_multi_symbolizer_class_init (SysprofMultiSymbolizerClass *klass)
|
||||
symbolizer_class->prepare_async = sysprof_multi_symbolizer_prepare_async;
|
||||
symbolizer_class->prepare_finish = sysprof_multi_symbolizer_prepare_finish;
|
||||
symbolizer_class->symbolize = sysprof_multi_symbolizer_symbolize;
|
||||
symbolizer_class->setup = sysprof_multi_symbolizer_setup;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -188,6 +209,7 @@ sysprof_multi_symbolizer_take (SysprofMultiSymbolizer *self,
|
||||
g_return_if_fail (SYSPROF_IS_MULTI_SYMBOLIZER (self));
|
||||
g_return_if_fail (SYSPROF_IS_SYMBOLIZER (symbolizer));
|
||||
g_return_if_fail ((gpointer)self != (gpointer)symbolizer);
|
||||
g_return_if_fail (self->frozen == FALSE);
|
||||
|
||||
g_ptr_array_add (self->symbolizers, symbolizer);
|
||||
}
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
|
||||
#include "sysprof-address-layout-private.h"
|
||||
#include "sysprof-document.h"
|
||||
#include "sysprof-document-loader.h"
|
||||
#include "sysprof-mount-namespace-private.h"
|
||||
#include "sysprof-process-info-private.h"
|
||||
#include "sysprof-strings-private.h"
|
||||
@ -41,6 +42,8 @@ struct _SysprofSymbolizerClass
|
||||
{
|
||||
GObjectClass parent_class;
|
||||
|
||||
void (*setup) (SysprofSymbolizer *self,
|
||||
SysprofDocumentLoader *loader);
|
||||
void (*prepare_async) (SysprofSymbolizer *self,
|
||||
SysprofDocument *document,
|
||||
GCancellable *cancellable,
|
||||
@ -56,7 +59,8 @@ struct _SysprofSymbolizerClass
|
||||
SysprofAddress address);
|
||||
};
|
||||
|
||||
|
||||
void _sysprof_symbolizer_setup (SysprofSymbolizer *self,
|
||||
SysprofDocumentLoader *loader);
|
||||
void _sysprof_symbolizer_prepare_async (SysprofSymbolizer *self,
|
||||
SysprofDocument *document,
|
||||
GCancellable *cancellable,
|
||||
|
||||
@ -99,3 +99,14 @@ _sysprof_symbolizer_symbolize (SysprofSymbolizer *self,
|
||||
{
|
||||
return SYSPROF_SYMBOLIZER_GET_CLASS (self)->symbolize (self, strings, process_info, context, address);
|
||||
}
|
||||
|
||||
void
|
||||
_sysprof_symbolizer_setup (SysprofSymbolizer *self,
|
||||
SysprofDocumentLoader *loader)
|
||||
{
|
||||
g_return_if_fail (SYSPROF_IS_SYMBOLIZER (self));
|
||||
g_return_if_fail (SYSPROF_IS_DOCUMENT_LOADER (loader));
|
||||
|
||||
if (SYSPROF_SYMBOLIZER_GET_CLASS (self)->setup)
|
||||
SYSPROF_SYMBOLIZER_GET_CLASS (self)->setup (self, loader);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user