tracy/public/common/TracyProtocol.hpp

170 lines
3.8 KiB
C++
Raw Normal View History

#ifndef __TRACYPROTOCOL_HPP__
#define __TRACYPROTOCOL_HPP__
#include <limits>
#include <stdint.h>
namespace tracy
{
constexpr unsigned Lz4CompressBound( unsigned isize ) { return isize + ( isize / 255 ) + 16; }
2023-03-09 23:23:09 +00:00
enum : uint32_t { ProtocolVersion = 64 };
2022-10-09 19:54:16 +00:00
enum : uint16_t { BroadcastVersion = 3 };
2017-10-19 21:48:16 +00:00
using lz4sz_t = uint32_t;
2017-09-13 20:58:04 +00:00
2017-10-19 21:48:16 +00:00
enum { TargetFrameSize = 256 * 1024 };
enum { LZ4Size = Lz4CompressBound( TargetFrameSize ) };
2017-09-13 20:58:04 +00:00
static_assert( LZ4Size <= std::numeric_limits<lz4sz_t>::max(), "LZ4Size greater than lz4sz_t" );
static_assert( TargetFrameSize * 2 >= 64 * 1024, "Not enough space for LZ4 stream buffer" );
enum { HandshakeShibbolethSize = 8 };
static const char HandshakeShibboleth[HandshakeShibbolethSize] = { 'T', 'r', 'a', 'c', 'y', 'P', 'r', 'f' };
enum HandshakeStatus : uint8_t
{
HandshakePending,
HandshakeWelcome,
HandshakeProtocolMismatch,
HandshakeNotAvailable,
HandshakeDropped
};
2017-10-03 21:17:58 +00:00
enum { WelcomeMessageProgramNameSize = 64 };
2018-08-19 16:19:12 +00:00
enum { WelcomeMessageHostInfoSize = 1024 };
2017-10-03 21:17:58 +00:00
#pragma pack( push, 1 )
2018-07-10 20:29:31 +00:00
2020-03-25 19:33:50 +00:00
// Must increase left query space after handling!
2019-04-01 16:52:32 +00:00
enum ServerQuery : uint8_t
{
ServerQueryTerminate,
ServerQueryString,
ServerQueryThreadString,
ServerQuerySourceLocation,
ServerQueryPlotName,
ServerQueryFrameName,
ServerQueryParameter,
ServerQueryFiberName,
// Items above are high priority. Split order must be preserved. See IsQueryPrio().
ServerQueryDisconnect,
ServerQueryCallstackFrame,
ServerQueryExternalName,
ServerQuerySymbol,
ServerQuerySymbolCode,
ServerQuerySourceCode,
ServerQueryDataTransfer,
ServerQueryDataTransferPart
2019-04-01 16:52:32 +00:00
};
struct ServerQueryPacket
{
ServerQuery type;
uint64_t ptr;
2020-03-25 19:04:01 +00:00
uint32_t extra;
2019-04-01 16:52:32 +00:00
};
enum { ServerQueryPacketSize = sizeof( ServerQueryPacket ) };
enum CpuArchitecture : uint8_t
{
CpuArchUnknown,
CpuArchX86,
CpuArchX64,
CpuArchArm32,
CpuArchArm64
};
2021-06-14 23:26:50 +00:00
struct WelcomeFlag
{
enum _t : uint8_t
{
OnDemand = 1 << 0,
IsApple = 1 << 1,
CodeTransfer = 1 << 2,
2021-06-14 23:32:18 +00:00
CombineSamples = 1 << 3,
IdentifySamples = 1 << 4,
2021-06-14 23:26:50 +00:00
};
};
struct WelcomeMessage
{
double timerMul;
int64_t initBegin;
int64_t initEnd;
uint64_t delay;
2017-09-29 16:32:07 +00:00
uint64_t resolution;
uint64_t epoch;
uint64_t exectime;
2019-08-17 20:19:04 +00:00
uint64_t pid;
int64_t samplingPeriod;
2021-06-14 23:26:50 +00:00
uint8_t flags;
uint8_t cpuArch;
char cpuManufacturer[12];
uint32_t cpuId;
2017-10-03 21:17:58 +00:00
char programName[WelcomeMessageProgramNameSize];
2018-08-19 16:19:12 +00:00
char hostInfo[WelcomeMessageHostInfoSize];
};
2017-10-03 21:17:58 +00:00
enum { WelcomeMessageSize = sizeof( WelcomeMessage ) };
struct OnDemandPayloadMessage
{
uint64_t frames;
uint64_t currentTime;
};
enum { OnDemandPayloadMessageSize = sizeof( OnDemandPayloadMessage ) };
struct BroadcastMessage
{
uint16_t broadcastVersion;
uint16_t listenPort;
uint32_t protocolVersion;
2022-10-09 19:54:16 +00:00
uint64_t pid;
int32_t activeTime; // in seconds
char programName[WelcomeMessageProgramNameSize];
};
struct BroadcastMessage_v2
{
uint16_t broadcastVersion;
uint16_t listenPort;
uint32_t protocolVersion;
int32_t activeTime;
char programName[WelcomeMessageProgramNameSize];
};
struct BroadcastMessage_v1
{
uint32_t broadcastVersion;
uint32_t protocolVersion;
uint32_t listenPort;
uint32_t activeTime;
char programName[WelcomeMessageProgramNameSize];
};
struct BroadcastMessage_v0
{
uint32_t broadcastVersion;
uint32_t protocolVersion;
uint32_t activeTime;
char programName[WelcomeMessageProgramNameSize];
};
enum { BroadcastMessageSize = sizeof( BroadcastMessage ) };
enum { BroadcastMessageSize_v2 = sizeof( BroadcastMessage_v2 ) };
enum { BroadcastMessageSize_v1 = sizeof( BroadcastMessage_v1 ) };
enum { BroadcastMessageSize_v0 = sizeof( BroadcastMessage_v0 ) };
#pragma pack( pop )
2018-07-10 20:29:31 +00:00
}
#endif