mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: add serialize symbols helper
This commit is contained in:
@ -22,6 +22,8 @@
|
||||
|
||||
#include <eggbitset.h>
|
||||
|
||||
#include <libdex.h>
|
||||
|
||||
#include "sysprof-document.h"
|
||||
#include "sysprof-symbolizer.h"
|
||||
#include "sysprof-symbol.h"
|
||||
@ -83,5 +85,6 @@ SysprofSymbol *_sysprof_document_thread_symbol (SysprofDocument *self,
|
||||
SysprofSymbol *_sysprof_document_kernel_symbol (SysprofDocument *self);
|
||||
GArray *_sysprof_document_get_frames (SysprofDocument *self);
|
||||
EggBitset *_sysprof_document_get_allocations (SysprofDocument *self);
|
||||
DexFuture *_sysprof_document_serialize_symbols(SysprofDocument *self);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@ -2804,3 +2804,45 @@ sysprof_document_get_busy (SysprofDocument *self)
|
||||
|
||||
return self->busy_count > 0;
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_serialize_symbols_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
SysprofDocument *document = (SysprofDocument *)object;
|
||||
g_autoptr(DexPromise) promise = user_data;
|
||||
g_autoptr(GBytes) bytes = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
g_assert (SYSPROF_IS_DOCUMENT (document));
|
||||
g_assert (G_IS_ASYNC_RESULT (result));
|
||||
g_assert (DEX_IS_PROMISE (promise));
|
||||
|
||||
if ((bytes = sysprof_document_serialize_symbols_finish (document, result, &error)))
|
||||
{
|
||||
GValue value = G_VALUE_INIT;
|
||||
|
||||
g_value_init (&value, G_TYPE_BYTES);
|
||||
g_value_take_boxed (&value, g_steal_pointer (&bytes));
|
||||
|
||||
dex_promise_resolve (promise, &value);
|
||||
}
|
||||
else
|
||||
dex_promise_reject (promise, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
DexFuture *
|
||||
_sysprof_document_serialize_symbols (SysprofDocument *document)
|
||||
{
|
||||
DexPromise *promise;
|
||||
|
||||
g_return_val_if_fail (SYSPROF_IS_DOCUMENT (document), NULL);
|
||||
|
||||
promise = dex_promise_new ();
|
||||
sysprof_document_serialize_symbols_async (document,
|
||||
NULL,
|
||||
sysprof_document_serialize_symbols_cb,
|
||||
dex_ref (promise));
|
||||
return DEX_FUTURE (promise);
|
||||
}
|
||||
|
||||
@ -28,6 +28,7 @@
|
||||
#include <sysprof.h>
|
||||
|
||||
#include "sysprof-document-loader-private.h"
|
||||
#include "sysprof-document-private.h"
|
||||
|
||||
#include "sysprof-instrument-private.h"
|
||||
#include "sysprof-recording-private.h"
|
||||
@ -50,11 +51,6 @@ G_DEFINE_FINAL_TYPE (SysprofSymbolsBundle, sysprof_symbols_bundle, SYSPROF_TYPE_
|
||||
static DexFuture *
|
||||
sysprof_symbols_bundle_augment_fiber (gpointer user_data)
|
||||
{
|
||||
const DexAsyncPairInfo serialize_info = DEX_ASYNC_PAIR_INFO_BOXED (
|
||||
sysprof_document_serialize_symbols_async,
|
||||
sysprof_document_serialize_symbols_finish,
|
||||
G_TYPE_BYTES);
|
||||
|
||||
g_autoptr(SysprofDocumentLoader) loader = NULL;
|
||||
g_autoptr(SysprofSymbolizer) elf = NULL;
|
||||
g_autoptr(SysprofDocument) document = NULL;
|
||||
@ -83,7 +79,7 @@ sysprof_symbols_bundle_augment_fiber (gpointer user_data)
|
||||
return dex_future_new_for_error (g_steal_pointer (&error));
|
||||
g_assert (SYSPROF_IS_DOCUMENT (document));
|
||||
|
||||
if (!(bytes = dex_await_boxed (dex_async_pair_new (document, &serialize_info), &error)))
|
||||
if (!(bytes = dex_await_boxed (_sysprof_document_serialize_symbols (document), &error)))
|
||||
return dex_future_new_for_error (g_steal_pointer (&error));
|
||||
|
||||
_sysprof_recording_add_file_data (recording,
|
||||
|
||||
Reference in New Issue
Block a user