mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
libsysprof: add loading helper
This commit is contained in:
@ -21,14 +21,17 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <libdex.h>
|
||||
|
||||
#include "sysprof-document-loader.h"
|
||||
#include "sysprof-document-task.h"
|
||||
|
||||
G_BEGIN_DECLS
|
||||
|
||||
void _sysprof_document_loader_add_task (SysprofDocumentLoader *self,
|
||||
SysprofDocumentTask *task);
|
||||
void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self,
|
||||
SysprofDocumentTask *task);
|
||||
DexFuture *_sysprof_document_loader_load (SysprofDocumentLoader *loader);
|
||||
void _sysprof_document_loader_add_task (SysprofDocumentLoader *self,
|
||||
SysprofDocumentTask *task);
|
||||
void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self,
|
||||
SysprofDocumentTask *task);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
@ -789,3 +789,38 @@ sysprof_document_loader_list_tasks (SysprofDocumentLoader *self)
|
||||
|
||||
return g_object_ref (G_LIST_MODEL (self->tasks));
|
||||
}
|
||||
|
||||
static void
|
||||
sysprof_document_loader_load_cb (GObject *object,
|
||||
GAsyncResult *result,
|
||||
gpointer user_data)
|
||||
{
|
||||
SysprofDocumentLoader *loader = (SysprofDocumentLoader *)object;
|
||||
g_autoptr(DexPromise) promise = user_data;
|
||||
g_autoptr(SysprofDocument) document = NULL;
|
||||
g_autoptr(GError) error = NULL;
|
||||
|
||||
g_assert (SYSPROF_IS_DOCUMENT_LOADER (loader));
|
||||
g_assert (G_IS_ASYNC_RESULT (result));
|
||||
g_assert (DEX_IS_PROMISE (promise));
|
||||
|
||||
if ((document = sysprof_document_loader_load_finish (loader, result, &error)))
|
||||
dex_promise_resolve_object (promise, g_steal_pointer (&document));
|
||||
else
|
||||
dex_promise_reject (promise, g_steal_pointer (&error));
|
||||
}
|
||||
|
||||
DexFuture *
|
||||
_sysprof_document_loader_load (SysprofDocumentLoader *loader)
|
||||
{
|
||||
DexPromise *promise;
|
||||
|
||||
g_return_val_if_fail (SYSPROF_IS_DOCUMENT_LOADER (loader), NULL);
|
||||
|
||||
promise = dex_promise_new ();
|
||||
sysprof_document_loader_load_async (loader,
|
||||
NULL,
|
||||
sysprof_document_loader_load_cb,
|
||||
dex_ref (promise));
|
||||
return DEX_FUTURE (promise);
|
||||
}
|
||||
|
||||
@ -27,16 +27,14 @@
|
||||
|
||||
#include <sysprof.h>
|
||||
|
||||
#include "sysprof-document-loader-private.h"
|
||||
|
||||
#include "sysprof-instrument-private.h"
|
||||
#include "sysprof-recording-private.h"
|
||||
#include "sysprof-symbols-bundle.h"
|
||||
|
||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofCaptureReader, sysprof_capture_reader_unref)
|
||||
|
||||
static const DexAsyncPairInfo load_info =
|
||||
DEX_ASYNC_PAIR_INFO_OBJECT (sysprof_document_loader_load_async,
|
||||
sysprof_document_loader_load_finish);
|
||||
|
||||
struct _SysprofSymbolsBundle
|
||||
{
|
||||
SysprofInstrument parent_instance;
|
||||
@ -81,7 +79,7 @@ sysprof_symbols_bundle_augment_fiber (gpointer user_data)
|
||||
elf = sysprof_elf_symbolizer_new ();
|
||||
sysprof_document_loader_set_symbolizer (loader, elf);
|
||||
|
||||
if (!(document = dex_await_object (dex_async_pair_new (loader, &load_info), &error)))
|
||||
if (!(document = dex_await_object (_sysprof_document_loader_load (loader), &error)))
|
||||
return dex_future_new_for_error (g_steal_pointer (&error));
|
||||
g_assert (SYSPROF_IS_DOCUMENT (document));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user