mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-11 07:30:54 +00:00
libsysprof: add loading helper
This commit is contained in:
@ -21,14 +21,17 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <libdex.h>
|
||||||
|
|
||||||
#include "sysprof-document-loader.h"
|
#include "sysprof-document-loader.h"
|
||||||
#include "sysprof-document-task.h"
|
#include "sysprof-document-task.h"
|
||||||
|
|
||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
void _sysprof_document_loader_add_task (SysprofDocumentLoader *self,
|
DexFuture *_sysprof_document_loader_load (SysprofDocumentLoader *loader);
|
||||||
SysprofDocumentTask *task);
|
void _sysprof_document_loader_add_task (SysprofDocumentLoader *self,
|
||||||
void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self,
|
SysprofDocumentTask *task);
|
||||||
SysprofDocumentTask *task);
|
void _sysprof_document_loader_remove_task (SysprofDocumentLoader *self,
|
||||||
|
SysprofDocumentTask *task);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -789,3 +789,38 @@ sysprof_document_loader_list_tasks (SysprofDocumentLoader *self)
|
|||||||
|
|
||||||
return g_object_ref (G_LIST_MODEL (self->tasks));
|
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.h>
|
||||||
|
|
||||||
|
#include "sysprof-document-loader-private.h"
|
||||||
|
|
||||||
#include "sysprof-instrument-private.h"
|
#include "sysprof-instrument-private.h"
|
||||||
#include "sysprof-recording-private.h"
|
#include "sysprof-recording-private.h"
|
||||||
#include "sysprof-symbols-bundle.h"
|
#include "sysprof-symbols-bundle.h"
|
||||||
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (SysprofCaptureReader, sysprof_capture_reader_unref)
|
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
|
struct _SysprofSymbolsBundle
|
||||||
{
|
{
|
||||||
SysprofInstrument parent_instance;
|
SysprofInstrument parent_instance;
|
||||||
@ -81,7 +79,7 @@ sysprof_symbols_bundle_augment_fiber (gpointer user_data)
|
|||||||
elf = sysprof_elf_symbolizer_new ();
|
elf = sysprof_elf_symbolizer_new ();
|
||||||
sysprof_document_loader_set_symbolizer (loader, elf);
|
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));
|
return dex_future_new_for_error (g_steal_pointer (&error));
|
||||||
g_assert (SYSPROF_IS_DOCUMENT (document));
|
g_assert (SYSPROF_IS_DOCUMENT (document));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user