Commit Graph

1175 Commits

Author SHA1 Message Date
Bartosz Taudul
887826a28a
Remove dead code. 2021-11-03 18:58:53 +01:00
Bartosz Taudul
fceb065329
Fiber name transport. 2021-11-03 18:57:30 +01:00
Bartosz Taudul
229d547e91
Add fiber support on client side. 2021-11-02 00:11:09 +01:00
Bartosz Taudul
8b15cd049c
Skip comparing known to be matching memory. 2021-10-30 01:26:31 +02:00
Bartosz Taudul
1ecdb8aa2a
Report device name on Android. 2021-10-26 18:09:56 +02:00
Bartosz Taudul
bd108220cb
Drain symbols queue if on-demand and not connected. 2021-10-23 01:54:38 +02:00
Bartosz Taudul
3d13ec7018
Pump symbols queue during profiler termination. 2021-10-23 01:47:04 +02:00
Bartosz Taudul
fe9c63b8d2
Signal symbol resolution thread destruction. 2021-10-23 01:46:00 +02:00
Bartosz Taudul
02ce9b7d8b
Extract symbol queue item handling. 2021-10-23 01:35:01 +02:00
Bartosz Taudul
2b9265cc40
Move symbol resolution to a separate thread. 2021-10-22 22:25:09 +02:00
Bartosz Taudul
b4cfb1f2d5
Add SPSC symbol queue. 2021-10-22 22:22:27 +02:00
Bartosz Taudul
f2b0aadedc
Return external names, instead of sending them.
Note that the old function is still used by code, so this commit won't
compile.
2021-10-22 22:20:30 +02:00
Bartosz Taudul
af5da6f53c
Move inline string copy helpers to a separate header. 2021-10-22 21:53:46 +02:00
Bartosz Taudul
75f77a068f
Use rpmalloc in readerwriterqueue. 2021-10-22 20:39:10 +02:00
Bartosz Taudul
60b36df077
Cosmetics. 2021-10-21 01:49:20 +02:00
Bartosz Taudul
6c53c36bfe
Remove server query quota. 2021-10-21 01:48:52 +02:00
Bartosz Taudul
93b6fd72c3
Keep lock until we're done with the data. 2021-10-21 01:31:03 +02:00
Bartosz Taudul
4348c5428d
Returned strings may be invalidated, so copy them. 2021-10-21 01:30:17 +02:00
Bartosz Taudul
ff54317a87
Move EnsureReadable() and co. to top of source file. 2021-10-21 00:06:14 +02:00
Bartosz Taudul
6d490ffd28
Revert "Use SPSC queue for frame images."
This reverts commit 02e76faff7.

Let's not limit frame image reporting to just one thread.
2021-10-20 23:18:03 +02:00
Bartosz Taudul
ce2a7d6741
Offset field is not used. 2021-10-20 22:57:23 +02:00
Bartosz Taudul
02e76faff7
Use SPSC queue for frame images. 2021-10-20 22:57:23 +02:00
Bartosz Taudul
ff3382391e
Remove BlockingReaderWriterQueue and semephores. 2021-10-20 22:57:22 +02:00
Bartosz Taudul
3d21c4e7ea
Add amalgamated readerwriterqueue 1.0.5. 2021-10-20 22:45:30 +02:00
Bartosz Taudul
a1511a39bd
Delta-encode code information pointers. 2021-10-16 16:29:06 +02:00
Bartosz Taudul
5ccf369919
Implement callstack serialization. 2021-10-10 16:14:17 +02:00
Bartosz Taudul
a421083e58
Crash reports may be serialized. 2021-10-10 15:58:24 +02:00
Bartosz Taudul
082255f940
Messages may now use serialized queue. 2021-10-10 15:54:21 +02:00
Bartosz Taudul
20074e64f4
Fix processing of serialized zone color, value and validation. 2021-10-10 14:43:36 +02:00
Bartosz Taudul
909f5916b1
Use possibly-synchronous macros for C API zones. 2021-10-09 15:51:29 +02:00
Bartosz Taudul
2cea5bc5b2
Add C API async-or-sync queue macros. 2021-10-09 15:50:30 +02:00
Bartosz Taudul
5835011d0f
Allow serialized zone validation. 2021-10-09 15:50:09 +02:00
Bartosz Taudul
7527f33d6c
Handle serialized zones. 2021-10-09 15:31:45 +02:00
Bartosz Taudul
2eeade89ba
Add macro for handling serial dequeue thread context checks. 2021-10-09 15:30:58 +02:00
Bartosz Taudul
2d5d4293a9
Move thread context check to a separate function. 2021-10-09 15:16:36 +02:00
Bartosz Taudul
13acec38f7
Use the possibly-synchronous macros in C++ zones. 2021-10-09 14:58:33 +02:00
Bartosz Taudul
6411b35d68
Provide macros for async-or-sync queue insertion.
If fibers are enabled, then some events which were traditionally stored in
async queues will have to be serialized. These macros provide the needed
infrastructure for this.
2021-10-09 14:55:32 +02:00
Bartosz Taudul
250ef2cf6e
Change thread id size from 64 to 32 bits.
Both Windows and Linux use 32-bit thread identifiers. MacOS has a 64-bit
counter, but in practice it will never overflow during profiling and no false
aliasing will happen.

