Commit Graph

1406 Commits

Author SHA1 Message Date
f925fab564 libsysprof-capture: Replace G_{UN,}LIKELY with SYSPROF_{UN,}LIKELY
This does the same thing for modern compilers, but without the GLib
dependency.

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

Helps: #40
2020-07-03 22:00:34 +01:00
c9f54fcc68 libsysprof-capture: Replace G_GNUC_INTERNAL with SYSPROF_INTERNAL
It does the same thing for modern compilers.

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
5636bbf4f0 libsysprof-capture: Use stdbool instead of gboolean
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
2020-07-02 21:07:11 +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
b449baa205 libsysprof-capture: Move MappedRingBufferSource to libsysprof
As preparation for dropping the GLib dependency from libsysprof-capture,
move the `GSource` which links a `MappedRingBuffer` to a `GMainContext`
from libsysprof-capture to libsysprof.

This requires adding one new piece of API to libsysprof-capture to check
whether the `MappedRingBuffer` is empty.

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

Helps: #40
2020-07-02 21:07:11 +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
16bf945d34 libsysprof-capture: Drop unnecessary #include
Signed-off-by: Philip Withnall <withnall@endlessm.com>

Helps: #40
2020-07-02 21:07:11 +01:00
4b6855a2ab libsysprof: Add missing preload dependencies on glib-2.0
It has previously been implicitly pulled in by libsysprof-capture, but
that will change in future.

Correspondingly, add some missing `glib.h` includes.

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

Helps: #40
2020-07-02 21:07:11 +01:00
d1a8dc40f5 tests: Add missing dependency on glib-2.0
It has previously been implicitly pulled in by libsysprof-capture, but
that will change in future.

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

Helps: #40
2020-07-02 21:07:11 +01:00
3eb0f3e964 sysprof-dump: Move error handling up to avoid a NULL pointer dereference
`reader` can be `NULL`, but the `NULL` check was done after potentially
dereferencing it.

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

Helps: #40
2020-07-02 21:07:11 +01:00
30e5685655 tools: Add missing dependency on glib-2.0
It has previously been implicitly pulled in by libsysprof-capture, but
that will change in future.

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

Helps: #40
2020-07-02 21:07:11 +01:00
fb581dd0d2 sysprof: add tooltip-text for open button 2020-07-01 17:50:50 -07:00
51021ece1a libsysprof-ui: use "Recording" instead of "Capture" 2020-07-01 17:50:36 -07:00
88df2711e3 Add Open button
Add a button to open capture files in headerbar. This caters to the
suggested usage of 'sysprof-cli' by exposing the funcitonality in a
prominent place.
2020-07-01 15:57:56 -07:00
03f32fe718 display: show message dialog when there is an error opening file
Fixes #42
2020-07-01 13:21:25 -07:00
71fa41248e app: present window before opening captures
This is necessary to ensure that message dialogs that are shown when a
capture fails to open can be displayed above the window.
2020-07-01 13:20:48 -07:00
03906a84c6 tools: add --no-throttle sysprof-cli option
This allows disabling the CPU governer by switching to "performance".
2020-03-18 11:16:00 -07:00
01d196abe4 libsysprof-collector: avoid formatting unless recording
We can avoid the process of creating the log message altogether if we are
not actively recording messages.
2020-03-16 12:28:04 -07:00
3d546eb6d1 libsysprof-capture: add sysprof_collector_log_printf()
This is a convenience function to call sysprof_collector_log() while also
formatting the message.

Ideally we'd be able to avoid the string format if we are not currently
collecting data, but that can be left for a future commit. We don't have
recursive locks so we need to duplicate the structure setup.
2020-03-16 12:28:04 -07:00
014b696dc0 Merge branch 'wip/jojnar/litsuf' into 'master'
Fix -Werror=literal-suffix

