Commit Graph

528 Commits

Author SHA1 Message Date
c9a1b322cd libsysprof/sampler: track lost records as a counter/log
This makes it much easier to see what happened from the capture file which
may originate from a user different than the person inspecting it.
2024-10-24 12:49:48 -07:00
2838024227 libsysprof: add union for perf "lost" records 2024-10-24 12:42:55 -07:00
d5d3c71879 libsysprof: remove unnecessary address calculation
We are only fallback symbols here, which is 1 address-wide.
2024-10-23 11:54:33 -07:00
29fc388824 build: always build debuginfod symbolizer
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.
2024-10-11 11:46:26 -07:00
e70a5b076c libsysprof: return NULL instance unless debuginfod works
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.
2024-10-11 11:45:41 -07:00
0d8e004558 libsysprof: fix building with -Ddebuginfod=auto 2024-10-11 11:26:20 -07:00
c009532c91 libsysprof: ensure access to process info 2024-10-11 11:09:48 -07:00
d2471d4bf5 libsysprof: add debuginfod symbolizer
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.
2024-10-10 17:12:30 -07:00
1464e3a48e libsysprof: hoist fallback symbol creation
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.
2024-10-10 17:04:19 -07:00
25b539de54 libsysprof: add setup hooks for symbolizers
This gives the symbolizer access to the loader so we can propagate tasks
back to it.
2024-10-10 17:03:30 -07:00
50d556b13e sysprof: add SysprofDocumentTask abstraction
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.
2024-10-10 17:02:06 -07:00
1c4c266a05 libsysprof: elf: do not generate fallback names
Fallback names are only used in `SysprofElfSymbolizer` at the
moment, but it also has code to generate fallback symbols.
2024-10-09 16:37:02 -07:00
aef623cf15 libsysprof: elf: do not allow setting self as debug link
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.
2024-10-09 16:37:02 -07:00
6ab9df35ed libsysprof: Kill dbus-monitor after D-Bus capturing is done
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.
2024-09-29 04:13:32 +02:00
4142472984 libsysprof: collapse recursive functions 2024-09-12 12:44:08 -07:00
15844df5b9 callgraph: use bump allocator for callgraph nodes 2024-09-12 10:52:41 -07:00
f446178796 allocator: add 16kb page bump allocator
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.
2024-09-12 10:52:18 -07:00
b726f49d15 Turn polkit-agent support into an optional feature.
This simplifies deployment on embedded devices, where polkit is usually
unncessary at runtime, but pulls in quite a few otherwise unncessary
dependencies. Start to improve the situation by allowing to selectively
disable polkit-agent support at compile time, which aids in container
usage scenarios, where one wants to invoke 'sysprof-cli' from within
the container. Bypassing polkit-agent in the container is then desired,
since the host sysprofd will handle asking for permissions to enable
the tracing. It allows for a simpler setup of rootless podman
containers, avoiding UID mismatches, that lead to rejection of the
tracing enablement.

- Add a new 'polkit-agent' meson build feature, that allows to force disabling
  polkit-agent support (-Dpolkit-agent=disabled).

- Mark the 'polkit-agent' feature as enabled, by default, to reflect
  the current status (sysprof-cli did not build without polkit-agent support).

- libsysprof/sysprof-instrument.c: Build fix when polkit is not available,
  remove the unnecessary 'g_autopr(PolkitDetails) details' variable.

- Alter the sysprof-cli dependencies to only attempt to link against
  polkit-agent, if necessary. Modify sysprof-cli.c to wrap all code using
  polkit-agent in HAVE_POLKIT_AGENT blocks.
2024-08-20 20:46:11 +02:00
54295a1466 libsysprof: port GPtrArray sort to gtk_tim_sort() 2024-08-16 12:50:21 -07:00
fbab86314a libsysprof: use gtk_tim_sort() to sort jitmaps 2024-08-16 12:43:13 -07:00
e11e2e3bc8 libsysprof: use gtk_tim_sort() for kernel kallsyms array 2024-08-16 12:41:37 -07:00
9c896e0bb4 libsysprof: use gtk_tim_sort() for packed symbols 2024-08-16 12:39:41 -07:00
dde273e25e libsysprof: correct awkward double values
We still get some really crazy huge numbers from GTK for FPS, likely from
division issues. Just normalize it to zero for now.
2024-08-16 12:37:53 -07:00
cdb011b403 libsysprof: use gtk_tim_sort() for counter value sorting
This is generally faster than g_array_sort() due to all the heuristics
involved, which are likely to hold true for us with counter data.
2024-08-16 12:14:05 -07:00
836edc0c87 libsysprof: fix tracefd string for child process 2024-08-14 14:36:25 -07:00
bfe55f46b2 libsysprof: fix size to copy 2024-07-26 16:58:21 +05:30
3c655a6f3e libsysprof: add missing header for close function
This was detected by compiling against musl-libc
2024-03-18 22:18:52 +01:00
c826dc5ec8 libsysprof: mark vulkan frame as graphics 2024-03-08 14:15:28 -08:00
d7eff5864b build: ensure symbols are exported for libsysprof-6
This fixes an issue where the symbols are not getting T as they are dropped
when pulling in the static archive.

