Commit Graph

680 Commits

Author SHA1 Message Date
Bartosz Taudul
0258f4a7b4 Handle crashes on windows.
When a crash happens, put all threads (bar the profiler and crash
handling ones) into the freezer, send crash notification message,
request profiler shutdown and when it does, terminate process.

The list of ignored exceptions is sorta-kinda random at the moment and
may need further expansion.
2018-08-20 01:07:33 +02:00
Bartosz Taudul
ca939ccd19 Allow external profiler shutdown requests. 2018-08-20 01:02:27 +02:00
Bartosz Taudul
d63b5431bf Discover linux kernel version. 2018-08-19 19:00:01 +02:00
Bartosz Taudul
f55b99ba7e Fix signed/unsigned. 2018-08-19 18:53:32 +02:00
Bartosz Taudul
e9170c862e System RAM discovery on Linux. 2018-08-19 18:52:04 +02:00
Bartosz Taudul
790a3ae26f Perform windows version discovery. 2018-08-19 18:43:26 +02:00
Bartosz Taudul
bd76f4cd10 Send host info in welcome message. 2018-08-19 18:19:12 +02:00
Bartosz Taudul
9c0e6620b3 Host info discovery. 2018-08-19 18:15:46 +02:00
Arvid Gerstmann
076e83635b Add possibility to explicitly avoid logging 2018-08-13 14:47:52 +02:00
Bartosz Taudul
9d051cf5ee Add support for discontinuous frames. 2018-08-05 02:15:54 +02:00
Bartosz Taudul
9b4348b497 Handle frame name queries. 2018-08-04 21:10:45 +02:00
Bartosz Taudul
adde6cf4fd Allow sending named frames. 2018-08-04 15:04:18 +02:00
Bartosz Taudul
922882d3b0 Add name field to frame mark message. 2018-08-04 15:03:47 +02:00
Till Rathmann
c71d99c134 Minor change: adapted the spaces to tabs at the just inserted line as in tracy_rpmalloc.cpp tabs are used as indentation. 2018-08-02 11:53:04 +02:00
Till Rathmann
4968717313 Fixed compiler warning about unused variable in release builds. 2018-08-02 11:45:15 +02:00
Till Rathmann
3b302315f9 Fixed __ANDROID_API__ < 21 build and FD_SET usage. 2018-08-01 19:18:40 +02:00
Till Rathmann
37d5736bf5 Fixed compiler warnings. 2018-08-01 14:07:30 +02:00
Till Rathmann
2dcfe5fce0 Made s_threadNameDataInstance and s_profilerInstance static. 2018-07-31 13:03:09 +02:00
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
Bartosz Taudul
991fc6bd95 Memory allocations tracker. 2018-03-31 21:56:05 +02:00
Bartosz Taudul
7a35e8facc Fix typo. 2018-03-31 14:19:45 +02:00
Bartosz Taudul
a677048d2b Fix try_lock(). 2018-03-31 14:15:04 +02:00
Bartosz Taudul
3b03e849f0 Harden client code against unaligned memory access.
There shouldn't be any changes in generated code on modern
architectures, as the memcpy will be reduced to a store/load operation
identical to the one generated with plain struct member access.