See merge request GNOME/sysprof!25
2020-03-16 03:33:18 +00:00
89f656013a tools: add --speedtrack command line option 2020-03-15 16:00:22 -07:00
9de1dd3ab5 libsysprof-ui: remove control source
This is already part of the local profiler.
2020-03-15 15:57:26 -07: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
259aa9ba93 libsysprof-ui: allow double click to select mark range 2020-03-13 17:00:17 -07:00
eb0d58dcc4 speedtrack: track g_main_context_iteration()
We can't get all the symbols here because of -Bsymbolic on the glib
library, but we can get the higher level bit. And if we're blocking for
a period of time, it can help track things down to know we block for
longer time periods.
2020-03-13 16:49:38 -07:00
55f8f313b7 speedtrack: add sync and syncfs wrappers 2020-03-13 16:10:14 -07:00
37afd71370 speedtrack: start on simple port of iobt as "speedtrack"
The long term goal here is to help people find issues with their main
loop performance because of mixed workloads getting in the way of
interactivity.
2020-03-13 15:51:33 -07: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
b022906b9e collector: fix mark name in collection 2020-03-13 15:31:51 -07:00
f3d6bd3ed3 memprof: fix joining of LD_PRELOAD 2020-03-13 15:19:18 -07:00
390c5cde18 libsysprof-ui: add access to control source from .ui 2020-03-13 15:19:06 -07:00
e0de0a94df build: add macros for 3.38 2020-03-13 15:18:01 -07:00
f7a53ca8f9 preload: move backtrace helper into helper
This is useful so that we can have more of these LD_PRELOAD tools without
having to duplicate this code.
2020-03-13 12:06:39 -07:00
5dea152c77 tests: use G_GSIZE_FORMAT instead of G_GUINT64_FORMAT for gsize
This fixes the build on 32-bit platforms with -Werror-format

fixes #32
2020-03-07 10:45:17 +01:00
82c2ee5a73 build: fix building in jhbuild
Not sure why we are hitting this, but we are so just force it to work.
2020-03-06 13:43:15 -08:00
a6c39af553 preload: move to libdir from libexecdir
This isn't an executable, it just belongs in libdir.
2020-03-05 15:46:03 -08:00
745eb981d1 libsysprof-capture: add mark and log variants 2020-03-05 15:43:33 -08:00
2725565eb9 libsysprof-capture: remove fallback code
We don't support the fallback writer interface currently, so this can go
until we decide what to do going forward.
2020-03-05 15:30:02 -08:00
de492d11e5 libsysprof-capture: set padding to 0 2020-03-05 15:26:41 -08:00
43f31fb8b7 libsysprof-capture: add collector interface for samples 2020-03-05 15:26:31 -08:00
b33c3e8af9 libsysprof-capture: add more assertions around alignment 2020-03-05 15:24:47 -08:00
6d8841267a preload: add assertion for performance hack
We steal two pointers temporarily, so ensure that we have the space to
overwrite a couple of addresses.
2020-03-05 15:22:17 -08:00
4af293a364 libsysprof: apply whole-system during capture replay
Fixes #31
2020-03-04 11:05:13 -08:00
351a2089ff libsysprof-capture: remove unused API
We want this alter, but for now, we can skip it until there is a chance
to fully implement it.
2020-02-28 09:27:32 -08:00
58b9bc9992 libsysprof-ui: fix minute value 2020-02-26 21:59:03 -08:00
1fbeabf2a2 libsysprof: add context check for inline symbol decoding 2020-02-26 10:55:34 -08:00
0c698f2da1 libsysprof-ui: dont warn for not-supported error 2020-02-26 10:46:08 -08:00
f01298ead5 libsysprof: allow disabling the kernel symbol resolver
The kernel symbol resolver requires access to sysprofd, which might not
be available in some contexts (such as when no polkit agent is available).

This allows that to continue working by disabling the kernel with the
user-only setting.
2020-02-26 10:24:40 -08:00