These are just like `sysprof_collector_mark()`, but do the printf
formatting of the message internally, and only once the collector has
been fetched — so there is no overhead from the printf if sysprof is not
enabled at runtime.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
This will be used to build libsysprof-capture as a subproject within
libglib, with the symbols from libglib being left unresolved until the
static libsysprof-capture is linked into libglib.
When built as a subproject, libsysprof-capture won’t install anything.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
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
Use `errno` instead, which is icky, but given that all of the failure
modes are from POSIX I/O functions, it’s at least in keeping with them.
This is a major API break.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Use `errno` instead, which is icky, but given that all of the failure
modes are from POSIX I/O functions, it’s at least in keeping with them.
This is a major API break.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
It was unused anywhere within sysprof.git, and couldn’t be modified to
drop its GLib dependency while still retaining its functionality.
If it’s still needed, it’ll have to be reimplemented in libsysprof.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Change `sysprof_capture_reader_read_jitmap()` to return a `const
SysprofCaptureJitmap *` (like the other `read` functions), and add a new
`SysprofCaptureJitmapIter` type to allow easy iteration over the jitmap.
This allows a use of `GHashTable` to be removed from the API. It breaks
the libsysprof-capture API and ABI.
All the callers iterate over the jitmap rather than looking up elements
by key. If that functionality is needed in future, additional API can be
added to allow it on `SysprofCaptureJitmap`.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This changes its API and ABI: it now returns an allocated array of const
strings, rather than an allocated array of allocated strings.
The call sites in the source tree have been adjusted accordingly.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This makes no functional difference, but does tidy up the code style a
bit. All other internal headers are included using quotes in other
files.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
The macros don’t seem to make things sufficiently much clearer that it
makes sense to provide them.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This is a straightforward replacement using a single allocation, as the
number of array elements is always known ahead of time.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This imposes an arbitrary limit of 2048B on the length of printf-ed log
messages, but is otherwise equivalent.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This means we lose support for local timezones other than UTC, but is
otherwise equivalent.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
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
This is more of a direct port than previous replacements of `GArray`
(which have had linear growth): this one implements exponential growth
of the allocated array, as `GArray` does.
It uses `qsort()` to sort the array so that it can be binary searched as
before.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
There are typically 0 or 1 conditions applied to a cursor, and they’re
only applied at construction time, so it makes sense to only grow the
conditions array linearly when it’s used. This means the array may stay
as `NULL` throughout the lifetime of the cursor.
There’s currently no way to return an error from
`sysprof_capture_cursor_add_condition()`, so an allocation failure
results in an abort.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
libsysprof-capture no longer calls any of the GLib logging functions
which make use of it.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Calling this function without having registered the counter beforehand
seems reasonable to call a programmer error.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Use `strcmp()` and `strdup()` rather than `g_strcmp0()` and
`g_strdup()`. In the latter case, this makes no difference. In the
former case it means we potentially need to do some additional `NULL`
checks before calling it; although most of the call sites use
fixed-length arrays, so no `NULL` check is needed.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
The code is well-suited to directly using `calloc()` instead, since the
arrays never grow dynamically.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
This doesn’t change any of the sites which call
`sysprof_capture_condition_*()` in other files, but does change
`SysprofCaptureCondition` internally to handle OOM and return an error
code.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Another step away from GLib. This changes the OOM behaviour of the
library — previously it would immediately `abort()` on OOM. However, it
seems likely that given the small number of allocations
libsysprof-capture does, it should be able to recover from an OOM
situation more gracefully than larger libraries can — so the new
implementation tries to do that.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
If the system doesn’t provide `strlcpy()` (FreeBSD does, Linux doesn’t),
use an inbuilt copy instead.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Use the intrinsic atomics provided by the compiler, instead of GLib’s
wrapper around them. This should work for all modern compilers.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40
Another step towards dropping GLib as a dependency of
libsysprof-capture.
Unlike the previous commit which replaced GLib integer types with the
bitwise equivalent C standard types, `stdbool` is potentially a different
width from `gboolean`, so this is an ABI break.
It therefore involves some changes to callback functions in the tests
and tools, and in libsysprof.
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Helps: #40