Commit Graph

25 Commits

Author SHA1 Message Date
f18fbe5ae8 build: various fixes for compiling on macOS 2020-11-16 14:01:02 -08:00
57183ab8e2 macros: add static assert helper
So that we can use this from gnu99 such as from GTK.
2020-07-04 16:11:31 -07:00
608582d3c4 libsysprof-capture: Drop GLib dependency
None of the code uses it any more. This means that `libsysprof-capture.a`
can now be used within `libglib-2.0.so` for collecting main loop
statistics.

Brought to you by Opeth’s Deliverance on repeat.

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

Fixes: #40
2020-07-03 22:00:34 +01:00
c89a47939e libsysprof-capture: Move SysprofBacktraceFunc to a different header
So it’s next to the definition of `SysprofCaptureAddress`, which it
uses.

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

Helps: #40
2020-07-03 22:00:34 +01:00
6d3ede2e9f libsysprof-capture: Avoid using GLIB_SIZEOF_VOID_P
Use `UINTPTR_MAX` to calculate the size of a pointer instead. This
assumes that all pointers are the same width.

It also means that the sysprof-capture code uses the pointer size of the
platform that libsysprof-capture was compiled on, rather than the
pointer size of the platform that GLib was compiled on. They seem
unlikely to differ.

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

Helps: #40
2020-07-03 22:00:34 +01:00
113d9d166a libsysprof-capture: Use C-standard printf modifiers
Signed-off-by: Philip Withnall <withnall@endlessm.com>

Helps: #40
2020-07-03 22:00:34 +01:00
14078e6c4d libsysprof-capture: Use SYSPROF_INT64_CONSTANT instead of GLib version
Same for the unsigned version. They do the same thing as the GLib
versions.

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

Helps: #40
2020-07-03 22:00:34 +01:00
9493fa2e03 libsysprof-capture: Use endianness macros from libc rather than GLib
They should be equivalent.

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

Helps: #40
2020-07-03 22:00:34 +01:00
41ec04ea99 libsysprof-capture: Replace G_BEGIN_DECLS with SYSPROF_BEGIN_DECLS
It does the same job, but doesn’t require GLib.

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

Helps: #40
2020-07-03 22:00:34 +01:00
8e28ac6e81 libsysprof-capture: Use assert() instead of g_assert()
Also use it instead of `g_return_if_fail()`.

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

Helps: #40
2020-07-03 22:00:34 +01:00
2c2cbf6343 libsysprof-capture: Use C11 types instead of GLib types
This is an almost entirely mechanical* conversion from (for example)
`gint` → `int`, `guint8` → `uint8_t`, etc.

It is not entirely complete, as many GLib functions are still used in
libsysprof-capture, which necessitate some use of GLib types.

It also avoids renaming `gboolean` → `bool` as that’s a slightly more
controversial change which will happen in the following commit.

*Code was manually realigned afterwards.

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

Helps: #40
2020-07-02 21:07:11 +01:00
9393078d7b Fix -Werror=literal-suffix
When trying to build gjs with --werror, I get the following error:

	In file included from /nix/store/snc19nr462570ssx03v455p164vyz15s-sysprof-3.36.0-dev/include/sysprof-3/sysprof-capture-condition.h:59,
	                 from /nix/store/snc19nr462570ssx03v455p164vyz15s-sysprof-3.36.0-dev/include/sysprof-3/sysprof-capture.h:66,
	                 from ../gjs/profiler.cpp:53:
	/nix/store/snc19nr462570ssx03v455p164vyz15s-sysprof-3.36.0-dev/include/sysprof-3/sysprof-capture-types.h:76:40: error: invalid suffix on literal; C++11 requires a space between literal and string macro [-Werror=literal-suffix]
	   76 | #define SYSPROF_CAPTURE_ADDRESS_FORMAT "0x%016"G_GINT64_MODIFIER"x"
	      |                                        ^
	cc1plus: all warnings being treated as errors
2020-03-15 22:07:49 +01:00
b33c3e8af9 libsysprof-capture: add more assertions around alignment 2020-03-05 15:24:47 -08:00
1d44282edb libsysprof-capture: add define for last frame type 2020-02-13 14:32:34 -08: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
2e72e6af84 capture: fix format type for address on macOS 2020-02-07 11:00:09 -08:00
532972beb6 libsysprof-capture: relicense as BSD-2-Clause-Patent
This allows embedding the static capture library without having to deal
with license incompatibility while retaining the patent clause. We want
as many consumers of the format as makes sense without the restriction
of what kind of app/library/tooling they are.

The application, sysprofd, libsysprof, and libsysprof-ui continue to be
GPLv3+.
2019-06-05 13:25:21 -07:00
7650d6e7c6 libsysprof-capture: add file chunk frame type 2019-05-29 15:13:01 -07:00
cc415c9140 libsysprof-capture: add log frame type
This is useful to interleave logs with the capture so that we can have
correlation without interjecting them into mark fields.
2019-05-29 15:13:01 -07:00
567f8a3a0f libsysprof-capture: shorten names by removing Frame 2019-05-29 15:13:01 -07:00
db9aea95ea libsysprof-capture: add metadata frame type
This will allow sources and aids to discover information about what was
done between capture loading and saving.
2019-05-29 15:13:00 -07:00
aed80ea51f libsysprof-capture: add stats to reader when possible
We can also back-fill these when reading a capture file.
2019-05-29 15:13:00 -07:00
6731b1552b libsysprof-capture: whitespace cleanup 2019-05-29 15:13:00 -07:00
8145f991e5 libsysprof-capture: whitespace cleanup 2019-05-29 15:13:00 -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