GetTime( cpu ) needs special handling, as the MSVC intrinsic for rdtscp
can't store cpu identifier in a register. Using intermediate variable
would cause store to stack, read from stack, store to the destination
address. Since rdtscp is only available on x86, which handles unaligned
stores without any problems, we can have one place with direct struct
member access.
2018-03-31 14:15:04 +02:00
Bartosz Taudul
dca7338319 Update rpmalloc to 1.3.0. 2018-03-04 15:51:10 +01:00
Bartosz Taudul
0c1721144e Backport concurrent queue's fixes.
420509b6678263f0fa6c0ffba87a15319238a1f2
2018-03-04 15:32:42 +01:00
Bartosz Taudul
7300c2e46e Fix TRACY_NO_EXIT behavior.
Terminate event could be the first event that was sent. In such case
server immediately closed the connection, as there was no outstanding
data to receive. Fix by sending all data in the queue before sending
terminate event.
2018-01-11 13:45:13 +01:00
Bartosz Taudul
c3a32f9c35 Send lock type in LockWait/LockSharedWait events.
This will be needed for proper construction of LockMap on the server, in
case the LockAnnounce message hasn't arrived yet.
2017-12-17 18:30:34 +01:00
Bartosz Taudul
bcf2bf1c5c Shared lock events (still using old functionality). 2017-12-10 22:04:49 +01:00
Bartosz Taudul
a9e14c8990 Add standard lock events to shared locking. 2017-12-10 21:56:19 +01:00
Bartosz Taudul
782231b048 Shared lockable skeleton. 2017-12-10 21:49:45 +01:00
Bartosz Taudul
3567d7edd8 Reintroduce lock announce events. 2017-12-10 21:40:48 +01:00
Bartosz Taudul
f67465e784 Reduce timer calibration delay to 200 ms. 2017-11-25 13:34:26 +01:00
Bartosz Taudul
48da593ab2 Increase calibration time to half a second. 2017-11-24 01:43:35 +01:00
Bartosz Taudul
c431747f06 Favor transfer of zones without predicted payload. 2017-11-22 02:28:12 +01:00
Bartosz Taudul
630db7112a Leaner iteration in Profiler::Dequeue(). 2017-11-22 02:07:23 +01:00
Bartosz Taudul
a309e71fe1 Move force inline defines to a separate header. 2017-11-19 16:32:38 +01:00
Bartosz Taudul
5da8a7aa9b Optimize deque. 2017-11-15 20:20:02 +01:00
Bartosz Taudul
2f669aea41 Workaround gcc issues. 2017-11-15 10:56:27 +01:00
Bartosz Taudul
c43eb29ce0 Don't send source location pointer in query reply.
Since reply order is the same as the query order, the server already
knows what source location it receives. This observation allows placing
zone name into the source location struct.
2017-11-14 23:06:45 +01:00
Bartosz Taudul
5c872b2137 Simplify GPU context handling. 2017-11-14 00:48:26 +01:00
Bartosz Taudul
3c00ce0958 GPU context registration. 2017-11-11 19:44:09 +01:00
Bartosz Taudul
81735aea2f Support for setting zone names in lua. 2017-11-11 17:56:41 +01:00
Bartosz Taudul
59ec40c045 Preemptive transfer of source location payload. 2017-11-11 15:59:30 +01:00
Bartosz Taudul
7f3b8f4647 Preemptive message text delivery. 2017-11-11 15:41:21 +01:00
Bartosz Taudul
76e11174dc Preemptive sending of custom strings. 2017-11-11 15:22:55 +01:00
Bartosz Taudul
c2797a4cc7 Data packets can't cross data buffer boundary. 2017-11-11 15:08:03 +01:00
Bartosz Taudul
49bce256bc Fix type mismatch. 2017-11-11 14:35:46 +01:00
Bartosz Taudul
0d15d45c3a Don't send source location through the queue. 2017-11-11 14:24:22 +01:00
Bartosz Taudul
065964b216 Send data before sleeping during shutdown. 2017-11-11 14:23:55 +01:00
Bartosz Taudul
fc4e31bb8f Wait for send buffer to be full before sending data. 2017-11-11 14:16:37 +01:00
Bartosz Taudul
fb46b3cf24 Restore process name retrieval on cygwin. 2017-11-10 19:46:31 +01:00
Bartosz Taudul
f6af913fd3 Remove ability to disable LZ4 compression. 2017-11-10 17:34:11 +01:00
Bartosz Taudul
bc77aa8d26 Source location payload transfer. No storage yet. 2017-11-05 16:46:00 +01:00
Bartosz Taudul
3659afac2a Move another big buffer out of stack. 2017-11-02 17:37:10 +01:00
Bartosz Taudul
cea7cdd716 Don't create big buffers on stack. 2017-11-02 12:58:38 +01:00
Bartosz Taudul
230822e18c Enforce proper calling convention on x86. 2017-10-30 21:46:50 +01:00
Bartosz Taudul
cf3d8eb810 Manual collection of thread names on android. 2017-10-30 20:45:00 +01:00
Bartosz Taudul
f861f89134 Disable rdtscp on android. 2017-10-30 16:23:23 +01:00
Bartosz Taudul
8f280b147b Getting program name on android. 2017-10-30 14:59:05 +01:00
Bartosz Taudul
97880a89ae Clobber ecx register. 2017-10-29 16:20:07 +01:00
Bartosz Taudul
a220043114 Add no-cpu GetTime() variant.
In this version the address of cpu output variable is const, so there's
no stack address calculation involved.
2017-10-29 16:12:16 +01:00
Bartosz Taudul
68f5a17bca Use 32-bit registers for rdtscp output. 2017-10-29 13:15:43 +01:00
Bartosz Taudul
03289175ab Lock counter also must be initialized early. 2017-10-24 22:02:49 +02:00
Bartosz Taudul
ad338a7cfd Fix message literals. 2017-10-21 12:39:26 +02:00
Bartosz Taudul
f1da7c1c85 Force TLS block creation on cygwin before malloc. 2017-10-20 18:28:25 +02:00
Bartosz Taudul
1e645665fe Initialize rpmalloc in profiler worker thread.
Thread local variables on gcc are apparently not initialized on thread
startup, but on first access to thread local variables block. Previously
it was working, because s_token was accessed before any rpmalloc
allocation could be performed. Now the first rpmalloc allocation is the
Socket class, and rpmalloc is not initialized there, as there was no
thread local access yet.
2017-10-18 23:30:54 +02:00
Bartosz Taudul
9c4316879c Add TRACY_NO_EXIT macro. 2017-10-18 20:01:12 +02:00
Bartosz Taudul
51013dc0e6 Manual allocation of socket memory. 2017-10-18 19:50:28 +02:00
Bartosz Taudul
fc94378e0c Move TracyAlloc.hpp to common. Use rpmalloc only if TRACY_ENABLE. 2017-10-18 19:50:28 +02:00
Bartosz Taudul
c5ea9c744c Do not disable lz4 in debug builds. 2017-10-18 19:50:28 +02:00
Bartosz Taudul
6a2cbe2842 Rename DISABLE_LZ4 to TRACY_DISABLE_LZ4. 2017-10-18 19:50:22 +02:00
Bartosz Taudul
7c47edc64f Terminate connection handshake. 2017-10-18 18:48:51 +02:00
Bartosz Taudul
d942b7edf1 Don't exit until all data is sent. 2017-10-17 22:02:47 +02:00
Bartosz Taudul
652dccd163 Also no need to construct more than one welcome message. 2017-10-17 21:55:40 +02:00
Bartosz Taudul
5421164f33 No need to get process name more than once. 2017-10-17 21:53:09 +02:00
Bartosz Taudul
1e3476cf36 Transfer profiler initialization time. 2017-10-17 01:10:38 +02:00
Bartosz Taudul
51f5ae4796 More precise profiler init end time measurement. 2017-10-17 01:07:54 +02:00
Bartosz Taudul
0ed789825a Measure time of initialization start. 2017-10-17 01:07:34 +02:00
Bartosz Taudul
866081bf29 Initialize tracy before anything else. 2017-10-17 00:36:15 +02:00
Bartosz Taudul
9d01b508ed One more type cast. 2017-10-17 00:25:32 +02:00
Bartosz Taudul
8a6e4d2971 Change TRACY_DISABLE to TRACY_ENABLE.
By default tracy is now disabled.
2017-10-16 21:34:39 +02:00
Bartosz Taudul
518568a513 Move client/Tracy.hpp -> Tracy.hpp. 2017-10-16 21:28:38 +02:00
Bartosz Taudul
e04bd05606 Always use ShouldExit() to determine if worker should exit. 2017-10-16 21:21:42 +02:00
Bartosz Taudul
9f28205548 Use custom threading wrapper instead of std::thread.
std::thread may perform memory allocation when a thread is created (it
does so on MSVC). Tracy heap is managed by its own allocator and this
changes prevents accessing application heap.
2017-10-16 21:17:58 +02:00
Bartosz Taudul
2f8d3ff5eb Add minimal thread class implementation. 2017-10-16 21:17:58 +02:00
Bartosz Taudul
dafec48319 PAGE_SIZE is already defined in limits.h. 2017-10-16 21:17:58 +02:00
Bartosz Taudul
65c000718b Do not redefine assert macro. 2017-10-16 21:17:58 +02:00
Bartosz Taudul
31fc2335dd Silence some type mismatch warnings. 2017-10-16 21:17:58 +02:00
Bartosz Taudul
3554e4c4ac Prevent clash of likely/unlikely with possible macros. 2017-10-16 21:17:58 +02:00
Bartosz Taudul
5b9fcddfb3 String literal message transfer. 2017-10-15 13:06:49 +02:00
Bartosz Taudul
95439a726a Fix typo. 2017-10-15 13:06:20 +02:00
Bartosz Taudul
9a60c3fb6e Remove unused variable. 2017-10-14 20:03:55 +02:00
Bartosz Taudul
e496f24427 Use standard c++ features. 2017-10-14 18:48:35 +02:00
Bartosz Taudul
bded83e458 Don't include headers in a namespace. 2017-10-14 18:02:01 +02:00
Bartosz Taudul
dc25c46dee No need to init/destroy queue item memory. 2017-10-14 17:39:43 +02:00
Bartosz Taudul
472b5a521f Preallocation size is in number of elements, not bytes. 2017-10-14 17:33:05 +02:00
Bartosz Taudul
40bc4c8015 Missing include. 2017-10-14 17:21:14 +02:00
Bartosz Taudul
19011b3798 Use rpmalloc in concurrentqueue. 2017-10-14 17:19:27 +02:00
Bartosz Taudul
c497966c7f Use rpmalloc to allocate tracy client memory. 2017-10-14 17:15:18 +02:00
Bartosz Taudul
e8968efea7 Initialize rpmalloc. 2017-10-14 17:00:25 +02:00
Bartosz Taudul
b75317be7d Wrap malloc/free. 2017-10-14 16:52:05 +02:00
Bartosz Taudul
b117c56257 Wrap rpmalloc in tracy namespace. 2017-10-14 16:50:08 +02:00
Bartosz Taudul
709d86ad0c Add rpmalloc.
https://github.com/rampantpixels/rpmalloc/tree/master/rpmalloc
2592b551b26d0ac9d1c92db3c1ae6c0ce5cd447a
2017-10-14 16:43:26 +02:00
Bartosz Taudul
fa8030009f Store messages. 2017-10-14 14:28:04 +02:00
Bartosz Taudul
8c7b60fbe6 Allow sending text messages. 2017-10-14 13:23:13 +02:00
Bartosz Taudul
57afeb4588 Queue MUST allocate memory. 2017-10-13 20:33:53 +02:00
Bartosz Taudul
7f36bb6846 Mark unlikely code path.
It also changes MSVC behavior from generating two jumps to just one.
2017-10-13 20:24:11 +02:00
Bartosz Taudul
1aaab3c5e4 Use 32 bits to store lock id.
This makes queue item size 32 bytes. Queue operations can now be faster,
because multiplication by 33 is replaced by shift by 5.
2017-10-13 20:05:38 +02:00
Bartosz Taudul
ec789d60e8 Store source location color in 24 bits. 2017-10-13 19:59:18 +02:00
Bartosz Taudul
fe0366c792 Receive plot data. 2017-10-13 03:36:59 +02:00
Bartosz Taudul
cb0011755d Prevent type conversions. 2017-10-13 02:21:29 +02:00
Bartosz Taudul
f0484b50ca Plot data transfer. 2017-10-13 02:07:03 +02:00
Bartosz Taudul
737671adbf Remove lock announce message.
This removes problem with static initialization order of mutices vs
tracy.