This compiles twice, but that is fine for now until we come up with something
better in the long run.
2024-03-07 14:06:05 -08:00
d2fd6c4a7f libsysprof: categorize GTK shader loading 2024-03-04 11:39:56 -08:00
2e28a45929 libsysprof: be explicit with integer comparison 2024-03-03 14:35:47 -08:00
b4a592a020 Add test-cases that include sysprof headers into C++ code
Reproduces: https://gitlab.gnome.org/GNOME/sysprof/-/issues/114
Signed-off-by: Simon McVittie <smcv@debian.org>
2024-02-24 11:41:56 +00:00
36f4988ecc Conditionalize uses of C99 restrict keyword
This is part of C99, but not part of Standard C++, so it can't be used
unconditionally if the sysprof headers might get included into C++ code.

Resolves: https://gitlab.gnome.org/GNOME/sysprof/-/issues/114
Signed-off-by: Simon McVittie <smcv@debian.org>
2024-02-24 11:41:56 +00:00
39d0579b05 libsysprof: relax number of device numbers
Fixes #113
2024-02-10 16:27:45 -08:00
15585d2803 libsysprof: improve symbol categorization a bit 2024-02-08 14:47:44 -08:00
802c298e95 libsysprof: allow hex for device major/minor
Noticed by Fabrice Bellet in #104
2024-02-06 12:02:40 -08:00
9eca469402 categories: mark gtk_css_style_snapshot_* as as paint 2024-01-20 08:04:00 -08:00
0bed511430 libsysprof: demangle rust kernel symbols 2023-11-06 20:04:49 -08:00
d852115de1 libsysprof: fallback to software perf counters
If we fail to enable hardware perf counters, fallback to software perf
counters. This fixes Sysprof to work on Fedora Asahi.
2023-10-23 22:27:04 +00:00
e5e57f8ff5 libsysprof: fix format-literal warning
Fixes #99
2023-10-06 09:08:56 -07:00
403704293b libsysprof: fix unused warning 2023-10-06 09:08:38 -07:00
37c2a527b4 libsysprof: be more defensive against oddly formed containers
If we get a container file that is in a format we don't quite understand,
avoid crashing and just bail. That will likely result in the inability
to symbolize properly, but better than crashing.

Fixes #100
2023-09-26 17:27:53 -07:00
45f88e3586 libsysprof: track some mutter abi changes 2023-09-07 19:19:02 -07:00
5dc4e83307 libsysprof: ignore swapper/# scheduler details
We "know" that the swapper runs between each process inherently so no need
to really include that in the scheduler details. It just clutters up the
event timeline. Without it, we're more likely to see patterns in the
scribbles.
2023-09-07 13:18:41 -07:00
6b34ea2118 libsysprof: fix merging of similar processes
We want the "similar process" key to be the argv[0] or something close
to it so that we can coalesce across processes with different arguments.
2023-09-01 14:26:10 -07:00
5f94e09f9c libsysprof: avoid duplicate process records
We want the first process record, but subsequent records should
be ignored, except that we want to take the appropriate comm[]
action from them.
2023-09-01 14:14:25 -07:00
30123284b6 libsysprof: use whole cmdline for process name
This is just more useful than artificially truncating it.
2023-09-01 13:35:39 -07:00
187bed76f4 libsysprof: avoid await() on non-fiber
That is fine to do when the futures are finished, but in this case one
might still be in-flight. Also, wait for all futures to complete before
processing them. Use a finally() block so we can check even if there are
errors.
2023-08-31 15:21:48 -07:00
5c489a4499 libsysprof: avoid an extra string copy 2023-08-31 14:16:17 -07:00
4a668f6860 libsysprof: ignore empty paths 2023-08-31 14:15:57 -07:00