tracy/common/TracyQueue.hpp

156 lines
2.9 KiB
C++
Raw Normal View History

2017-09-10 18:06:52 +00:00
#ifndef __TRACYQUEUE_HPP__
#define __TRACYQUEUE_HPP__
#include <stdint.h>
namespace tracy
{
enum class QueueType : uint8_t
{
ZoneBegin,
2017-09-11 23:14:04 +00:00
ZoneEnd,
StringData,
2017-09-21 23:51:56 +00:00
ThreadName,
2017-09-27 00:18:17 +00:00
CustomStringData,
FrameMarkMsg,
SourceLocation,
2017-09-27 00:18:17 +00:00
ZoneText,
2017-09-28 17:28:24 +00:00
ZoneName,
2017-10-04 14:16:27 +00:00
LockAnnounce,
LockWait,
LockObtain,
LockRelease,
2017-09-11 23:14:04 +00:00
NUM_TYPES
2017-09-10 18:06:52 +00:00
};
2017-09-11 22:28:50 +00:00
#pragma pack( 1 )
2017-09-10 18:06:52 +00:00
struct QueueZoneBegin
{
int64_t time;
uint64_t thread;
2017-10-03 14:41:32 +00:00
uint64_t srcloc; // ptr
2017-10-01 17:11:01 +00:00
int8_t cpu;
2017-09-10 18:06:52 +00:00
};
struct QueueZoneEnd
{
int64_t time;
2017-10-03 14:41:32 +00:00
uint64_t thread;
2017-10-01 17:11:01 +00:00
int8_t cpu;
2017-09-10 18:06:52 +00:00
};
2017-10-03 14:41:32 +00:00
struct QueueStringTransfer
{
uint64_t ptr;
};
struct QueueFrameMark
{
int64_t time;
};
struct QueueSourceLocation
{
2017-10-03 14:41:32 +00:00
uint64_t ptr;
uint64_t function; // ptr
uint64_t file; // ptr
uint32_t line;
uint32_t color;
};
2017-09-27 00:18:17 +00:00
struct QueueZoneText
{
2017-10-03 14:41:32 +00:00
uint64_t thread;
2017-09-27 00:18:17 +00:00
uint64_t text; // ptr
};
2017-09-28 17:28:24 +00:00
struct QueueZoneName
{
2017-10-03 14:41:32 +00:00
uint64_t thread;
2017-09-28 17:28:24 +00:00
uint64_t name; // ptr
};
2017-10-04 14:16:27 +00:00
struct QueueLockAnnounce
{
uint64_t id; // ptr
uint64_t srcloc; // ptr
};
struct QueueLockWait
{
2017-10-04 14:45:46 +00:00
uint64_t id; // ptr
int64_t time;
uint64_t thread;
2017-10-04 14:16:27 +00:00
};
struct QueueLockObtain
{
2017-10-04 14:45:46 +00:00
uint64_t id; // ptr
int64_t time;
uint64_t thread;
2017-10-04 14:16:27 +00:00
};
struct QueueLockRelease
{
2017-10-04 14:45:46 +00:00
uint64_t id; // ptr
int64_t time;
uint64_t thread;
2017-10-04 14:16:27 +00:00
};
struct QueueHeader
2017-09-10 18:06:52 +00:00
{
union
{
QueueType type;
uint8_t idx;
};
};
struct QueueItem
{
QueueHeader hdr;
2017-09-10 18:06:52 +00:00
union
{
QueueZoneBegin zoneBegin;
QueueZoneEnd zoneEnd;
2017-10-03 14:41:32 +00:00
QueueStringTransfer stringTransfer;
QueueFrameMark frameMark;
QueueSourceLocation srcloc;
2017-09-27 00:18:17 +00:00
QueueZoneText zoneText;
2017-09-28 17:28:24 +00:00
QueueZoneName zoneName;
2017-10-04 14:16:27 +00:00
QueueLockAnnounce lockAnnounce;
QueueLockWait lockWait;
QueueLockObtain lockObtain;
QueueLockRelease lockRelease;
2017-09-10 18:06:52 +00:00
};
};
2017-09-11 22:28:50 +00:00
#pragma pack()
2017-09-10 18:06:52 +00:00
enum { QueueItemSize = sizeof( QueueItem ) };
2017-09-11 23:14:04 +00:00
static const size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueZoneBegin ),
sizeof( QueueHeader ) + sizeof( QueueZoneEnd ),
2017-10-03 14:41:32 +00:00
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // string data
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // thread name
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // custom string data
sizeof( QueueHeader ) + sizeof( QueueFrameMark ),
sizeof( QueueHeader ) + sizeof( QueueSourceLocation ),
2017-09-27 00:18:17 +00:00
sizeof( QueueHeader ) + sizeof( QueueZoneText ),
2017-09-28 17:28:24 +00:00
sizeof( QueueHeader ) + sizeof( QueueZoneName ),
2017-10-04 14:16:27 +00:00
sizeof( QueueHeader ) + sizeof( QueueLockAnnounce ),
sizeof( QueueHeader ) + sizeof( QueueLockWait ),
sizeof( QueueHeader ) + sizeof( QueueLockObtain ),
sizeof( QueueHeader ) + sizeof( QueueLockRelease ),
2017-09-11 23:14:04 +00:00
};
static_assert( sizeof( QueueDataSize ) / sizeof( size_t ) == (uint8_t)QueueType::NUM_TYPES, "QueueDataSize mismatch" );
static_assert( sizeof( void* ) <= sizeof( uint64_t ), "Pointer size > 8 bytes" );
2017-09-11 23:14:04 +00:00
2017-09-10 18:06:52 +00:00
};
#endif