Lock source location is now transferred in lock wait message.
2017-10-12 20:14:17 +02:00
Bartosz Taudul
c42106f4ff Add named version of TracyLockable. 2017-10-12 20:00:53 +02:00
Bartosz Taudul
e23da05a65 Workaround gcc stupidity. 2017-10-11 01:44:35 +02:00
Bartosz Taudul
77dfefb5d0 Remove one stack address load. 2017-10-11 01:27:22 +02:00
Bartosz Taudul
af3773dc9a Remove one level of indirection. 2017-10-11 01:04:21 +02:00
Bartosz Taudul
cc8b357f09 Avoid excessive stack operations for cpu query. 2017-10-10 23:21:30 +02:00
Bartosz Taudul
75457c1465 Remove +x flag from files. 2017-10-10 21:56:15 +02:00
Bartosz Taudul
2c252226fc Force proper initialization order on gcc. 2017-10-09 00:39:12 +02:00
Bartosz Taudul
ef525067c5 Mark tracy::Lockable<>::Mark() as const. 2017-10-06 17:14:57 +02:00
Bartosz Taudul
9736be0321 Force inline lock operations. 2017-10-06 17:05:31 +02:00
Bartosz Taudul
dcd89f894c Add lock marking. 2017-10-06 16:32:32 +02:00
Bartosz Taudul
5f9228d4e6 Fix typo. 2017-10-05 03:07:26 +02:00
Bartosz Taudul
06a08816bd Include data type in tracy::Lockable name. 2017-10-04 18:32:53 +02:00
Bartosz Taudul
8c90eab044 Let's not worry about lock memory reuse. 2017-10-04 16:51:51 +02:00
Bartosz Taudul
0011573fa9 Send lock events. 2017-10-04 16:45:46 +02:00
Bartosz Taudul
78f8425dc7 Announce lock creation. 2017-10-04 16:16:40 +02:00
Bartosz Taudul
a3ef369a56 Lockable wrapper. 2017-10-04 15:41:02 +02:00
Bartosz Taudul
f8e7f7ed83 Cygwin can't determine process name using winapi. 2017-10-04 01:22:22 +02:00
Bartosz Taudul
3f0bd793fd Send program start time, not connection time. 2017-10-04 00:34:05 +02:00
Bartosz Taudul
b2252de9c8 Send and display program execution date. 2017-10-03 23:26:41 +02:00
Bartosz Taudul
cf07383db8 Send program name in welcome message. 2017-10-03 23:17:58 +02:00
Bartosz Taudul
6485457518 Process name getter. 2017-10-03 23:17:16 +02:00
Bartosz Taudul
b1aa16763b Prevent accesing TLS data twice on gcc. 2017-10-03 16:55:04 +02:00
Bartosz Taudul
d1edd30ca6 Zone ids are unnecessary. 2017-10-03 16:41:32 +02:00
Bartosz Taudul
2fb4c47491 Remember to calibrate timer. 2017-10-03 15:35:43 +02:00
Bartosz Taudul
7b1135239c Use rdtscp when there's no intrinsic. 2017-10-03 15:28:31 +02:00
Bartosz Taudul
9cde85646a Fix typo. 2017-10-03 15:16:48 +02:00
Bartosz Taudul
e01d378f52 More force inlining. 2017-10-03 15:10:25 +02:00
Bartosz Taudul
fe41185dc0 More unique force inline macro name. 2017-10-03 14:51:58 +02:00
Bartosz Taudul
ba037e5798 Do not store tail index in memory. 2017-10-03 14:50:55 +02:00
Bartosz Taudul
dbb90e51b0 Force inlining of the hot path. 2017-10-03 14:39:02 +02:00
Bartosz Taudul
353fda95a3 Expose profiler internals to make it easier for inlining.
concurrentqueue.h doesn't bring any poisonous includes, only STL.
2017-10-03 14:22:49 +02:00
Bartosz Taudul
439a23049d Separate enqueue allocation functionality. 2017-10-03 14:13:46 +02:00
Bartosz Taudul
16a49356a0 Remove redundant variable. 2017-10-03 14:00:06 +02:00
Bartosz Taudul
7b583628ad Remove unused variables. 2017-10-03 13:58:12 +02:00
Bartosz Taudul
a1abf1f015 Record CPU id. 2017-10-01 19:17:08 +02:00
Bartosz Taudul
f46781808c Construct queue items directly in queue memory. 2017-10-01 17:49:45 +02:00
Bartosz Taudul
99b8c4c77e Prevent fake loop from optimizing out. 2017-10-01 17:42:22 +02:00
Bartosz Taudul
7b0cbef0d7 Allow manual queue item memory filling. 2017-10-01 17:14:26 +02:00
Bartosz Taudul
efda50acb1 Send timer resolution to server. 2017-09-29 18:32:07 +02:00
Bartosz Taudul
6a2cb2c14e Calculate timer resolution. 2017-09-29 18:29:39 +02:00
Bartosz Taudul
445d2831ed Explicit conversion. 2017-09-29 18:29:32 +02:00
Bartosz Taudul
b9aa10913a Rename internal enum to avoid #define conflicts. 2017-09-28 21:20:33 +02:00
Bartosz Taudul
6ae62e6e5a Missing include. 2017-09-28 21:10:02 +02:00
Bartosz Taudul
8c1c395cec Allow sending custom zone names. 2017-09-28 19:28:24 +02:00
Bartosz Taudul
a572ded1cc Add missing define in disabled section. 2017-09-28 19:20:19 +02:00
Bartosz Taudul
d1bbb731fc Zone text (custom string) transfer. 2017-09-27 02:18:17 +02:00
Bartosz Taudul
3c0ce01954 Simplify access to queue producer token.
Note that calibration loop needs separate token, as the thread_local
instance is created after the profiler (and its calibration loop).
2017-09-27 01:03:29 +02:00
Bartosz Taudul
842721a754 Make profiler instance static. 2017-09-27 01:03:01 +02:00
Bartosz Taudul
3cc7cc596e Remove GetNewId() from Profiler interface. 2017-09-27 01:02:04 +02:00
Bartosz Taudul
f584bf76e8 Profiler ID can be static (one less instruction). 2017-09-27 00:30:02 +02:00
Bartosz Taudul
e076d1d475 Send source location answer in stream, not as separate packet. 2017-09-26 19:00:25 +02:00
Bartosz Taudul
e90a86e06e Store zone color in source location struct. 2017-09-26 18:54:48 +02:00
Bartosz Taudul
7424077d70 Store source location in a single object.
Source file, function name and line number are now stored in a const
static container object. This has the following benefits:
- Slightly lighter profiling workload (3 instructions less).
- Profiling queue event size is significantly reduced, by 12 bytes. This
  has an effect on all queue event types.
