Commit Graph

30 Commits

Author SHA1 Message Date
ae7201c9ff libsysprof: use callgraph node to categorize for icons 2023-07-20 12:20:25 -07:00
dbb7833cbf libsysprof: join libsysprof-analyze and libsysprof-profile
This brings together the two libraries back into one now that the whole
design is pretty well sorted out. They depend on roughly the same libraries
anyway and it's way easier of the single library can both read and write
the capture files (along with bringing in libsysprof-capture symbols in
a single place).
2023-07-19 17:40:41 -07:00
12e75e4c8c build: remove libsysprof
This library is going away now that we have -analyze and -profile libs.
2023-07-17 11:38:25 -07:00
efab045006 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).
2023-04-25 11:57:26 -07:00
dcbeb0f87a libsysprof: add SysprofCaptureModel
This adds a GListModel that we can use to load capture files. The goal here
is to map the entire capture into memory so we can avoid reading lots of
buffers. That also allows for the model items to live as long as the model
is alive (or underlying file map, really).

The next goal is to stack features on top of this such as implementing the
callgraph as a filter of the model, or generic filters between the
callgraph model and the actual data source model.
2023-04-24 17:26:45 -07:00
97ddf5a0cc libsysprof: port UI to new ABI
Some minor changes were necessary so that we could change the ABI in
libsysprof-capture to be free from GLib (and therefore used by GLib).

This also adds some wrappers for capture API in libsysprof so that we
can continue to use GError from UI code.
2020-07-03 22:00:34 +01:00
d2047fb557 libsysprof-capture: Move autocleanup definitions to libsysprof
In preparation for dropping the GLib dependency from libsysprof-capture,
move the autocleanup definitions up to libsysprof. Add a new header for
them.

This is slightly awkward in the tools, which depend on
libsysprof-capture but not libsysprof. Rather than make them depend on
libsysprof (which might be disabled at configure time), include the
`sysprof-capture-autocleanups.h` file between source directories.
`SYSPROF_COMPILATION` needs to be defined for this to work.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Helps: #40
2020-07-02 21:07:11 +01:00
a70907be0e libsysprof: add simple preload source
This source is useful to quickly add an LD_PRELOAD to a profiler.
2020-03-13 15:50:46 -07:00
390c5cde18 libsysprof-ui: add access to control source from .ui 2020-03-13 15:19:06 -07:00
33c81a3a9c memprof: add memory profiling using LD_PRELOAD
This brings over some of the techniques from the old memprof design.
Sysprof and memprof shared a lot of code, so it is pretty natural to
bring back the same callgraph view based on memory allocations.

This reuses the StackStash just like it did in memprof. While it
would be nice to reuse some existing tools out there, the fit of
memprof with sysprof is so naturally aligned, it's not really a
big deal to bring back the LD_PRELOAD. The value really comes
from seeing all this stuff together instead of multiple apps.

There are plenty of things we can implement on top of this that
we are not doing yet such as temporary allocations, cross-thread
frees, graphing the heap, and graphing differences between the
heap at to points in time. I'd like all of these things, given
enough time to make them useful.

This is still a bit slow though due to the global lock we take
to access the writer. To improve the speed here we need to get
rid of that lock and head towards a design that allows a thread
to request a new writer from Sysprof and save it in TLS (to be
destroyed when the thread exits).
2020-02-07 19:00:33 -08:00
1c90e3da80 libsysprof: remove symbol-dirs
This is automatically done for the cases we care about, so this can be
removed now (in favor of tuning the elf symbol resolver manually).
2019-08-03 01:03:59 -07:00
757e152f88 diskstat: add simple /proc/diskstats data source 2019-07-01 12:55:16 -07:00
00997fbd7f netdev: add source for network device information
This source parses the /proc/net/dev file to get basic statistics about
network throughput on the system.

We still need a specialized Aid and Visualizer so that we can render the
counter data in a more useful format.
2019-06-26 14:18:21 -07:00
1254b16140 governor: add source to toggle CPU governer while running 2019-06-14 08:03:59 -07:00
e97490be16 libsysprof: abstract subprocess usage
For embedding cases, we need a bit more control here so that the
application can be in control of how the process is spawned.
2019-06-11 18:48:28 -07:00
1d0a269b80 libsysprof: start on battery charge capture 2019-06-10 21:32:12 -07:00
af32235541 gjs: add gjs source back
This sets various environment variables we need.
2019-06-03 18:01:53 -07:00
854f0bea52 libsysprof: add symbol resolver that can resolve from capture file
If the capture file has an embedded __symbols__ file within it, we can
try to resolve the function names from the data embedded within that
virtual file.
2019-05-29 15:13:01 -07:00
57255a1d29 libsysprof: remove lookaside from public API 2019-05-29 15:13:01 -07:00
90c165aa08 libsysprof: stub out source for appending symbols 2019-05-29 15:13:01 -07:00
874fb01c25 libsysprof: use embedded kallsyms when possible
This uses the kallysms that has been embedded in the capture file when
that is possible (such as when proc-source appends it).
2019-05-29 15:13:01 -07:00
17a835570e build: remove dead code 2019-05-29 15:13:01 -07:00
552ccb4f60 libsysprof: move tracefd to separate source 2019-05-29 15:13:01 -07:00
588fd43d8b libsysprof-ui: stub out proxy source
The goal for this (which is unfinished) is to setup a dbus proxy to the
peer. That can be reused for both gtk and mutter, if configured correctly.

We'll likely need to allow some specific config tweaks in the UI.
2019-05-29 15:13:00 -07:00
7ea6ca43ec libsysprof: add inside guards to prevent stray includes
This requires that things use #include <sysprof.h> now instead
of individual includes. A few cases are still allowed in the
libsysprof-capture library to make copy/paste embedding easier.
2019-05-29 15:12:59 -07:00
53c718b708 build: rename all symbols to use sysprof_ as prefix
As we gain in usage, we need to be more careful about using a prefix
that will not collide with other symbols. So version 3 of our ABI will
change to using Sysprof/SYSPROF/sysprof as the various prefixes.

The soname/api version bump will happen later on this branch so that
things are easier to test up until then.
2019-05-29 15:12:59 -07:00
8b88bfe693 libsysprof: add versioning macros
This also moves stackstash.[ch] into a location that can be
embedded by both the libsysprof and libsysprof-ui code. We
pass native pointers to the structure as a gpointer in the
public API to allow for this. The performance of that code is
incredibly sensitive to the interactivity of Sysprof.
2019-05-29 15:12:59 -07:00
6ba408f073 shared: remove use of libshared
This moves everything into other places and simple includes the
files in the cases that it is necessary. In the future, we can
rewrite sysprofd to use GDBus and add GetProcFile() to allow
for client-side processing of kallsyms.
2019-05-29 15:12:59 -07:00
63bcfc2b0e build: various build fixes for macOS
This doesn't make profiling useful in any way, but it does get things
to the point where I can actually open a capture file. And it would
be nice if we could progress to the point of loading capture files
(with correct data in-tact) and this helps us move down that path.

To really do that correctly, we should make some of the widgetry
disabled when it isn't useful. We also need to ensure that we add extra
decoding information to capture files during shutdown so that any
platform can read it back. This would also help the situation of
running and reading on separate architectures.
2019-05-29 15:12:59 -07:00
1708ad1b48 tree: start on massive tree refactor
The big thing going on here is that we are going to split up the libraries
a bit better, and remove GObject from the capture library. The libsysprof
library will bring in the capture library statically, so we can export the
symbols we want.

Eventually, we will bump the version to sysprof-3, but not yet.
2019-05-29 15:12:59 -07:00