Commit Graph

263 Commits

Author SHA1 Message Date
Bartosz Taudul
a4e7a341c0 Proper handling of disconnect request. 2019-08-01 23:14:09 +02:00
Bartosz Taudul
a6a3f45810 Fill in thread id during dequeue, not during enqueue. 2019-07-30 01:15:14 +02:00
Bartosz Taudul
89928fde7b Queue must be always able to alloc. 2019-07-29 22:13:16 +02:00
Bartosz Taudul
82a4a6d9cc Add tracy_ prefix to concurrentqueue.h file name. 2019-07-29 21:47:50 +02:00
Alex
0c5ea710b0 Merged in z33ky/tracy/const-frame-image (pull request #37)
Constify frame-image pointer in API.
2019-07-13 13:09:21 +00:00
Alexander 'z33ky' Hirsch
c6e8dc8d63 Constify frame-image pointer in API. 2019-07-13 12:33:55 +02:00
Bartosz Taudul
60d2384a6a Allow sending application information messages. 2019-07-12 18:34:46 +02:00
Bartosz Taudul
bb35f9a897 Compress frame images in a separate thread. 2019-06-27 13:24:35 +02:00
Bartosz Taudul
7ebd2162c6 Add ETC1 compression thread. 2019-06-26 22:57:24 +02:00
Bartosz Taudul
f565e11976 Store frame images in queue. 2019-06-26 22:52:24 +02:00
Bartosz Taudul
8ce41b3543 Proper init order of thread local thread handle. 2019-06-26 19:32:52 +02:00
Bartosz Taudul
06a41708a7 Move TLS accesses close together. 2019-06-24 19:38:44 +02:00
Bartosz Taudul
0b394c3f53 Don't need to keep last broadcast time in Profiler class. 2019-06-18 20:15:09 +02:00
Bartosz Taudul
e609c0fdce UDP broadcast loop. 2019-06-17 02:25:09 +02:00
Bartosz Taudul
37d1457b44 Frame image may need flipping. 2019-06-12 15:28:32 +02:00
Bartosz Taudul
04dd33f5c4 Fix mismatched linkage. 2019-06-11 23:51:12 +02:00
Rokas K. (rku)
c4e05b6264 Merged in rokups/tracy/dllimport-cleanup (pull request #36)
Clean up imported functions in multi-dll projects.

Approved-by: Till Rathmann <till.rathmann@gmx.de>
2019-06-11 15:04:34 +00:00
Bartosz Taudul
80dff1ede1 Add connection id for on-demand mode.
Long-lived zones could send their end events without begin events in a
following scenario:

1. On-demand connection is made.
2. Zone begin is emitted, m_active is set to true.
3. Connection is terminated.
4. A new connection is made.
5. Zone end is emitted, because m_active is true.

To this point it was assumed that all zone end events will happen before
a new connection is made, but it's not necessarily true.
2019-06-09 17:15:47 +02:00
Bartosz Taudul
cc5bad294a More strict memory ordering for on-demand connection status. 2019-06-09 16:48:00 +02:00
Bartosz Taudul
23e7850162 Make DequeueStatus enum class. 2019-06-09 16:14:30 +02:00
Bartosz Taudul
4c2ff80ac8 Restore frame counting for on-demand mode. 2019-06-09 15:23:01 +02:00
Bartosz Taudul
784c4da53a Include frame offset in frame image message. 2019-06-07 20:09:29 +02:00
Rokas Kupstys
9bd1037347 Clean up imported functions in multi-dll projects. 2019-06-07 19:50:08 +03:00
Bartosz Taudul
d271634a95 Keep one ETC1 compression buffer. 2019-06-07 01:29:24 +02:00
Bartosz Taudul
a654b642ef Compress frame images to ETC1 before sending. 2019-06-07 00:31:51 +02:00
Bartosz Taudul
e5bb6011c5 Frame image transfer prototype. 2019-06-06 21:39:54 +02:00
Bartosz Taudul
efc54babe3 Transfer of colored messages. 2019-05-10 20:17:44 +02:00
Bartosz Taudul
9ec8704dad Don't include LZ4 headers in tracy headers.
The LZ4 implementation is wrapped in tracy namespace, but it also adds
some defines, which may conflict with other LZ4 implementations.
2019-05-01 12:57:42 +02:00
Bartosz Taudul
ec73178733 Move callstack cutting to a separate function. 2019-03-05 02:42:51 +01:00
Bartosz Taudul
e3c31e4a4e Send callstack alloc payload. 2019-03-03 18:05:03 +01:00
Bartosz Taudul
d863245b49 Serialize discontinuous frame messages. 2019-02-28 19:21:23 +01:00
Bartosz Taudul
9f4f5bcb63 CPU usage retrieval. 2019-02-21 22:45:53 +01:00
Bartosz Taudul
44009b6fda Use mach_absolute_time() to get time on iOS. 2019-02-21 14:45:13 +01:00
Bartosz Taudul
ef5e30056e Implement delayed initialization of the profiler.
Enabled on osx, ios.
2019-02-19 20:43:30 +01:00
Bartosz Taudul
3f914834b7 Hide rest of statics. 2019-02-19 19:33:37 +01:00
Bartosz Taudul
9fabafbeca Fix DLL code. 2019-02-19 18:46:59 +01:00
Bartosz Taudul
2421e05c27 Prevent direct access to s_profiler. 2019-02-19 18:38:08 +01:00
Bartosz Taudul
d865d1cc87 Disallow direct access to s_token. 2019-02-19 18:27:00 +01:00
Rokas Kupstys
8157e3a0b3 Fix builds with MingW. 2019-01-19 13:53:10 +02:00
Bartosz Taudul
970108fbbf Track zone id for verification purposes. 2019-01-14 22:36:54 +01:00
Bartosz Taudul
1f0d1fdfdc C API prototype. 2019-01-14 21:07:29 +01:00
Bartosz Taudul
070888f80d Make it possible to have multiple vulkan contexts.
API change!
2019-01-10 17:11:17 +01:00
Bartosz Taudul
facb05f8cb Don't mark FastVector element as used until it's ready.
This should prevent a race condition that would result in invalid last
element of the queue, in case a freezed thread already got the queue
item, but didn't wrote to it (or didn't wrote fully).
2018-08-20 22:35:50 +02:00
Bartosz Taudul
d1adf9e8d6 Allow skipping functions on top of call stack.
Note that this is on-client performance intensive and shouldn't be used,
except in special situations, like processing crashes.
2018-08-20 22:20:44 +02:00
Bartosz Taudul
b371003336 In case of manual shutdown, don't wait for lock.
All threads are freezed at this point, nothing will release it.
2018-08-20 21:49:23 +02:00
Bartosz Taudul
ca939ccd19 Allow external profiler shutdown requests. 2018-08-20 01:02:27 +02:00
Bartosz Taudul
9d051cf5ee Add support for discontinuous frames. 2018-08-05 02:15:54 +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
37d5736bf5 Fixed compiler warnings. 2018-08-01 14:07:30 +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
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
Bartosz Taudul
e285c837a4 Support TRACY_NO_EXIT env variable in addition to define. 2018-07-13 23:55:40 +02:00
Bartosz Taudul
c3ba0ef4eb Fix lua zone state init. 2018-07-13 20:21:50 +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
fbc5556ddd Send memory events in on-demand mode. 2018-07-12 01:36:01 +02:00
Bartosz Taudul
475d151b2d Implement deferring items. 2018-07-11 12:21:39 +02:00
Bartosz Taudul
52207f20b7 Add deferred events queue. 2018-07-11 12:14:28 +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
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
c973735b49 Track connection status. 2018-07-10 22:27:19 +02:00
Bartosz Taudul
e5b133073c Disable all tracing if TRACY_ON_DEMAND is defined. 2018-07-10 20:49:51 +02:00
Bartosz Taudul
4d197ec7a2 Unsafe version of AppendData. 2018-06-23 02:16:58 +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
b6088b908f Callstack capture for ZoneBegin. 2018-06-22 00:56:30 +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
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
5177a7b960 Callstack frame transfer. 2018-06-20 01:06:31 +02:00
Bartosz Taudul
9b1fb01e16 Disable Callstack() call if there's no callstack support. 2018-06-19 19:38:30 +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
9c11e0fc5b Vulkan tracing. 2018-06-17 18:14:37 +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
48665cc09b s/TRACY_RDTSCP_SUPPORTED/TRACY_HW_TIMER/ 2018-04-26 15:25:54 +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
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
991fc6bd95 Memory allocations tracker. 2018-03-31 21:56:05 +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
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
3c00ce0958 GPU context registration. 2017-11-11 19:44:09 +01:00
Bartosz Taudul
c2797a4cc7 Data packets can't cross data buffer boundary. 2017-11-11 15:08:03 +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
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
f861f89134 Disable rdtscp on android. 2017-10-30 16:23:23 +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
f1da7c1c85 Force TLS block creation on cygwin before malloc. 2017-10-20 18:28:25 +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
7c47edc64f Terminate connection handshake. 2017-10-18 18:48:51 +02:00
Bartosz Taudul
51f5ae4796 More precise profiler init end time measurement. 2017-10-17 01:07:54 +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
5b9fcddfb3 String literal message transfer. 2017-10-15 13:06:49 +02:00
Bartosz Taudul
40bc4c8015 Missing include. 2017-10-14 17:21:14 +02:00
Bartosz Taudul
c497966c7f Use rpmalloc to allocate tracy client memory. 2017-10-14 17:15:18 +02:00
Bartosz Taudul
8c7b60fbe6 Allow sending text messages. 2017-10-14 13:23:13 +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
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
3f0bd793fd Send program start time, not connection time. 2017-10-04 00:34:05 +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
ba037e5798 Do not store tail index in memory. 2017-10-03 14:50:55 +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
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
6a2cb2c14e Calculate timer resolution. 2017-09-29 18:29:39 +02:00
Bartosz Taudul
8c1c395cec Allow sending custom zone names. 2017-09-28 19:28:24 +02:00
Bartosz Taudul
d1bbb731fc Zone text (custom string) transfer. 2017-09-27 02:18:17 +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
fce04c6215 Profiling delay calibration. 2017-09-24 16:02:09 +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
2faa1abb21 Store main thread id. 2017-09-23 01:37:07 +02:00
Bartosz Taudul
70ad3407c0 Rework client handling of server requests. 2017-09-22 01:54:04 +02:00