- Source location grouping has now no cost, as it's performed at the
  compilation stage. This allows simplification of server code.
The downside is that the full source location resolution is now
performed in two steps, as the server has to query both source location
container and strings contained within. This has almost no real impact
on profiler operation.
2017-09-26 02:39:08 +02:00
Bartosz Taudul
e5ad7d9ac4 GetTime() call can be now inlined.
No dependencies on either windows.h, or static instance of Profiler.
2017-09-26 00:42:09 +02:00
Bartosz Taudul
11a790a18f Offload TSC -> time conversion to server. 2017-09-26 00:13:24 +02:00
Bartosz Taudul
519cb8dff3 Allow adding custom colors to zones. 2017-09-25 22:46:14 +02:00
Bartosz Taudul
206305fbd2 Merge TracyThread.hpp to TracySystem.cpp.
Keeping threading functions inside a source file prevents poisoning by
including windows.h.
2017-09-25 21:13:59 +02:00
Bartosz Taudul
7683da5f74 Send initial configuration as a single message. 2017-09-24 16:10:28 +02:00
Bartosz Taudul
fce04c6215 Profiling delay calibration. 2017-09-24 16:02:09 +02:00
Bartosz Taudul
bf12704b0f Increase queue preallocation size. 2017-09-24 15:59:53 +02:00
Bartosz Taudul
6a4f3842af Pre-allocate space for 64K events in queue. 2017-09-24 13:40:04 +02:00
Bartosz Taudul
7770014844 Use rdtscp to measure time on windows. 2017-09-23 21:33:05 +02:00
Bartosz Taudul
bd9ffc16b5 Hide GetTime() in Profiler. 2017-09-23 21:10:26 +02:00
Bartosz Taudul
e1a63dbb53 Drop constant merging check.
While without constant merging the profiler operates sub-optimally, it's
not that essential to be enabled. And there are problems with it on some
platforms, for example cygwin.
2017-09-23 20:16:42 +02:00
Bartosz Taudul
031818dff6 Send main thread name. 2017-09-23 01:38:26 +02:00
Bartosz Taudul
2faa1abb21 Store main thread id. 2017-09-23 01:37:07 +02:00
Bartosz Taudul
893db40bb2 Fix signed vs unsigned comparison. 2017-09-22 22:16:18 +02:00
Bartosz Taudul
340bf80435 Better thread name retrieval. 2017-09-22 02:10:36 +02:00
Bartosz Taudul
6525e1b3c1 Thread name queries. 2017-09-22 01:59:44 +02:00
Bartosz Taudul
70ad3407c0 Rework client handling of server requests. 2017-09-22 01:54:04 +02:00
Bartosz Taudul
3ba6046a53 Super bad thread name resolution. 2017-09-22 01:50:14 +02:00
Bartosz Taudul
a557a3fb30 Collect and transmit source thread information. 2017-09-22 01:11:53 +02:00
Bartosz Taudul
b0f94f6b45 Add threading helpers. 2017-09-22 01:11:14 +02:00
Bartosz Taudul
f6e8eb32ec Sort includes. 2017-09-22 00:36:36 +02:00
Bartosz Taudul
36ecf16d59 Add comments to the constant merging assert. 2017-09-19 02:19:27 +02:00
Bartosz Taudul
36fa5af728 Missing header. 2017-09-19 02:19:20 +02:00
Bartosz Taudul
0331d548d2 Automatically create profiler instance. 2017-09-18 19:08:54 +02:00
Bartosz Taudul
9d2fef2f11 Hide implementation details wrt concurrent queue. 2017-09-18 18:51:45 +02:00
Bartosz Taudul
d7914439e9 Use stream compression.
Previously each data packet was compressed independently. After this
change all new packets reference the previously sent data, which
achieves better compression.
2017-09-17 13:10:58 +02:00
Bartosz Taudul
03ece0ac48 Send frame markers. 2017-09-16 00:30:27 +02:00
Bartosz Taudul
ff07576d96 Reply to string requests. 2017-09-14 19:25:16 +02:00
Bartosz Taudul
f61f50385d Add ability to send strings over network. 2017-09-14 19:24:35 +02:00
Bartosz Taudul
f3ce055568 Mirror TracyView::ShouldExit in TracyProfiler. 2017-09-14 19:23:50 +02:00
Bartosz Taudul
2442c8fe58 Use one flag to control whether LZ4 is enabled. 2017-09-14 19:09:14 +02:00
Bartosz Taudul
76df000467 Move sending data to a separate function. 2017-09-14 19:07:56 +02:00
Bartosz Taudul
d999f35dfa Exchange time and id in queue header and data structs. 2017-09-14 01:14:40 +02:00
Bartosz Taudul
10b88754d8 Allow direct access to data size table index. 2017-09-14 01:05:08 +02:00
Bartosz Taudul
52d24d0d4c s_instance ptr may be accessed by thread. 2017-09-13 23:36:40 +02:00
Bartosz Taudul
efd66bb609 Allow changing lz4 size type. 2017-09-13 23:27:17 +02:00
Bartosz Taudul
16dd561029 Move protocol specific sizes to common header. 2017-09-13 22:56:55 +02:00
Bartosz Taudul
a31ab6a256 Move TracyQueue.hpp to common. 2017-09-13 22:56:08 +02:00
Bartosz Taudul
45646c4f45 Move TracySystem to a common directory. 2017-09-13 01:32:11 +02:00
Bartosz Taudul
997f0c64c3 Store pointers as uint64.
Pointers can't be stored as pointers, as that would cause mismatch in
wire protocol between 32 and 64 bit builds.
2017-09-13 01:24:42 +02:00
Bartosz Taudul
e8d64de5c1 Disable LZ4 in debug builds (too slow). 2017-09-12 02:20:05 +02:00
Bartosz Taudul
1ea61c2f2c Use LZ4 to compress network data.
This greatly reduces required network bandwidth, which in effect speeds
up queue processing.

