Commit Graph

362 Commits

Author SHA1 Message Date
Till Rathmann
dd042619e9 Support for multi-DLL projects. 2018-07-31 12:06:04 +02:00
Bartosz Taudul
31c2ddb8ac Rename client's SourceLocation to SourceLocationData. 2018-07-28 00:34:04 +02:00
Bartosz Taudul
3737e122cf Of course, this can't work without stupid fuckery. 2018-07-26 19:59:55 +02:00
Arvid Gerstmann
b8db9df949 Detect glibc explicitly 2018-07-14 13:23:00 +02:00
Arvid Gerstmann
ad48c32e1e Support for callstacks on Linux without glibc 2018-07-14 11:08:17 +02:00
Bartosz Taudul
561d2dc360 Use the fastest mutex available.
The selection is based on the following test results:

MSVC:
=== Lock test, 6 threads ===
=> NonRecursiveBenaphore
     No contention: 11.641 ns/iter
     2 thread contention: 141.559 ns/iter
     3 thread contention: 242.733 ns/iter
     4 thread contention: 409.807 ns/iter
     5 thread contention: 561.544 ns/iter
     6 thread contention: 785.845 ns/iter
=> std::mutex
     No contention: 19.190 ns/iter
     2 thread contention: 39.305 ns/iter
     3 thread contention: 58.999 ns/iter
     4 thread contention: 59.532 ns/iter
     5 thread contention: 103.539 ns/iter
     6 thread contention: 110.314 ns/iter
=> std::shared_timed_mutex
     No contention: 45.487 ns/iter
     2 thread contention: 96.351 ns/iter
     3 thread contention: 142.871 ns/iter
     4 thread contention: 184.999 ns/iter
     5 thread contention: 336.608 ns/iter
     6 thread contention: 542.551 ns/iter
=> std::shared_mutex
     No contention: 10.861 ns/iter
     2 thread contention: 17.495 ns/iter
     3 thread contention: 31.126 ns/iter
     4 thread contention: 40.468 ns/iter
     5 thread contention: 15.677 ns/iter
     6 thread contention: 64.505 ns/iter

Cygwin (clang):
=== Lock test, 6 threads ===
=> NonRecursiveBenaphore
     No contention: 11.536 ns/iter
     2 thread contention: 121.082 ns/iter
     3 thread contention: 396.430 ns/iter
     4 thread contention: 672.555 ns/iter
     5 thread contention: 1327.761 ns/iter
     6 thread contention: 14151.955 ns/iter
=> std::mutex
     No contention: 62.583 ns/iter
     2 thread contention: 3990.464 ns/iter
     3 thread contention: 7161.189 ns/iter
     4 thread contention: 9870.820 ns/iter
     5 thread contention: 12355.178 ns/iter
     6 thread contention: 14694.903 ns/iter
=> std::shared_timed_mutex
     No contention: 91.687 ns/iter
     2 thread contention: 1115.037 ns/iter
     3 thread contention: 4183.792 ns/iter
     4 thread contention: 15283.491 ns/iter
     5 thread contention: 27812.477 ns/iter
     6 thread contention: 35028.140 ns/iter
=> std::shared_mutex
     No contention: 91.764 ns/iter
     2 thread contention: 1051.826 ns/iter
     3 thread contention: 5574.720 ns/iter
     4 thread contention: 15721.416 ns/iter
     5 thread contention: 27721.487 ns/iter
     6 thread contention: 35420.404 ns/iter

Linux (x64):
=== Lock test, 6 threads ===
=> NonRecursiveBenaphore
     No contention: 13.487 ns/iter
     2 thread contention: 210.317 ns/iter
     3 thread contention: 430.855 ns/iter
     4 thread contention: 510.533 ns/iter
     5 thread contention: 1003.609 ns/iter
     6 thread contention: 1787.683 ns/iter
=> std::mutex
     No contention: 12.403 ns/iter
     2 thread contention: 157.122 ns/iter
     3 thread contention: 186.791 ns/iter
     4 thread contention: 265.073 ns/iter
     5 thread contention: 283.778 ns/iter
     6 thread contention: 270.687 ns/iter
=> std::shared_timed_mutex
     No contention: 21.509 ns/iter
     2 thread contention: 150.179 ns/iter
     3 thread contention: 256.574 ns/iter
     4 thread contention: 415.351 ns/iter
     5 thread contention: 611.532 ns/iter
     6 thread contention: 944.695 ns/iter
=> std::shared_mutex
     No contention: 20.805 ns/iter
     2 thread contention: 157.034 ns/iter
     3 thread contention: 244.025 ns/iter
     4 thread contention: 406.269 ns/iter
     5 thread contention: 387.985 ns/iter
     6 thread contention: 468.550 ns/iter

