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

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.
This commit is contained in:
Bartosz Taudul
2017-09-26 02:28:14 +02:00
parent 9cb12a05b3
commit 7424077d70
10 changed files with 103 additions and 72 deletions
+11 -3
View File
@@ -13,6 +13,7 @@ enum class QueueType : uint8_t
StringData,
ThreadName,
FrameMark,
SourceLocation,
NUM_TYPES
};
@@ -21,9 +22,7 @@ enum class QueueType : uint8_t
struct QueueZoneBegin
{
int64_t time;
uint64_t filename; // ptr
uint64_t function; // ptr
uint32_t line;
uint64_t srcloc; // ptr
uint64_t thread;
uint32_t color;
};
@@ -33,6 +32,13 @@ struct QueueZoneEnd
int64_t time;
};
struct QueueSourceLocation
{
uint64_t function; // ptr
uint64_t file; // ptr
uint32_t line;
};
struct QueueHeader
{
union
@@ -50,6 +56,7 @@ struct QueueItem
{
QueueZoneBegin zoneBegin;
QueueZoneEnd zoneEnd;
QueueSourceLocation srcloc;
};
};
@@ -63,6 +70,7 @@ static const size_t QueueDataSize[] = {
sizeof( QueueHeader ),
sizeof( QueueHeader ),
sizeof( QueueHeader ),
sizeof( QueueHeader ) + sizeof( QueueSourceLocation ),
};
static_assert( sizeof( QueueDataSize ) / sizeof( size_t ) == (uint8_t)QueueType::NUM_TYPES, "QueueDataSize mismatch" );