Time to process a single event queue item:

      | Raw data | With LZ4 |
------+----------+----------+
Deque |  6.86 ns |   6.7 ns |
Pack  |  4.03 ns |   4.0 ns |
LZ4   |  ---     |  21.6 ns |
Send  | 214.5 ns |   5.2 ns |
------+----------+----------+
Total | 225.4 ns | 37.58 ns |
2017-09-12 02:13:22 +02:00
Bartosz Taudul
3df4cf8acd Don't send unused data. 2017-09-12 01:14:04 +02:00
Bartosz Taudul
25d7cebd8a Move common event data to separate struct. 2017-09-12 00:56:31 +02:00
Bartosz Taudul
aa10adcc9c Explicitly describe target frame size. 2017-09-12 00:49:38 +02:00
Bartosz Taudul
30ceac359d Increase block size. 2017-09-12 00:46:10 +02:00
Bartosz Taudul
6092c695bd All enqueue operations are performed with a token. 2017-09-12 00:43:25 +02:00
Bartosz Taudul
e04e1580c4 Adjust data size to fully utilize TCP packet size. 2017-09-12 00:38:33 +02:00
Bartosz Taudul
37405bafde Pack queue item. 2017-09-12 00:28:50 +02:00
Bartosz Taudul
8fb8e4f792 No need for sleep, Accept() already sleeps. 2017-09-11 23:16:17 +02:00
Bartosz Taudul
8747da8e2c Send event data over network. 2017-09-11 22:51:47 +02:00
Bartosz Taudul
8d3aae24bf Use producer tokens during event insertion. 2017-09-10 20:52:10 +02:00
Bartosz Taudul
452e5c5c83 Increase bulk size to 1024. 2017-09-10 20:40:28 +02:00
Bartosz Taudul
6886d5035e Dequeue events (and do nothing with them). 2017-09-10 20:23:06 +02:00
Bartosz Taudul
6a7fdea6fd Store profiling start time. 2017-09-10 20:14:16 +02:00
Bartosz Taudul
5964a6864c Scoped zone macro. 2017-09-10 20:10:20 +02:00
Bartosz Taudul
09f9937133 Scoped zone wrapper. 2017-09-10 20:09:57 +02:00
Bartosz Taudul
12a6306c0b Allow queuing zones. 2017-09-10 20:09:14 +02:00
Bartosz Taudul
05486c8225 Add unique event identifier source. 2017-09-10 20:08:42 +02:00
Bartosz Taudul
e4356eb67e Time retrieval function. 2017-09-10 20:07:38 +02:00
Bartosz Taudul
fc1b131c7a Add event queue structures. 2017-09-10 20:06:52 +02:00
Bartosz Taudul
ea9464f4f6 Make sure string constants are at the same memory address. 2017-09-10 20:02:40 +02:00
Bartosz Taudul
b4f8901a8d Add MPMC queue.
https://github.com/cameron314/concurrentqueue.git
b276773a1babd702b020a91ea2443985a65bab11
2017-09-10 19:01:14 +02:00
Bartosz Taudul
4a05da273f Set worker thread name. 2017-09-10 17:46:20 +02:00
Bartosz Taudul
a5d6039aea Profiler worker thread skeleton. 2017-09-10 17:43:56 +02:00