libsysprof-analyze: start on sysprof-analyze library

The goal here is to break up libsysprof into a library for recording
profiles (using libsysprof-capture) and a library for analyzing profiles
(both used by the sysprof UI).
This commit is contained in:
Christian Hergert
2023-04-25 11:57:26 -07:00
parent e888d0602e
commit efab045006
13 changed files with 111 additions and 13 deletions

View File

@ -0,0 +1,31 @@
libsysprof_analyze_test_env = [
'G_DEBUG=gc-friendly',
'GSETTINGS_BACKEND=memory',
'MALLOC_CHECK_=2',
]
libsysprof_analyze_testsuite_c_args = [
'-DG_LOG_DOMAIN="libdex"',
'-DG_ENABLE_DEBUG',
'-UG_DISABLE_ASSERT',
'-UG_DISABLE_CAST_CHECKS',
]
libsysprof_analyze_testsuite = {
'test-capture-model': {'skip': true},
}
libsysprof_analyze_testsuite_deps = [
libsysprof_analyze_dep,
libsysprof_capture_dep,
]
foreach test, params: libsysprof_analyze_testsuite
test_exe = executable(test, '@0@.c'.format(test),
c_args: libsysprof_analyze_testsuite_c_args,
dependencies: libsysprof_analyze_testsuite_deps,
)
if not params.get('skip', false)
test(test, test_exe, env: libsysprof_analyze_test_env)
endif
endforeach

View File

@ -0,0 +1,55 @@
#include <errno.h>
#include <fcntl.h>
#include <sysprof-analyze.h>
int
main (int argc,
char *argv[])
{
SysprofCaptureModel *model;
const char *filename;
GError *error = NULL;
guint n_items;
int fd;
sysprof_clock_init ();
if (argc < 2)
{
g_printerr ("usage: %s FILENAME\n", argv[0]);
return 1;
}
filename = argv[1];
fd = open (filename, O_RDONLY|O_CLOEXEC);
if (fd == -1)
{
g_printerr ("Failed to open %s: %s\n",
filename, g_strerror (errno));
return 1;
}
if (!(model = sysprof_capture_model_new_from_fd (fd, &error)))
{
g_printerr ("Failed to load %s: %s\n",
filename, error->message);
return 1;
}
n_items = g_list_model_get_n_items (G_LIST_MODEL (model));
g_print ("%u frames\n", n_items);
for (guint i = 0; i < n_items; i++)
{
SysprofCaptureFrameObject *obj = g_list_model_get_item (G_LIST_MODEL (model), i);
g_clear_object (&obj);
}
close (fd);
g_clear_object (&model);
return 0;
}