mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof-analyze: prepare symbolizers before decoding
This commit is contained in:
@ -51,8 +51,9 @@ sysprof_document_symbols_init (SysprofDocumentSymbols *self)
|
||||
|
||||
typedef struct _Symbolize
|
||||
{
|
||||
SysprofDocument *document;
|
||||
SysprofSymbolizer *symbolizer;
|
||||
SysprofDocument *document;
|
||||
SysprofSymbolizer *symbolizer;
|
||||
SysprofDocumentSymbols *symbols;
|
||||
} Symbolize;
|
||||
|
||||
static void
|
||||
@ -60,6 +61,7 @@ symbolize_free (Symbolize *state)
|
||||
{
|
||||
g_clear_object (&state->document);
|
||||
g_clear_object (&state->symbolizer);
|
||||
g_clear_object (&state->symbols);
|
||||
g_free (state);
|
||||
}
|
||||
|
||||
@ -71,11 +73,13 @@ sysprof_document_symbols_worker (GTask *task,
|
||||
{
|
||||
Symbolize *state = task_data;
|
||||
|
||||
g_assert (source_object == NULL);
|
||||
g_assert (G_IS_TASK (task));
|
||||
g_assert (!cancellable || G_IS_CANCELLABLE (cancellable));
|
||||
g_assert (state != NULL);
|
||||
g_assert (SYSPROF_IS_DOCUMENT (state->document));
|
||||
g_assert (SYSPROF_IS_SYMBOLIZER (state->symbolizer));
|
||||
g_assert (SYSPROF_IS_DOCUMENT_SYMBOLS (state->symbols));
|
||||
|
||||
g_task_return_new_error (task,
|
||||
G_IO_ERROR,
|
||||
@ -99,6 +103,7 @@ _sysprof_document_symbols_new (SysprofDocument *document,
|
||||
state = g_new0 (Symbolize, 1);
|
||||
state->document = g_object_ref (document);
|
||||
state->symbolizer = g_object_ref (symbolizer);
|
||||
state->symbols = g_object_new (SYSPROF_TYPE_DOCUMENT_SYMBOLS, NULL);
|
||||
|
||||
task = g_task_new (NULL, cancellable, callback, user_data);
|
||||
g_task_set_source_tag (task, _sysprof_document_symbols_new);
|
||||
|
||||
@ -27,6 +27,7 @@
|
||||
#include "sysprof-document.h"
|
||||
#include "sysprof-document-frame-private.h"
|
||||
#include "sysprof-document-symbols-private.h"
|
||||
#include "sysprof-symbolizer-private.h"
|
||||
|
||||
struct _SysprofDocument
|
||||
{
|
||||
@ -273,9 +274,9 @@ _sysprof_document_ref_string (SysprofDocument *self,
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_symbolize_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
sysprof_document_symbolize_symbols_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
g_autoptr(SysprofDocumentSymbols) symbols = NULL;
|
||||
g_autoptr(GTask) task = user_data;
|
||||
@ -290,6 +291,29 @@ sysprof_document_symbolize_cb (GObject *object,
|
||||
g_task_return_error (task, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_symbolize_prepare_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
SysprofSymbolizer *symbolizer = (SysprofSymbolizer *)object;
|
||||
g_autoptr(GTask) task = user_data;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
g_assert (SYSPROF_IS_SYMBOLIZER (symbolizer));
|
||||
g_assert (G_IS_ASYNC_RESULT (result));
|
||||
g_assert (G_IS_TASK (task));
|
||||
|
||||
if (!_sysprof_symbolizer_prepare_finish (symbolizer, result, &error))
|
||||
g_task_return_error (task, g_steal_pointer (&error));
|
||||
else
|
||||
_sysprof_document_symbols_new (g_task_get_source_object (task),
|
||||
symbolizer,
|
||||
g_task_get_cancellable (task),
|
||||
sysprof_document_symbolize_symbols_cb,
|
||||
g_object_ref (task));
|
||||
}
|
||||
|
||||
void
|
||||
sysprof_document_symbolize_async (SysprofDocument *self,
|
||||
SysprofSymbolizer *symbolizer,
|
||||
@ -307,11 +331,11 @@ sysprof_document_symbolize_async (SysprofDocument *self,
|
||||
task = g_task_new (self, cancellable, callback, user_data);
|
||||
g_task_set_source_tag (task, sysprof_document_symbolize_async);
|
||||
|
||||
_sysprof_document_symbols_new (self,
|
||||
symbolizer,
|
||||
cancellable,
|
||||
sysprof_document_symbolize_cb,
|
||||
g_steal_pointer (&task));
|
||||
_sysprof_symbolizer_prepare_async (symbolizer,
|
||||
self,
|
||||
cancellable,
|
||||
sysprof_document_symbolize_prepare_cb,
|
||||
g_steal_pointer (&task));
|
||||
}
|
||||
|
||||
SysprofDocumentSymbols *
|
||||
|
||||
Reference in New Issue
Block a user