1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00
Commit Graph

1151 Commits

Author SHA1 Message Date
Bartosz Taudul 3d28d1259b Check if ring buffer was properly mapped. 2022-04-04 17:56:40 +02:00
Bartosz Taudul e83e83dae9 Revert "Backport SPSCQueue commit 3086fa9."
This reverts commit 2a3a57d245.

Fucking MSVC 2015 has chosen to emit errors on unsupported attributes.
2022-04-01 16:46:50 +02:00
Benoit Jacob 5eb3e3a1f0 set s_numCpus before reading it 2022-03-24 18:31:38 +00:00
Bartosz Taudul 2a3a57d245 Backport SPSCQueue commit 3086fa9. 2022-03-18 02:09:00 +01:00
Bartosz Taudul c2fcc699be Apply SPSCQueue commit 62cdc1f3. 2022-03-18 02:05:55 +01:00
Bartosz Taudul 0b1e5d2c96 Define ___tracy_demangle on Android. 2022-03-11 15:40:56 +01:00
Bartosz Taudul 7d3c7049dc Fix compilation on MSVC 2015. 2022-03-10 12:27:44 +01:00
Dave Rigby 2073ffb684 program_invocation_short_name is Linux-specific
'program_invocation_short_name' is Linux-specific; other OSs such as
macOS do not support it.

Fixes build break on macOS 12.2 with _GNU_SOURCE defined.
2022-02-28 16:09:06 +00:00
Bartosz Taudul e2b0268d7a Allow disabling callstack handling. 2022-02-22 21:26:55 +01:00
Bartosz Taudul d318f75123 Merge pull request #325 from BrychDaneel/automatic_timer_fallback
Automatic timer fallback
2022-02-21 13:47:50 +01:00
Daniil Brychikov a9ba1ce688 Codestyle fixes 2022-02-19 11:44:15 +03:00
Daniil Brychikov 73f6c66cde Automatic timer fallback 2022-02-16 15:18:45 +03:00
Bartosz Taudul 46d2977694 prev_state is long. 2022-02-14 22:34:20 +01:00
Bartosz Taudul 9f2ffb05ac Check if memory can be allocated in a thread.
Consider running the following code with operator new and delete overloaded to
track allocations with call stacks:

