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

120 Commits

Author SHA1 Message Date
John Plate 37bc03fd63 Fix MSVC compiler warning 2023-02-08 13:27:17 +00:00
mwl4 1439e93a69 Fix compilation on linux: always initialize ScopedZone::m_connectionId to 0.
gcc error:
public/tracy/../client/TracyScoped.hpp:102:9: error: ‘___tracy_scoped_zone.tracy::ScopedZone::m_connectionId’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
         if( GetProfiler().ConnectionId() != m_connectionId ) return;
         ^~
2023-01-25 15:11:49 +01:00
mwl4 789f572332 Fix compilation on linux: use abort() instead of assert( false ).
assert() in release configuration resolves to empty code, while abort() is marked as [[noreturn]] and always is available.

gcc error:
error: ‘type’ may be used uninitialized in this function [-Werror=maybe-uninitialized]:
public/tracy/../client/../common/TracyAlign.hpp: In function ‘void tracy::SysTraceWorker(void*)’:
public/tracy/../client/../common/TracyAlign.hpp:22:11: error: ‘type’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
     memcpy( ptr, &val, sizeof( T ) );
     ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from public/TracyClient.cpp:26,
                 from X.cpp:
public/client/TracySysTrace.cpp:1258:35: note: ‘type’ was declared here
                         QueueType type;
                                   ^~~~
2023-01-25 15:08:51 +01:00
Bartosz Taudul d47122586c Fix color channel names in source location message. 2023-01-23 01:23:15 +01:00
Bartosz Taudul 6652999a60 Fix color channels names in zone color message. 2023-01-23 01:18:54 +01:00
Bartosz Taudul eb7c13e7bb Fix message color component names in the protocol.
Red and blue channels were mislabeled. Otherwise, coding and decoding was
performed correctly, as far as the color channel order described in the manual
is followed by the user.

No change to the binary protocol was made.
2023-01-23 01:07:07 +01:00
Bartosz Taudul ecb4a0527a Do not retrieve call stacks if sampling is not requested. 2023-01-05 21:45:44 +01:00
Bartosz Taudul c12505c19d Fix TRACY_NO_CALLSTACK on Windows. 2022-12-22 21:17:31 +01:00
Bartosz Taudul ba6416f68c Merge pull request #497 from pshurgal/detailed_function_names
More detailed function names under Clang and GCC
2022-11-30 12:14:46 +01:00
Petr Shurgalin 5ddf62b54e Customizable source location data 2022-11-30 12:39:50 +02:00
ReplayCoding 311ad7b061 Fix compile error when TRACY_NO_CRASH_HANDLER is enabled 2022-11-27 13:40:45 -08:00
Bartosz Taudul 2c03306341 Always provide Callstack() implementation, even if dummy.
This fixes usage with TRACY_HAS_CALLSTACK undefined, allowing compilation of
otherwise unused functions, which are already protected from being called
through macro redirections.

See https://github.com/wolfpld/tracy/pull/492 for more information.
2022-11-09 21:55:41 +01:00
Bartosz Taudul 6c74320b3e Merge pull request #488 from xxxbxxx/master
Added typed plots variants to the C API
2022-11-03 19:28:04 +01:00
Bartosz Taudul e7ac54fba6 Signals are only set if TRACY_NO_CRASH_HANDLER is not defined. 2022-11-03 17:21:09 +01:00
xxxbxxx a0cb8eb1d5 Added typed plots variants to the C API 2022-11-03 13:47:04 +01:00
Bartosz Taudul 970468f937 Override dlclose() to do nothing.
Provide a custom no-op implementation of dlclose(), in order to prevent shared
object data from disappearing from profiler view. The server makes queries for
program executable code, which has to be always available, otherwise wrong
data may be provided, or the program may crash, due to referencing no longer
mapped memory.

The dlclose() documentation states that the function internally decreases the
reference count, and only does unload the shared object when the count reaches
zero. There is no guarantee that the shared object data will be unloaded
immediately after any dlclose call originating from the program. This function
override exploits this fact.
2022-10-28 01:21:52 +02:00
Bartosz Taudul 898140fbda Don't read payload.extra, if not needed. 2022-10-28 00:34:46 +02:00
Bartosz Taudul b88ef29792 Make sure source file data is properly tracked. 2022-10-13 19:00:22 +02:00
Bartosz Taudul a85c0e18d2 Decouple source code retrieval from the profiler thread.
This will prevent apparent freezes of the profiler when debuginfod queries are
made.
2022-10-13 00:30:17 +02:00
Bartosz Taudul 6ca1c98655 Handle symbol thread crashes.
Should the symbol thread crash, mark that it is gone. This will allow the
profiler to transmit crash call stack, including resolved symbol names and
locations (which will resolve on the main profiler thread).
2022-10-13 00:30:17 +02:00
Bartosz Taudul 9657bdec72 Initialize rpmalloc properly in symbol worker. 2022-10-12 23:51:50 +02:00
Bartosz Taudul 4416dff342 Increase extra data in SymbolQueueItem to 64 bit. 2022-10-12 22:23:06 +02:00
Bartosz Taudul f64fb95a77 Fix preprocesor condition. 2022-10-12 22:05:19 +02:00
Bartosz Taudul 8ca4bc761d s_symbolTid is only available if crash handler is there. 2022-10-12 19:56:46 +02:00
Bartosz Taudul a235dca7ea Cleanup. 2022-10-12 01:42:22 +02:00
Bartosz Taudul 383ecb6a12 Remove CodeLocation query and CodeInformation response. 2022-10-11 22:56:23 +02:00
Bartosz Taudul f509ed1561 Include PID in broadcast message. 2022-10-09 21:54:54 +02:00
Bartosz Taudul f476e6a0f7 Ditto on windows. 2022-10-08 14:09:58 +02:00
Bartosz Taudul 2c289dbb84 Do not freeze symbol thread. 2022-10-08 14:08:31 +02:00
Bartosz Taudul 4399656e83 __GNUC__ version checks are not valid on clang. 2022-10-08 14:04:54 +02:00
Bartosz Taudul 2595f983e6 Include gcc patchlevel in compiler version report. 2022-10-08 14:04:54 +02:00
Bartosz Taudul 6f9dfc8469 Use dladdr, not libbacktrace in fast callstack decode path.
DecodeCallstackPtrFast() may be called outside the symbol processing thread,
for example in the crash handler. Using the less-capable dladdr functionality
doesn't have a big impact here. Callstack decoding in this context is used to
remove the uninteresting top part of the callstack, so that the callstack ends
at the crashing function, and not in the crash handler. Even if this
functionality would be impacted by this change, the damage done is close to
none.