Linux (arm64):
=== Lock test, 6 threads ===
=> NonRecursiveBenaphore
     No contention: 20.891 ns/iter
     2 thread contention: 211.037 ns/iter
     3 thread contention: 409.962 ns/iter
     4 thread contention: 657.441 ns/iter
     5 thread contention: 828.405 ns/iter
     6 thread contention: 1131.827 ns/iter
=> std::mutex
     No contention: 50.884 ns/iter
     2 thread contention: 103.620 ns/iter
     3 thread contention: 332.429 ns/iter
     4 thread contention: 620.802 ns/iter
     5 thread contention: 783.943 ns/iter
     6 thread contention: 834.002 ns/iter
=> std::shared_timed_mutex
     No contention: 64.948 ns/iter
     2 thread contention: 173.191 ns/iter
     3 thread contention: 490.352 ns/iter
     4 thread contention: 660.668 ns/iter
     5 thread contention: 1014.546 ns/iter
     6 thread contention: 1451.553 ns/iter
=> std::shared_mutex
     No contention: 64.521 ns/iter
     2 thread contention: 195.222 ns/iter
     3 thread contention: 490.819 ns/iter
     4 thread contention: 654.786 ns/iter
     5 thread contention: 955.759 ns/iter
     6 thread contention: 1282.544 ns/iter
