| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685 |
- #ifndef __TRACYQUEUE_HPP__
- #define __TRACYQUEUE_HPP__
- #include <stdint.h>
- namespace tracy
- {
- enum class QueueType : uint8_t
- {
- ZoneText,
- ZoneName,
- Message,
- MessageColor,
- MessageCallstack,
- MessageColorCallstack,
- MessageAppInfo,
- ZoneBeginAllocSrcLoc,
- ZoneBeginAllocSrcLocCallstack,
- CallstackSerial,
- Callstack,
- CallstackAlloc,
- CallstackSample,
- FrameImage,
- ZoneBegin,
- ZoneBeginCallstack,
- ZoneEnd,
- LockWait,
- LockObtain,
- LockRelease,
- LockSharedWait,
- LockSharedObtain,
- LockSharedRelease,
- LockName,
- MemAlloc,
- MemAllocNamed,
- MemFree,
- MemFreeNamed,
- MemAllocCallstack,
- MemAllocCallstackNamed,
- MemFreeCallstack,
- MemFreeCallstackNamed,
- GpuZoneBegin,
- GpuZoneBeginCallstack,
- GpuZoneBeginAllocSrcLoc,
- GpuZoneBeginAllocSrcLocCallstack,
- GpuZoneEnd,
- GpuZoneBeginSerial,
- GpuZoneBeginCallstackSerial,
- GpuZoneBeginAllocSrcLocSerial,
- GpuZoneBeginAllocSrcLocCallstackSerial,
- GpuZoneEndSerial,
- PlotData,
- ContextSwitch,
- ThreadWakeup,
- GpuTime,
- GpuContextName,
- Terminate,
- KeepAlive,
- ThreadContext,
- GpuCalibration,
- Crash,
- CrashReport,
- ZoneValidation,
- ZoneColor,
- ZoneValue,
- FrameMarkMsg,
- FrameMarkMsgStart,
- FrameMarkMsgEnd,
- SourceLocation,
- LockAnnounce,
- LockTerminate,
- LockMark,
- MessageLiteral,
- MessageLiteralColor,
- MessageLiteralCallstack,
- MessageLiteralColorCallstack,
- GpuNewContext,
- CallstackFrameSize,
- CallstackFrame,
- SymbolInformation,
- CodeInformation,
- SysTimeReport,
- TidToPid,
- PlotConfig,
- ParamSetup,
- AckServerQueryNoop,
- AckSourceCodeNotAvailable,
- CpuTopology,
- SingleStringData,
- SecondStringData,
- MemNamePayload,
- StringData,
- ThreadName,
- PlotName,
- SourceLocationPayload,
- CallstackPayload,
- CallstackAllocPayload,
- FrameName,
- FrameImageData,
- ExternalName,
- ExternalThreadName,
- SymbolCode,
- SourceCode,
- NUM_TYPES
- };
- #pragma pack( 1 )
- struct QueueThreadContext
- {
- uint64_t thread;
- };
- struct QueueZoneBeginLean
- {
- int64_t time;
- };
- struct QueueZoneBegin : public QueueZoneBeginLean
- {
- uint64_t srcloc; // ptr
- };
- struct QueueZoneEnd
- {
- int64_t time;
- };
- struct QueueZoneValidation
- {
- uint32_t id;
- };
- struct QueueZoneColor
- {
- uint8_t r;
- uint8_t g;
- uint8_t b;
- };
- struct QueueZoneValue
- {
- uint64_t value;
- };
- struct QueueStringTransfer
- {
- uint64_t ptr;
- };
- struct QueueFrameMark
- {
- int64_t time;
- uint64_t name; // ptr
- };
- struct QueueFrameImage
- {
- uint32_t frame;
- uint16_t w;
- uint16_t h;
- uint8_t flip;
- };
- struct QueueFrameImageFat : public QueueFrameImage
- {
- uint64_t image; // ptr
- };
- struct QueueSourceLocation
- {
- uint64_t name;
- uint64_t function; // ptr
- uint64_t file; // ptr
- uint32_t line;
- uint8_t r;
- uint8_t g;
- uint8_t b;
- };
- struct QueueZoneTextFat
- {
- uint64_t text; // ptr
- uint16_t size;
- };
- enum class LockType : uint8_t
- {
- Lockable,
- SharedLockable
- };
- struct QueueLockAnnounce
- {
- uint32_t id;
- int64_t time;
- uint64_t lckloc; // ptr
- LockType type;
- };
- struct QueueLockTerminate
- {
- uint32_t id;
- int64_t time;
- };
- struct QueueLockWait
- {
- uint64_t thread;
- uint32_t id;
- int64_t time;
- };
- struct QueueLockObtain
- {
- uint64_t thread;
- uint32_t id;
- int64_t time;
- };
- struct QueueLockRelease
- {
- uint64_t thread;
- uint32_t id;
- int64_t time;
- };
- struct QueueLockMark
- {
- uint64_t thread;
- uint32_t id;
- uint64_t srcloc; // ptr
- };
- struct QueueLockName
- {
- uint32_t id;
- };
- struct QueueLockNameFat : public QueueLockName
- {
- uint64_t name; // ptr
- uint16_t size;
- };
- enum class PlotDataType : uint8_t
- {
- Float,
- Double,
- Int
- };
- struct QueuePlotData
- {
- uint64_t name; // ptr
- int64_t time;
- PlotDataType type;
- union
- {
- double d;
- float f;
- int64_t i;
- } data;
- };
- struct QueueMessage
- {
- int64_t time;
- };
- struct QueueMessageColor : public QueueMessage
- {
- uint8_t r;
- uint8_t g;
- uint8_t b;
- };
- struct QueueMessageLiteral : public QueueMessage
- {
- uint64_t text; // ptr
- };
- struct QueueMessageColorLiteral : public QueueMessageColor
- {
- uint64_t text; // ptr
- };
- struct QueueMessageFat : public QueueMessage
- {
- uint64_t text; // ptr
- uint16_t size;
- };
- struct QueueMessageColorFat : public QueueMessageColor
- {
- uint64_t text; // ptr
- uint16_t size;
- };
- // Don't change order, only add new entries at the end, this is also used on trace dumps!
- enum class GpuContextType : uint8_t
- {
- Invalid,
- OpenGl,
- Vulkan,
- OpenCL,
- Direct3D12
- };
- enum GpuContextFlags : uint8_t
- {
- GpuContextCalibration = 1 << 0
- };
- struct QueueGpuNewContext
- {
- int64_t cpuTime;
- int64_t gpuTime;
- uint64_t thread;
- float period;
- uint8_t context;
- GpuContextFlags flags;
- GpuContextType type;
- };
- struct QueueGpuZoneBeginLean
- {
- int64_t cpuTime;
- uint64_t thread;
- uint16_t queryId;
- uint8_t context;
- };
- struct QueueGpuZoneBegin : public QueueGpuZoneBeginLean
- {
- uint64_t srcloc;
- };
- struct QueueGpuZoneEnd
- {
- int64_t cpuTime;
- uint64_t thread;
- uint16_t queryId;
- uint8_t context;
- };
- struct QueueGpuTime
- {
- int64_t gpuTime;
- uint16_t queryId;
- uint8_t context;
- };
- struct QueueGpuCalibration
- {
- int64_t gpuTime;
- int64_t cpuTime;
- int64_t cpuDelta;
- uint8_t context;
- };
- struct QueueGpuContextName
- {
- uint8_t context;
- };
- struct QueueGpuContextNameFat : public QueueGpuContextName
- {
- uint64_t ptr;
- uint16_t size;
- };
- struct QueueMemNamePayload
- {
- uint64_t name;
- };
- struct QueueMemAlloc
- {
- int64_t time;
- uint64_t thread;
- uint64_t ptr;
- char size[6];
- };
- struct QueueMemFree
- {
- int64_t time;
- uint64_t thread;
- uint64_t ptr;
- };
- struct QueueCallstackFat
- {
- uint64_t ptr;
- };
- struct QueueCallstackAllocFat
- {
- uint64_t ptr;
- uint64_t nativePtr;
- };
- struct QueueCallstackSample
- {
- int64_t time;
- uint64_t thread;
- };
- struct QueueCallstackSampleFat : public QueueCallstackSample
- {
- uint64_t ptr;
- };
- struct QueueCallstackFrameSize
- {
- uint64_t ptr;
- uint8_t size;
- };
- struct QueueCallstackFrame
- {
- uint32_t line;
- uint64_t symAddr;
- uint32_t symLen;
- };
- struct QueueSymbolInformation
- {
- uint32_t line;
- uint64_t symAddr;
- };
- struct QueueCodeInformation
- {
- uint64_t ptr;
- uint32_t line;
- };
- struct QueueCrashReport
- {
- int64_t time;
- uint64_t text; // ptr
- };
- struct QueueSysTime
- {
- int64_t time;
- float sysTime;
- };
- struct QueueContextSwitch
- {
- int64_t time;
- uint64_t oldThread;
- uint64_t newThread;
- uint8_t cpu;
- uint8_t reason;
- uint8_t state;
- };
- struct QueueThreadWakeup
- {
- int64_t time;
- uint64_t thread;
- };
- struct QueueTidToPid
- {
- uint64_t tid;
- uint64_t pid;
- };
- enum class PlotFormatType : uint8_t
- {
- Number,
- Memory,
- Percentage
- };
- struct QueuePlotConfig
- {
- uint64_t name; // ptr
- uint8_t type;
- };
- struct QueueParamSetup
- {
- uint32_t idx;
- uint64_t name; // ptr
- uint8_t isBool;
- int32_t val;
- };
- struct QueueCpuTopology
- {
- uint32_t package;
- uint32_t core;
- uint32_t thread;
- };
- struct QueueHeader
- {
- union
- {
- QueueType type;
- uint8_t idx;
- };
- };
- struct QueueItem
- {
- QueueHeader hdr;
- union
- {
- QueueThreadContext threadCtx;
- QueueZoneBegin zoneBegin;
- QueueZoneBeginLean zoneBeginLean;
- QueueZoneEnd zoneEnd;
- QueueZoneValidation zoneValidation;
- QueueZoneColor zoneColor;
- QueueZoneValue zoneValue;
- QueueStringTransfer stringTransfer;
- QueueFrameMark frameMark;
- QueueFrameImage frameImage;
- QueueFrameImageFat frameImageFat;
- QueueSourceLocation srcloc;
- QueueZoneTextFat zoneTextFat;
- QueueLockAnnounce lockAnnounce;
- QueueLockTerminate lockTerminate;
- QueueLockWait lockWait;
- QueueLockObtain lockObtain;
- QueueLockRelease lockRelease;
- QueueLockMark lockMark;
- QueueLockName lockName;
- QueueLockNameFat lockNameFat;
- QueuePlotData plotData;
- QueueMessage message;
- QueueMessageColor messageColor;
- QueueMessageLiteral messageLiteral;
- QueueMessageColorLiteral messageColorLiteral;
- QueueMessageFat messageFat;
- QueueMessageColorFat messageColorFat;
- QueueGpuNewContext gpuNewContext;
- QueueGpuZoneBegin gpuZoneBegin;
- QueueGpuZoneBeginLean gpuZoneBeginLean;
- QueueGpuZoneEnd gpuZoneEnd;
- QueueGpuTime gpuTime;
- QueueGpuCalibration gpuCalibration;
- QueueGpuContextName gpuContextName;
- QueueGpuContextNameFat gpuContextNameFat;
- QueueMemAlloc memAlloc;
- QueueMemFree memFree;
- QueueMemNamePayload memName;
- QueueCallstackFat callstackFat;
- QueueCallstackAllocFat callstackAllocFat;
- QueueCallstackSample callstackSample;
- QueueCallstackSampleFat callstackSampleFat;
- QueueCallstackFrameSize callstackFrameSize;
- QueueCallstackFrame callstackFrame;
- QueueSymbolInformation symbolInformation;
- QueueCodeInformation codeInformation;
- QueueCrashReport crashReport;
- QueueSysTime sysTime;
- QueueContextSwitch contextSwitch;
- QueueThreadWakeup threadWakeup;
- QueueTidToPid tidToPid;
- QueuePlotConfig plotConfig;
- QueueParamSetup paramSetup;
- QueueCpuTopology cpuTopology;
- };
- };
- #pragma pack()
- enum { QueueItemSize = sizeof( QueueItem ) };
- static constexpr size_t QueueDataSize[] = {
- sizeof( QueueHeader ), // zone text
- sizeof( QueueHeader ), // zone name
- sizeof( QueueHeader ) + sizeof( QueueMessage ),
- sizeof( QueueHeader ) + sizeof( QueueMessageColor ),
- sizeof( QueueHeader ) + sizeof( QueueMessage ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueMessageColor ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueMessage ), // app info
- sizeof( QueueHeader ) + sizeof( QueueZoneBeginLean ), // allocated source location
- sizeof( QueueHeader ) + sizeof( QueueZoneBeginLean ), // allocated source location, callstack
- sizeof( QueueHeader ), // callstack memory
- sizeof( QueueHeader ), // callstack
- sizeof( QueueHeader ), // callstack alloc
- sizeof( QueueHeader ) + sizeof( QueueCallstackSample ),
- sizeof( QueueHeader ) + sizeof( QueueFrameImage ),
- sizeof( QueueHeader ) + sizeof( QueueZoneBegin ),
- sizeof( QueueHeader ) + sizeof( QueueZoneBegin ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueZoneEnd ),
- sizeof( QueueHeader ) + sizeof( QueueLockWait ),
- sizeof( QueueHeader ) + sizeof( QueueLockObtain ),
- sizeof( QueueHeader ) + sizeof( QueueLockRelease ),
- sizeof( QueueHeader ) + sizeof( QueueLockWait ), // shared
- sizeof( QueueHeader ) + sizeof( QueueLockObtain ), // shared
- sizeof( QueueHeader ) + sizeof( QueueLockRelease ), // shared
- sizeof( QueueHeader ) + sizeof( QueueLockName ),
- sizeof( QueueHeader ) + sizeof( QueueMemAlloc ),
- sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // named
- sizeof( QueueHeader ) + sizeof( QueueMemFree ),
- sizeof( QueueHeader ) + sizeof( QueueMemFree ), // named
- sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueMemAlloc ), // callstack, named
- sizeof( QueueHeader ) + sizeof( QueueMemFree ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueMemFree ), // callstack, named
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ),
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// allocated source location
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// allocated source location, callstack
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneEnd ),
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // serial
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBegin ), // serial, callstack
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// serial, allocated source location
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneBeginLean ),// serial, allocated source location, callstack
- sizeof( QueueHeader ) + sizeof( QueueGpuZoneEnd ), // serial
- sizeof( QueueHeader ) + sizeof( QueuePlotData ),
- sizeof( QueueHeader ) + sizeof( QueueContextSwitch ),
- sizeof( QueueHeader ) + sizeof( QueueThreadWakeup ),
- sizeof( QueueHeader ) + sizeof( QueueGpuTime ),
- sizeof( QueueHeader ) + sizeof( QueueGpuContextName ),
- // above items must be first
- sizeof( QueueHeader ), // terminate
- sizeof( QueueHeader ), // keep alive
- sizeof( QueueHeader ) + sizeof( QueueThreadContext ),
- sizeof( QueueHeader ) + sizeof( QueueGpuCalibration ),
- sizeof( QueueHeader ), // crash
- sizeof( QueueHeader ) + sizeof( QueueCrashReport ),
- sizeof( QueueHeader ) + sizeof( QueueZoneValidation ),
- sizeof( QueueHeader ) + sizeof( QueueZoneColor ),
- sizeof( QueueHeader ) + sizeof( QueueZoneValue ),
- sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // continuous frames
- sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // start
- sizeof( QueueHeader ) + sizeof( QueueFrameMark ), // end
- sizeof( QueueHeader ) + sizeof( QueueSourceLocation ),
- sizeof( QueueHeader ) + sizeof( QueueLockAnnounce ),
- sizeof( QueueHeader ) + sizeof( QueueLockTerminate ),
- sizeof( QueueHeader ) + sizeof( QueueLockMark ),
- sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ),
- sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ),
- sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ), // callstack
- sizeof( QueueHeader ) + sizeof( QueueGpuNewContext ),
- sizeof( QueueHeader ) + sizeof( QueueCallstackFrameSize ),
- sizeof( QueueHeader ) + sizeof( QueueCallstackFrame ),
- sizeof( QueueHeader ) + sizeof( QueueSymbolInformation ),
- sizeof( QueueHeader ) + sizeof( QueueCodeInformation ),
- sizeof( QueueHeader ) + sizeof( QueueSysTime ),
- sizeof( QueueHeader ) + sizeof( QueueTidToPid ),
- sizeof( QueueHeader ) + sizeof( QueuePlotConfig ),
- sizeof( QueueHeader ) + sizeof( QueueParamSetup ),
- sizeof( QueueHeader ), // server query acknowledgement
- sizeof( QueueHeader ), // source code not available
- sizeof( QueueHeader ) + sizeof( QueueCpuTopology ),
- sizeof( QueueHeader ), // single string data
- sizeof( QueueHeader ), // second string data
- sizeof( QueueHeader ) + sizeof( QueueMemNamePayload ),
- // keep all QueueStringTransfer below
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // string data
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // thread name
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // plot name
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // allocated source location payload
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // callstack payload
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // callstack alloc payload
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // frame name
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // frame image data
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external name
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external thread name
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // symbol code
- sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // source code
- };
- static_assert( QueueItemSize == 32, "Queue item size not 32 bytes" );
- 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" );
- static_assert( sizeof( void* ) == sizeof( uintptr_t ), "Pointer size != uintptr_t" );
- }
- #endif
|