std::thread( []({ thread_local std::string str; });

Each call stack requires a memory allocation to be performed by the profiler,
to make the stack available at a later time. When the thread is created, the
TLS block is initialized and the std::string buffer can be allocated. To track
this allocation, rpmalloc has to be initialized. This initialization also
happens within the TLS block.

Now, when the thread exits, the heap managed by rpmalloc may be released first
during the TLS block destruction (and if the destruction is performed in
reverse creation order, then it *will* be destroyed first, as rpmalloc was
initialized only after the std::string initialization, to track the allocation
performed within). The next thing to happen is destruction of std::string and
release of the memory block it contains.

The release is tracked by the profiler, and as mentioned earlier, to save the
call stack for later use, a memory allocation is needed. But the allocator is
no longer available in this thread, because rpmalloc was released just before!

As a solution to this issue, profiler will detect whether the allocator is
still available and will ignore the call stack, if it's not. The other
solution is to disable the rpmalloc thread cleanup, which may potentially
cause leak-like behavior, in case a large number of threads is spawned and
destroyed.

Note that this is not a water-tight solution. Other functions will still want
to allocate memory for call stacks, but it is rather unlikely that such calls
would be performed during TLS block destruction. It is also possible that the
event queue will run out of allocated space for events at this very moment,
and in such a case the allocator will also fail.
2022-02-14 17:55:46 +01:00
Bartosz Taudul 793e6b0e29 Add rpmalloc thread state accessor. 2022-02-14 17:53:27 +01:00
Bartosz Taudul 20680fa6a3 Keep track of rpmalloc thread shutdown state. 2022-02-14 17:52:33 +01:00
Balazs Kovacsics aa44cedcd2 Fix indentation 2022-02-11 17:14:16 +01:00
Balazs Kovacsics a0a56eaf9e Move TRACY_UWP define to own header 2022-02-10 20:26:45 +01:00
Balazs Kovacsics 7169f5f30a Fix compiling TracyClient.cpp on UWP with defined TRACY_ENABLE 2022-02-09 22:14:36 +01:00
Bartosz Taudul f058ad01fc Don't process ring buffers when not connected in on-demand mode. 2022-01-31 20:53:10 +01:00
hulakdar e98f7e5019 Fix potentially unitialized value warning 2022-01-26 21:08:54 +02:00
hulakdar 9fda60820a Silence padding warnings, as this is intended behaviour 2022-01-26 21:08:54 +02:00
Bartosz Taudul 4731bb9ec1 Cast GetProcAddress() ptr to const void*. 2022-01-05 20:03:20 +01:00
Bartosz Taudul 621c68352b Call RtlWalkFrameChain directly from inlined function. 2022-01-01 17:33:39 +01:00
Bartosz Taudul e368266837 Add custom demangler interface. 2021-12-22 18:17:48 +01:00
Bartosz Taudul 2f0d4a7707 Merge pull request #294 from Lectem/symbols_post_init
Call SymLoadModuleEx for modules loaded after init (Fixes #293)
2021-12-22 16:36:08 +01:00
Bartosz Taudul 29dc2fadf9 Do not bail-out on software sampling failure. 2021-12-21 22:09:40 +01:00
Bartosz Taudul f1fa352a13 /sys/kernel/debug/tracing/... files are accessible on android. 2021-12-21 21:10:17 +01:00
Bartosz Taudul efae847690 Replace getline(). 2021-12-21 20:28:18 +01:00
Bartosz Taudul 7f10265e34 Keep ring buffer size unsigned. 2021-12-21 20:24:52 +01:00
Bartosz Taudul 81ae7c06b8 Android libstdc++ is really stupid, it seems. 2021-12-21 19:56:32 +01:00
Bartosz Taudul 5741bcfd32 Make ring buffer size adjustable.
If call stack capture is enabled for context switch data, the 64KB buffer is
too small to work without overruns. However, if the default buffer size is
increased, then the maximum locked memory limit is hit.

This change keeps the small buffer size for all the buffers that may be used
without escalated privileges. The context switch buffer is bigger, but it does
not need to obey the limits, as the application is running as root, if it is
to be used.
2021-12-21 15:48:40 +01:00
Bartosz Taudul d88bf2c7a8 Separate message type for context switch callstack samples. 2021-12-21 14:05:07 +01:00
Bartosz Taudul 0ba2c0a86e Collect context switch callstack on Linux. 2021-12-21 13:59:16 +01:00
Bartosz Taudul 0c041795b6 Move Linux calltrace processing to a separate function. 2021-12-21 13:58:43 +01:00
Bartosz Taudul 4a89a30556 Implement checking if any TID is within current process. 2021-12-21 13:52:52 +01:00
Bartosz Taudul b8d7824a4f Increase ring buffer size. 2021-12-21 13:27:08 +01:00
Lectem 5d0466b729 Rename GetModuleName and call it before sym* use 2021-12-12 14:32:24 +01:00
Lectem 17855cbac5 Call SymLoadModuleEx for modules loaded after init
This fixes issue #293. Symbols are not loaded if the module is loaded dynamically after the SymInitialize call.
This may stall the symbol resolver thread a bit the first time a module is loaded.
2021-12-08 21:30:06 +01:00
Bartosz Taudul 14cdf3d43e Use perf_event_open for context switch tracking. 2021-12-05 12:02:28 +01:00
Bartosz Taudul 0a3da9efdb Optional CPU idx storage in RingBuffer. 2021-12-05 03:03:14 +01:00
Bartosz Taudul 6a0d233613 Proper mmap failure detection. 2021-12-05 01:32:33 +01:00
Bartosz Taudul 22284d57e7 Don't identify samples if there will be no context switches. 2021-12-05 01:32:30 +01:00
Nathan Day bdafd0c7b6 Added IsConnected C API Equivalent 2021-12-04 16:55:41 +00:00
Bartosz Taudul 20f8c8b8a4 Add IdentifySamples flag to the protocol.
On Windows there is no way to distinguish callstack data coming from random
sampling and from context switches. Each callstack timestamp has to be matched
against the context switch data in order to decide its origin. This is
obviously non-trivial.

On some other platforms, the origin information may be available right away,
in which case the process of matching against the context switch data, which
possibly includes postponing callstacks for processing in the future, may be
completely omitted.
2021-12-04 14:50:25 +01:00
Bartosz Taudul 2008c88983 Silence compiler warnings. 2021-12-04 13:41:55 +01:00
Bartosz Taudul 74e2a63516 Don't require time to be available for samples. 2021-12-02 01:29:22 +01:00
Bartosz Taudul 051b1ba8f5 Display sampling disabled message on debug log channel. 2021-12-02 00:49:01 +01:00
slembcke 87a727dd7f Add fibers to TracyC.h 2021-11-26 16:49:39 -06:00
Bartosz Taudul d41447b0c9 Pass full module path to LoadLibraryEx(). 2021-11-25 23:27:20 +01:00