The other alternative is to use locking each time a libbacktrace is to be
used, which does not seem to be worthy to do, considering that the problem
only occurs in a very rare code path.

NB everything was working when it was first implemented, because back then the
callstack decoding was still performed on the main thread, and not on a
separate, dedicated one.
2022-10-08 13:22:56 +02:00
Bartosz Taudul 7552341ff0 Increase possible inline stack size to 64 elements. 2022-10-04 22:16:20 +02:00
Bartosz Taudul aa017e6a76 Merge pull request #468 from sherief/exception-handler-fix
Windows exception handler allows other handlers to be called.
2022-09-15 11:33:39 +02:00
Bartosz Taudul 0fc1c0f927 Make symbol thread exit status more robust. 2022-09-13 21:07:03 +02:00
Sherief Farouk e8b3d22d76 Windows exception handler allows other handlers to be called.
The profiled app might install handlers to track crashes, write minidumps,
etc. - this patch makes sure the app's exception handler is called when
a crash happens while profiling with Tracy.
2022-09-10 17:16:58 -07:00
Pilzschaf a55fd64a5b Added gpu zone begin non-alloc and callstack variants to the C API 2022-09-09 21:23:07 +02:00
Pilzschaf 41a1ac203b Added gpu calibration to the C API 2022-09-09 18:40:17 +02:00
Bartosz Taudul 2cc5eff9a2 Normalize symbol paths on libbacktrace systems. 2022-09-02 01:23:29 +02:00
Bartosz Taudul 8cc43284bd Add path normalization function. 2022-09-02 01:23:14 +02:00
Robert Adam ece8779362 Fix cpuid symbol redefinition on older GCC versions
Since commit 940f32c1a8 building the Tracy
library on Linux using a GCC version < 11 would result in compile errors
due to symbol redefinitions of __get_cpuid_max, __get_cpuid and
__get_cpuid_count.

This is because prior to GCC 11 the cpuid.h header file did not have any
include guards and thus including this header more than once would
produce the abovementioned errors.

To work around this issue, including cpuid.h has been wrapped into a
custom header file that itself uses include guards and thus shields
cpuid.h from being included multiple times.

Fixes #452
2022-08-31 17:59:46 +02:00
Bartosz Taudul 72b7d0db5b Add user data pointer to parameter callback. 2022-08-26 00:46:01 +02:00
Bartosz Taudul 197007ab47 Keep a list of buffers left to handle.
Previously a bitmap of buffers was repeatedly scanned to see which buffers
still contain data. This process was needlessly wasting cycles (seen as a
hotspot when profiled) and worse yet, the workload increased with the number
of CPU cores (=> buffers used) to handle.

The new implementation instead maintains a list of buffer indices that have to
be handled. This list does not contain empty buffers, so each loop iteration
performs some work, instead of just spinning in search for buffers to handle.
2022-08-18 13:59:56 +02:00
Bartosz Taudul 940f32c1a8 Add include for cpuid. 2022-08-18 13:40:37 +02:00
Bartosz Taudul 07a56f1148 Load globals to local variables. 2022-08-18 01:08:22 +02:00
Bartosz Taudul a237f108c7 Use source contents callback. 2022-08-17 16:04:20 +02:00
Bartosz Taudul ed7be2faaa Add source contents callback setup. 2022-08-17 16:04:18 +02:00
Bartosz Taudul 3dc542a464 Log invalid debuginfod queries.
Filename paths must be absolute, not relative.
2022-08-16 22:05:14 +02:00
Bartosz Taudul d32dc47845 Add debug logging for debuginfod queries. 2022-08-16 22:05:08 +02:00
Bartosz Taudul 72ad40698b Move initialization of callstack structs to a thread.
Initializing structures for callstack processing (building memory map of the
process, gathering kernel symbols, etc) takes some time, which in some cases
may be significant.

Callstack queries are now handled on a separate thread. In such setup it no
longer makes sense to block main thread execution with this lengthy init
process.

All the heavy initialization phase has been now moved to this separate
processing thread. Some initial callstack queries may now not produce
responses as promptly as before, but this is only because the main thread is
able to start working earlier.

Some parts of the initialization process may be critical to do in the main
thread, for example because the function responsible for gathering callstacks
must be loaded first. This is done still on the main thread, in a new function
InitCallstackCritical().
2022-08-16 13:55:46 +02:00