2018-07-14 00:39:01 +02:00
Arvid Gerstmann
9ac47eef0a Merged in Leandros99/tracy/dev (pull request #9)
Couple of minor compatibility fixes
2018-07-13 22:05:13 +00:00
Bartosz Taudul
e285c837a4 Support TRACY_NO_EXIT env variable in addition to define. 2018-07-13 23:55:40 +02:00
Arvid Gerstmann
32fc011f80 Silence unused parameter warning 2018-07-13 23:39:25 +02:00
Bartosz Taudul
c3ba0ef4eb Fix lua zone state init. 2018-07-13 20:21:50 +02:00
Bartosz Taudul
26f2cb336e Return value from non-void function. 2018-07-13 20:12:39 +02:00
Bartosz Taudul
a3c898f8b8 Rename FrameMark() to SendFrameMark().
This avoids conflict with FrameMark define.
2018-07-13 20:09:19 +02:00
Arvid Gerstmann
6b87aecdce Wrap concurrentqueue in tracy namespace 2018-07-13 20:01:27 +02:00
Bartosz Taudul
b11695111d Implement on-demand Lua zone capture. 2018-07-12 12:53:35 +02:00
Bartosz Taudul
fbc5556ddd Send memory events in on-demand mode. 2018-07-12 01:36:01 +02:00
Bartosz Taudul
26d5c4b302 Fix copy pasta. 2018-07-11 14:43:38 +02:00
Bartosz Taudul
96f39281a1 Implement on-demand locks. 2018-07-11 14:17:20 +02:00
Bartosz Taudul
d87508901f Send deferred data. 2018-07-11 12:28:40 +02:00
Bartosz Taudul
ad0a75da7d Defer lock announcements. 2018-07-11 12:24:58 +02:00
Bartosz Taudul
475d151b2d Implement deferring items. 2018-07-11 12:21:39 +02:00
Bartosz Taudul
a99d74966c Active status of scoped zone can't change. 2018-07-11 12:16:55 +02:00
Bartosz Taudul
52207f20b7 Add deferred events queue. 2018-07-11 12:14:28 +02:00
Bartosz Taudul
c2659473fd Free memory associated with cleared queue items. 2018-07-11 01:34:48 +02:00
Bartosz Taudul
b1a71174db Messages are also safe. 2018-07-10 23:09:59 +02:00
Bartosz Taudul
e80c677fa0 Plots can be safely sent in on-demand mode. 2018-07-10 23:06:27 +02:00
Bartosz Taudul
6a9caabc63 Send on-demand initial payload message. 2018-07-10 22:37:39 +02:00
Bartosz Taudul
43d5ab4382 Count frames in on-demand mode. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
03794a2957 Send frame marks in on-demand mode. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
f8b2ffdc7e Clear queues before new on-demand connection is made. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
a767c5ea08 Trace zones in on-demand mode. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
c973735b49 Track connection status. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
010b19946f Send on-demand status in welcome message. 2018-07-10 21:44:23 +02:00
Bartosz Taudul
c056f3be41 Send keep alive messages to determine if client disconnected. 2018-07-10 21:39:17 +02:00
Bartosz Taudul
e5b133073c Disable all tracing if TRACY_ON_DEMAND is defined. 2018-07-10 20:49:51 +02:00
Tobias Widlund
626a995c63 Add size_t casts in asserts to get rid of sign-compare warnings on GCC 2018-07-01 20:02:53 +02:00
Tobias Widlund
273355b665 Change system include from using "" to <> 2018-06-30 16:00:51 +02:00
Tobias Widlund
b6cce4ddb6 Improve fixes for warnings as per request 2018-06-30 15:36:06 +02:00
Tobias Widlund
1c467a5847 Fix warning re shadowing, implicit conversion and added include <cstdio> 2018-06-30 11:47:27 +02:00
Bartosz Taudul
b29d60056a Custom per-zone name transfer. 2018-06-29 16:01:31 +02:00
Bartosz Taudul
84c34ad826 Handle unicode builds. 2018-06-25 10:55:07 +02:00
Bartosz Taudul
64a38c591b Don't perform multiple NeedDataSize checks. 2018-06-23 02:19:23 +02:00
Bartosz Taudul
4d197ec7a2 Unsafe version of AppendData. 2018-06-23 02:16:58 +02:00
Bartosz Taudul
a2c6848433 Send callstack payload without iteration, if possible. 2018-06-23 02:13:52 +02:00
Bartosz Taudul
a7ace6ef9e Directly use RtlWalkFrameChain.
RtlCaptureStackBackTrace is just a wrapper for RtlWalkFrameChain.
2018-06-23 02:07:47 +02:00
Bartosz Taudul
19e83b434e Increase max length of symbol on windows. 2018-06-23 00:27:14 +02:00
Bartosz Taudul
f0ce7de193 Move callstack collection in mem events out of critical section. 2018-06-22 23:00:03 +02:00
Bartosz Taudul
55ddb64352 GPU context counter is now 8 bit. 2018-06-22 15:10:23 +02:00
Bartosz Taudul
b6088b908f Callstack capture for ZoneBegin. 2018-06-22 00:56:30 +02:00
Bartosz Taudul
bf7402e8b0 Android callstack collection using _Unwind_Backtrace(). 2018-06-21 17:07:21 +02:00
Bartosz Taudul
0c13fb818b Initialize rpmalloc in Mem{Alloc,Free}Callstack().
rpmalloc may still be uninitialized here (i.e. if memory allocation/free
is performed before any other tracy operation that would initialize
thread_local data). Since memory allocations are using serialized queue
(which is not held in thread_local section) and obtaining callstack
involves memory allocation, we need to initialize rpmalloc manually.

This won't be a problem when support for zone callbacks becomes online,
because zones are stored in per-thread queues, which initialize
thread_local data before rpmalloc is needed in the Callstack() call.
2018-06-21 17:02:40 +02:00
Bartosz Taudul
937141b7e3 Include symbol address in location field on linux. 2018-06-21 13:14:13 +02:00
Bartosz Taudul
b3ca36f3f4 Include symbol offset in symbol name on linux. 2018-06-21 13:10:48 +02:00
Bartosz Taudul
909166daf7 Hide SendCallstackMemory(). 2018-06-20 23:30:19 +02:00
Bartosz Taudul
8c46ad81d5 Extract common code. 2018-06-20 23:29:44 +02:00
Bartosz Taudul
32278364cd Demangle symbol names. 2018-06-20 23:01:00 +02:00
Bartosz Taudul
c8f51d7f11 More involved callstack frame description on linux. 2018-06-20 22:54:42 +02:00
Bartosz Taudul
36d81412a0 Fix copy pasta. 2018-06-20 22:27:46 +02:00
Bartosz Taudul
601c80466c Fix use-after-free. 2018-06-20 22:18:12 +02:00
Bartosz Taudul
5541cd6c97 Linux callstack retrieval. 2018-06-20 21:54:11 +02:00
Bartosz Taudul
b4b08a0b29 Windows header poisoning should be avoided only in headers.
This fixes cygwin.
2018-06-20 21:01:25 +02:00
Bartosz Taudul
45cec65eef Don't assign const char ptr to char ptr. 2018-06-20 20:35:57 +02:00
Bartosz Taudul
e495747b88 Fix off-by-one. 2018-06-20 17:02:05 +02:00
Bartosz Taudul
88b1955a5a Filename in callstack frame is not a persistent pointer. 2018-06-20 01:26:05 +02:00
Bartosz Taudul
5177a7b960 Callstack frame transfer. 2018-06-20 01:06:31 +02:00
Bartosz Taudul
359feae7ef Symbol retrieval may fail. 2018-06-20 01:05:44 +02:00
Bartosz Taudul
4be2543b2f Cygwin support for callstack tracing. 2018-06-19 19:49:21 +02:00
Bartosz Taudul
9b1fb01e16 Disable Callstack() call if there's no callstack support. 2018-06-19 19:38:30 +02:00
Bartosz Taudul
0a8cd73db7 Issue predictive callback payload transfer. 2018-06-19 19:31:16 +02:00
Bartosz Taudul
51043ebc47 Callstack payload transfer. 2018-06-19 19:31:16 +02:00
Bartosz Taudul
55e6a4a484 No return status is needed here. 2018-06-19 19:00:57 +02:00
Bartosz Taudul
d0d3545988 Optional sending of callstack ptr in memory events. 2018-06-19 18:51:21 +02:00
Bartosz Taudul
d2a98c3090 Configurable callstack depth. 2018-06-19 18:49:13 +02:00
Bartosz Taudul
ca499eefaf Return typeless pointer. 2018-06-19 17:27:03 +02:00
Bartosz Taudul
827900969f Make Callstack() static inline. 2018-06-19 17:23:50 +02:00
Bartosz Taudul
ca2cac9b99 Use proper type for pointer size. 2018-06-19 14:34:37 +02:00
Bartosz Taudul
4a01eb7fc4 Windows callstack inspection plumbing. 2018-06-19 01:17:19 +02:00
Bartosz Taudul
7a23f677dd Vulkan and OpenGL must share idx pool. 2018-06-18 01:10:43 +02:00
Bartosz Taudul
9c11e0fc5b Vulkan tracing. 2018-06-17 18:14:37 +02:00
Bartosz Taudul
3432c594a9 ImplicitProducer is private. 2018-05-08 16:27:52 +02:00
Bartosz Taudul
e2534e2bf6 Forward declare explicit and implicit producers. 2018-05-08 12:33:19 +02:00
Bartosz Taudul
5b6d9769af Properly separate HW timer from MSVC rdtscp optimization. 2018-04-27 19:40:47 +02:00
Bartosz Taudul
237aee30a8 Test if HW timer can be used on arm. 2018-04-27 16:58:45 +02:00
Bartosz Taudul
6a2311a7b7 Arm64 also defines __ARM_ARCH. 2018-04-26 17:39:04 +02:00
Bartosz Taudul
a3f5003f88 Read time from timer register on armv6, armv7.
Same improvement as on aarch64.
2018-04-26 17:18:10 +02:00
Bartosz Taudul
69a50b04c1 Really don't care about cpu id. 2018-04-26 16:12:52 +02:00
Bartosz Taudul
1899066e36 Read time from timer register on arm64.
On ODROID C2 this change improves timer resolution from 250 ns to 41 ns.
2018-04-26 16:03:31 +02:00
Bartosz Taudul
3a20104882 No need for separate tracy_rdtscp() function. 2018-04-26 15:30:53 +02:00
Bartosz Taudul
8cc9464082 Use GetTime() in CalibrateTimer(). 2018-04-26 15:29:09 +02:00
Bartosz Taudul
48665cc09b s/TRACY_RDTSCP_SUPPORTED/TRACY_HW_TIMER/ 2018-04-26 15:25:54 +02:00
Bartosz Taudul
4eb205ad18 Optimize FastVector for fast push_next() operation. 2018-04-14 17:12:41 +02:00
Bartosz Taudul
15219b1481 Support 4-byte size_t. 2018-04-14 16:08:39 +02:00
Bartosz Taudul
459890ef0e Don't hold lock on serial queue during dequeue. 2018-04-14 15:46:11 +02:00
Bartosz Taudul
e1dc62cabe Add fast vector swap. 2018-04-14 15:46:01 +02:00
Bartosz Taudul
7c4075c9ce Fix MemRead() call. 2018-04-03 17:57:12 +02:00
Bartosz Taudul
3ea5600900 Fix UB, lose type safety. 2018-04-03 17:51:53 +02:00
Bartosz Taudul
9c403d9cc2 GetTime() calls also must be serialized. 2018-04-01 21:07:33 +02:00
Bartosz Taudul
794f199bdc Serial queue dequeuing. 2018-04-01 20:04:35 +02:00
Bartosz Taudul
860e0e1809 Store memory operations in the serial queue. 2018-04-01 19:53:24 +02:00
Bartosz Taudul
faeecdd773 Add serial queue to profiler. 2018-04-01 19:53:05 +02:00
Bartosz Taudul
0a3e9f85eb "Fast" vector implementation. 2018-04-01 19:52:29 +02:00