Even if it is disabled, we want the GType enabled and part of our ABI. We
will return NULL if one is created and debuginfod is not supported or if
we failed to create a client.
If we are configured with support for debuginfod and it fails to initialize
or we are not configured to use debuginfod, always ensure g_object_new()
will return a NULL instance back.
This helps prevent against misconfigured instances so we do not need to
do so many checks in vfuncs as well as allowing us to have the GType be
available always even when not built with debuginfod.
This is based on a debuginfod_client provided by Barnabás Pőcze in !73.
It extends it to use the new task infrastructure to elevate the download
process to the user while loading a capture file.
This makes sure that we get that even when not using the Elf symbolizer
but also means we can fallback through the Elf symbolizer into the
debuginfod symbolizer.
This provides a task abstraction to SysprofDocumentLoader so that we can
elevate information about tasks to the user interface. It also moves the
spinner to a menu button w/ popover to display those tasks.
That will cause infinite recursion in `sysprof_elf_get_symbol_at_address_internal()`.
Also note that loops are still possible, this change
only prevents one way of creating loops.
Previously, the `dbus-monitor` process was never terminated.
Unfortunately, tying up some memory is not the worst consequence
of this: after some time file descriptors that are sent on the
bus start to accumulate. This can be especially problematic
when there are unexpected read/write ends of pipes.
It's a simple CLI tool that dumps the contents of a Sysprof capture
file in a syntax inspired by GTK's render node syntax.
It prints metadata, the callgraph, marks, and counters. Other fields
may be added as needed, but for now this is sufficient for inspecting
WebKit captures.
There are CLI args for not printing particular groups, so that we can
filter out what we need.
This is a private allocator that can be used for large groups of
allocations that are tied to a specific object.
For example, the callgraph owning many nodes can use this so all the nodes
are allocated together, but also freed in a single stage ignoring all the
complex GList linked nodes among them.