#ifndef __TRACYEVENT_HPP__ #define __TRACYEVENT_HPP__ #include #include "TracyVector.hpp" namespace tracy { #pragma pack( 1 ) struct StringRef { enum Type { Ptr, Idx }; StringRef() : active( 0 ) {} StringRef( Type t, uint64_t data ) : isidx( t == Idx ) , active( 1 ) { if( isidx ) { stridx = data; } else { strptr = data; } } union { uint64_t strptr; uint64_t stridx; }; uint8_t isidx : 1; uint8_t active : 1; }; struct TextData { const char* userText; StringRef zoneName; }; struct SourceLocation { StringRef function; StringRef file; uint32_t line; uint32_t color; }; enum { SourceLocationSize = sizeof( SourceLocation ) }; struct ZoneEvent { int64_t start; int64_t end; int32_t srcloc; int8_t cpu_start; int8_t cpu_end; int32_t text; Vector child; }; enum { ZoneEventSize = sizeof( ZoneEvent ) }; struct LockEvent { enum class Type : uint8_t { Wait, Obtain, Release }; int64_t time; int32_t srcloc; uint64_t waitList; uint16_t thread : 6; uint16_t lockingThread : 6; uint16_t type : 2; uint8_t lockCount; }; enum { LockEventSize = sizeof( LockEvent ) }; enum { MaxLockThreads = sizeof( LockEvent::waitList ) * 8 }; static_assert( std::numeric_limits::max() >= MaxLockThreads, "Not enough space for lock count." ); #pragma pack() } #endif