libsysprof: add loading helper

This commit is contained in:
Christian Hergert
2024-11-25 14:15:47 -08:00
parent 3424ab2dc3
commit 105dc0d0be
3 changed files with 45 additions and 9 deletions

View File

@ -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

View File

@ -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);
}

View File

@ -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));