These changes are only done client-side and in the network protocol. The
server still uses 64-bit thread identifiers, to enable virtual threads, etc.
2021-10-08 00:42:52 +02:00
Bartosz Taudul
07bc665d8c
Drop support for Cygwin. 2021-10-07 23:28:40 +02:00
Bartosz Taudul
12f693372a
Cosmetics. 2021-10-07 23:28:31 +02:00
Simonas Kazlauskas
54ee3d8a94 Expose TRACY_MANUAL_LIFETIME APIs to C API clients
These are extremely useful for ecosystems such as Rust. There are a
couple of reasons why:

1. Rust strongly advises against relying on life before/after main, as
   it is difficult to reason about. Most users working in Rust will
   generally be quite surprised when encountering this concept.
2. Rust and its package manager makes it easy to use packages (crates)
   and somewhat less straightforward to consider the implications of
   including a dependency.

   In case of the `rust_tracy_client` set of packages, I currently have
   to warn throughout the documentation of the package that simply
   adding a dependency on the bindings package is sufficient to
   potentially accidentally broadcast a lot of information about the
   instrumented binary to the broader world. This seems like a major
   footgun given how easy is it to forget about having added this
   dependency.

Ability to manually manage the lifetime of the profiler would be a great
solution to these problems.
2021-09-18 14:54:00 +03:00
Michal Ziulek
789328f73d
Undo my previous change.
-D_WIN32_WINNT=0x601 must be defined when building TracyClient.cpp for mingw-w64 on Windows. In that case definitions I've added are not needed.
2021-09-17 11:34:40 +02:00
Michal Ziulek
ad97854f12
Fixed compile error when using zig cc. 2021-09-14 19:30:20 +02:00
Bartosz Taudul
924224501e
Remove exception handler during profiler destruction. 2021-07-25 11:48:27 +02:00
Bartosz Taudul
61c9e8e6d8
Crash handler may be not installed. 2021-07-25 11:46:20 +02:00
Bartosz Taudul
54fa21bcbb
Restore original signal handlers on profiler exit. 2021-07-25 11:40:22 +02:00
JIA-ss
5936e7c86c
Multi Dll Proj will Crash, Under Unity (#244) 2021-07-25 11:28:42 +02:00
Bartosz Taudul
32b1e8dcb0
No kernel symbol on macos. 2021-06-20 19:35:05 +02:00
Bartosz Taudul
c445c3805c
Merge remote-tracking branch 'origin/master' into hw 2021-06-20 11:13:02 +02:00
Andrey Voroshilov
5670493757 Fix compilation warning 2021-06-19 23:26:03 -07:00
Bartosz Taudul
ee13d3fa44
Retrieve address of symbol, not first instruction in line. 2021-06-19 19:52:33 +02:00
Bartosz Taudul
fe7db6db4e
Send symbol address in code information message. 2021-06-19 19:07:56 +02:00
Bartosz Taudul
3ce2f6209a
Return symbol address in DecodeCodeAddress(). 2021-06-19 19:02:08 +02:00
Bartosz Taudul
7e1622083e
Use monotonic raw clock for hardware sampling. 2021-06-19 13:40:31 +02:00
Bartosz Taudul
7086f2db65
Merge branch 'master' into hw 2021-06-17 01:37:10 +02:00
Bartosz Taudul
fde62b4e6e
Dynamically load some dbghelp functions. 2021-06-17 01:34:45 +02:00
Bartosz Taudul
50e0d4781b
No kernel cache on cygwin. 2021-06-16 00:51:30 +02:00
Bartosz Taudul
f1bf663160
Load kernel symbols. 2021-06-15 21:28:32 +02:00
Bartosz Taudul
2d5f6a411c
Add windows kernel module discovery. 2021-06-15 21:28:32 +02:00
Bartosz Taudul
8fa9860764
Load windows device drivers list. 2021-06-15 21:28:31 +02:00
Bartosz Taudul
bdb11f6e48
Use same kernel module name as on Linux. 2021-06-15 02:31:51 +02:00
Bartosz Taudul
6d03b18d1c
Don't filter out kernel frames on win32. 2021-06-15 01:40:21 +02:00
Bartosz Taudul
697ec4372e
Set combine samples flag on win32. 2021-06-15 01:32:18 +02:00
Bartosz Taudul
06dcdd342f
Combine flags in welcome message. 2021-06-15 01:26:50 +02:00
Bartosz Taudul
004681b02b
Merge remote-tracking branch 'origin/master' into hw 2021-06-14 23:54:34 +02:00
Bartosz Taudul
d07db80b44
Fix rpmalloc init for shared libraries. 2021-06-13 12:15:36 +02:00
Bartosz Taudul
698e5f0210
Probe precise_ip for software sampling. 2021-06-13 01:21:09 +02:00
Bartosz Taudul
1f07a4ce35
One more query to acknowledge. 2021-06-13 01:08:04 +02:00
Bartosz Taudul
b35dfe71d1
Send kernel symbol information. 2021-06-12 16:08:50 +02:00
Bartosz Taudul
4dc05ab858
Implement retrieval of kernel symbol names. 2021-06-12 15:27:35 +02:00
Bartosz Taudul
0168ab6535
Server queries must be always acknowledged. 2021-06-12 14:44:55 +02:00
Bartosz Taudul
0a954fda87
Capture kernel frames on Linux.
Garbage frames ("markers") have to be filtered out.
2021-06-12 14:36:07 +02:00
Bartosz Taudul
ed50447f7a
Use alias for s_ring[i]. 2021-06-12 13:13:53 +02:00
Bartosz Taudul
f4c95eb021
Load linux kernel symbols list. 2021-06-11 01:31:02 +02:00
Bartosz Taudul
ca2130d56c
Process all data available in ring buffers. 2021-06-10 02:07:29 +02:00
Bartosz Taudul
5b7cd06840
Don't init rpmalloc, if we know it has been done already. 2021-06-10 01:48:11 +02:00
Bartosz Taudul
9c2ea8a71f
Specify minimum length of subframe skip in one place. 2021-06-09 02:13:00 +02:00
Bartosz Taudul
e1c3babf43
Check whole ignore list on ARM. 2021-06-09 02:06:28 +02:00
Bartosz Taudul
c79bfa349f
Update ARM CPU parts list. 2021-06-04 19:41:59 +02:00
Bartosz Taudul
ecf0e3d587
Update apple devices list. 2021-06-04 19:16:51 +02:00
Bartosz Taudul
859aa3b2b0
Setup system tracing before launching profiler threads.
This makes sure that profiler threads are properly included in sample data on
Linux. This was previously working because sample capture was performed
system-wide. Now samples are only captured in client context, which includes
all spawned threads. Since this inclusion only works for threads which will be
spawned after the trace starts, no thread can be created before sampling setup
is done.
2021-06-04 14:07:46 +02:00
Bartosz Taudul
2765be92fb
Sample time for hardware samples. 2021-06-04 12:50:55 +02:00
Bartosz Taudul
1616411257
Use AVX2 to search in strings with 32-byte blocks. 2021-06-03 13:49:38 +02:00
Bartosz Taudul
348582d6e4
Search for string matches with 8-byte blocks. 2021-06-03 13:10:26 +02:00
Bartosz Taudul
f8bb24ed36
Search for a character in string in 8-byte blocks. 2021-06-03 12:47:00 +02:00
Bartosz Taudul
483d31c1f4
Ringbuffer tail is not updated by kernel. 2021-06-03 01:14:44 +02:00
Bartosz Taudul
eb38640114
Fix uninitialized pointer. 2021-06-03 00:53:49 +02:00
Bartosz Taudul
b79014f3ee
Optimize parsing numbers.
Don't read byte-by-byte, process data in 8-byte packets.
2021-06-03 00:27:01 +02:00
Bartosz Taudul
b7c5939bb8
Merge remote-tracking branch 'origin/master' into hw 2021-06-02 01:12:28 +02:00
Bartosz Taudul
f4d80a4f5f
Fix rpmalloc init for TRACY_MANUAL_LIFETIME path. 2021-05-31 22:55:30 +02:00
Bartosz Taudul
3da84d1579
Hide rpmalloc init behind thread local boolean. 2021-05-31 22:38:22 +02:00
Bartosz Taudul
b0fc0d5dcc
Check if rpmalloc has to be initialized before each operation.
The C++11 spec states in [basic.stc.thread] thread storage duration:

2. A variable with thread storage duration shall be initialized before its
   first odr-use (3.2) and, if constructed, shall be destroyed on thread exit.

Previously Tracy relied on the TLS data being initialized:
- During thread creation (MSVC).
- Or during first use in a thread, but the initialization was performed for
  the whole TLS block.

It seems that new compilers are more granular with how they perform the
initialization, hence rpmalloc init has to be checked before each allocation,
as it cannot be "folded" into, for example, initialization of the profiler
itself.
2021-05-31 02:31:42 +02:00
Bartosz Taudul
92fb197aac
Use weak compare, yield thread. 2021-05-31 02:22:13 +02:00
Bartosz Taudul
3feb2473a2
Fix rpmalloc on ios.
https://github.com/mjansson/rpmalloc/issues/146
2021-05-30 13:38:29 +02:00
Bartosz Taudul
4fc02f5680
Ignore intrinsic wrappers during code location resolution. 2021-05-24 00:02:44 +02:00
Bartosz Taudul
cfb6d0d2ae
Timestamp conversion might be temporarily unavailable. 2021-05-23 20:32:09 +02:00
Bartosz Taudul
233a0bb6d6
Set precise_ip to 0 for cache on Intel.
Fuck knows how this is supposed to work. perf_event_open() opens the
descriptor successfully, but it produces no samples, if precise_ip is not 0.
There are no such problems on ARM (where precise_ip is 3, but maybe it is not
supported at all on that architecture, again, fuck knows if), and on AMD
perf_event_open() does not succeed when precise_ip > 0.
2021-05-23 19:45:13 +02:00
Bartosz Taudul
b2d5fe8e1f
Reduce sampling frequency. 2021-05-23 19:03:11 +02:00
Bartosz Taudul
b1e4d16537
PIDs are no longer needed in samples. 2021-05-23 19:00:45 +02:00
Bartosz Taudul
bbd1c4505c
Restrict perf to return events only for the current PID. 2021-05-23 18:53:09 +02:00
Bartosz Taudul
4ad6f682c8
Exclude VM-related stuff. 2021-05-23 18:44:16 +02:00
Bartosz Taudul
fece23a32b
Set frequency, not period.
This enables sampling on ARM dev board.
2021-05-23 18:02:06 +02:00
Bartosz Taudul
7d3119cbac
Remove irrelevant flag. 2021-05-23 18:01:18 +02:00
Bartosz Taudul
34ca6d865e
Sample branches and cache more frequently. 2021-05-22 02:28:32 +02:00
Bartosz Taudul
c7026cbc1f
Reduce hw sample period. 2021-05-22 02:27:34 +02:00
Bartosz Taudul
089eda0be9
Precise_ip should be shared in each pair of counters. 2021-05-22 02:16:49 +02:00
Bartosz Taudul
fef507dfa2
Merge remote-tracking branch 'origin/master' into hw 2021-05-22 02:05:47 +02:00
Bartosz Taudul
68948712b4
Don't sleep if queues are empty, but there's queries to handle. 2021-05-22 01:12:42 +02:00
Bartosz Taudul
1e6aedf9e6
Limit client query response rate.
Original idea by xavier <xavierb@gmail.com>
2021-05-22 01:05:06 +02:00
Bartosz Taudul
d7541bbdba
Allow disabling inline resolution on windows.
Original commit a6b25497 by xavier <xavierb@gmail.com>:

add TRACY_CALLSTACK_IGNORE_INLINES to tradeoff speed vs precision in win32 DecodeCallstackPtr()

SymQueryInlineTrace() is too slow in some cases:
300000 queries backlog getting processed at ~70 per second is prohibitive.

(without inlines resolution, it's more like ~20000 queries per second)
2021-05-21 22:27:35 +02:00
Bartosz Taudul
8ec08465ee
Add debug messages to perf event setup. 2021-05-21 01:47:45 +02:00
Bartosz Taudul
afcebb6e6a
Add debug print macros. 2021-05-21 01:47:31 +02:00
Bartosz Taudul
4d668741eb
Probe for acceptable precise_ip value.
This is stupid, but it's exactly what perf does... Sigh.
2021-05-21 01:33:37 +02:00
Bartosz Taudul
bcb7b94272
Tid is not needed. 2021-05-20 02:39:22 +02:00
Bartosz Taudul
f0f3babacf
Set correct message types. 2021-05-20 02:27:36 +02:00
Bartosz Taudul
5f3d1c0faf
Sample cache and branch stats. 2021-05-20 02:15:23 +02:00
Bartosz Taudul
faf87809d7
Reduce hw sampling rate. 2021-05-20 01:48:52 +02:00
Bartosz Taudul
741de5c8fb
Allow disabling cycle/retirement sampling. 2021-05-19 23:38:32 +02:00
Bartosz Taudul
2e38e70049
Reduce hardware sampling perdiod. Don't sample time. 2021-05-19 23:21:21 +02:00
Bartosz Taudul
101cdd9b4b
Don't send thread id for hw samples. 2021-05-19 22:52:13 +02:00
Bartosz Taudul
7794443453
Collect CPU cycles and instruction retirement events. 2021-05-19 21:09:55 +02:00
Bartosz Taudul
16101571e0
Close perf_event file descriptor on exec. 2021-05-19 21:09:55 +02:00
Bartosz Taudul
9cd1b26bc7
Keep count of ring buffers separate from number of CPUs. 2021-05-19 21:09:55 +02:00
Bartosz Taudul
b7d52d2eab
Store RingBuffer identifier. 2021-05-19 21:09:52 +02:00
Bartosz Taudul
42a272edf5
Allow control of sampling frequency. 2021-05-11 18:31:20 +02:00
Bartosz Taudul
a6c6943a6c
Check if GetThreadDescription() is supported.
This functionality is available since Win 10 1607.
2021-05-04 16:13:42 +02:00
Bartosz Taudul
eb7d220eea
Added support for TRACY_NO_FRAME_IMAGE define. 2021-04-29 20:55:16 +02:00
Bartosz Taudul
56f0bdd571
ARM doesn't follow x64 canonical address requirements. 2021-04-29 18:24:37 +02:00
Bartosz Taudul
505656df5a
Trace frame count may be zero. 2021-04-29 18:24:37 +02:00
JW
915693ac39 Use tracy_malloc rather than 'new' in ProfilerThreadDataKey
This codepath, involving a workaround for GCC < 8.4, called 'new' and
'delete' directly, which could cause infinite recursion when
user-provided versions of those functions were themselves using Tracy
functionality.

Now, this codepath uses Tracy's internal allocator.

See issues #194, #196
2021-04-12 10:06:35 -07:00
Bartosz Taudul
40efbe8529
Use rpmalloc for initialization-related allocations. 2021-04-10 13:02:32 +02:00
Bartosz Taudul
2bb5d126fd
rpmalloc_thread_initialize is called in RPMallocInit. 2021-04-10 12:55:00 +02:00
joshuakr
fa942d18fe Fix spacing 2021-04-09 15:35:44 -07:00
joshuakr
e845c23493 Removed duplicate function 2021-04-09 15:35:07 -07:00
joshuakr
3fad55d7bc Missed one 2021-04-09 15:34:21 -07:00
joshuakr
eac23cead2 PR feedback 2021-04-09 15:33:01 -07:00
Eric van Beurden
fc142b4f9c fixed a build break on AARCH64. 2021-04-09 13:50:35 -07:00
Eric van Beurden
00ac6d1d8e worked around Windows broken getenv() call. 2021-04-09 13:50:02 -07:00
Joshua Kriegshauser
76a02205f3 Fix centos shutdown crash 2021-04-09 11:58:34 -07:00
Bartosz Taudul
c288a7903b
Make {Startup,Shutdown}Profiler() signatures consistent. 2021-03-08 02:39:51 +01:00
Bartosz Taudul
99c6b91c0c
Fix sending GPU context name in on-demand mode. 2021-02-27 19:59:32 +01:00
Bartosz Taudul
c12de1b326
Merge pull request #178 from sideeffects/master
Add IsActive accessor to ScopedZone.
2021-02-16 20:52:29 +01:00
John Lynch
29af8352ee Add IsActive accessor to ScopedZone. 2021-02-12 20:30:43 -06:00
Bartosz Taudul
5ea71ea20d
Apparently program_invocation_short_name may be not defined. 2021-02-11 18:12:59 +01:00
Bartosz Taudul
26a8ec3909 Reuse existing variable. 2021-02-10 18:56:07 +01:00
Bartosz Taudul
5e48eebf26 Fix type in comparison. 2021-02-07 21:08:24 +01:00
Bartosz Taudul
9cfc36f92e Preserve valid order of server query acknowledgements. 2021-02-07 20:53:20 +01:00
Bartosz Taudul
99e68715c7 Include SIGABRT in crash handling. 2021-02-07 19:04:48 +01:00
Bartosz Taudul
ad2062fb40 Last-resort source code transfer from client to server. 2021-02-04 00:45:00 +01:00
Bartosz Taudul
3376620919 Move server query acknowledgement to a separate function. 2021-02-04 00:03:58 +01:00