1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-30 04:43:53 +00:00

Send single string for messages.

This commit is contained in:
Bartosz Taudul 2020-07-26 01:15:11 +02:00
parent 5553761c02
commit e91950f006
5 changed files with 55 additions and 47 deletions

View File

@ -1447,12 +1447,14 @@ void Profiler::Worker()
for( auto& item : m_deferredQueue ) for( auto& item : m_deferredQueue )
{ {
uint64_t ptr; uint64_t ptr;
uint16_t size;
const auto idx = MemRead<uint8_t>( &item.hdr.idx ); const auto idx = MemRead<uint8_t>( &item.hdr.idx );
switch( (QueueType)idx ) switch( (QueueType)idx )
{ {
case QueueType::MessageAppInfo: case QueueType::MessageAppInfo:
ptr = MemRead<uint64_t>( &item.message.text ); ptr = MemRead<uint64_t>( &item.messageFat.text );
SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); size = MemRead<uint16_t>( &item.messageFat.size );
SendSingleString( (const char*)ptr, size );
break; break;
case QueueType::LockName: case QueueType::LockName:
ptr = MemRead<uint64_t>( &item.lockName.name ); ptr = MemRead<uint64_t>( &item.lockName.name );
@ -1720,7 +1722,7 @@ static void FreeAssociatedMemory( const QueueItem& item )
#ifndef TRACY_ON_DEMAND #ifndef TRACY_ON_DEMAND
case QueueType::MessageAppInfo: case QueueType::MessageAppInfo:
#endif #endif
ptr = MemRead<uint64_t>( &item.message.text ); ptr = MemRead<uint64_t>( &item.messageFat.text );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::ZoneBeginAllocSrcLoc: case QueueType::ZoneBeginAllocSrcLoc:
@ -1842,19 +1844,20 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token )
case QueueType::MessageCallstack: case QueueType::MessageCallstack:
ptr = MemRead<uint64_t>( &item->messageFat.text ); ptr = MemRead<uint64_t>( &item->messageFat.text );
size = MemRead<uint16_t>( &item->messageFat.size ); size = MemRead<uint16_t>( &item->messageFat.size );
SendString( ptr, (const char*)ptr, size, QueueType::CustomStringData ); SendSingleString( (const char*)ptr, size );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::MessageColor: case QueueType::MessageColor:
case QueueType::MessageColorCallstack: case QueueType::MessageColorCallstack:
ptr = MemRead<uint64_t>( &item->messageColorFat.text ); ptr = MemRead<uint64_t>( &item->messageColorFat.text );
size = MemRead<uint16_t>( &item->messageColorFat.size ); size = MemRead<uint16_t>( &item->messageColorFat.size );
SendString( ptr, (const char*)ptr, size, QueueType::CustomStringData ); SendSingleString( (const char*)ptr, size );
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
break; break;
case QueueType::MessageAppInfo: case QueueType::MessageAppInfo:
ptr = MemRead<uint64_t>( &item->message.text ); ptr = MemRead<uint64_t>( &item->messageFat.text );
SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); size = MemRead<uint16_t>( &item->messageFat.size );
SendSingleString( (const char*)ptr, size );
#ifndef TRACY_ON_DEMAND #ifndef TRACY_ON_DEMAND
tracy_free( (void*)ptr ); tracy_free( (void*)ptr );
#endif #endif

View File

@ -298,8 +298,8 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack ); TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack );
MemWrite( &item->message.time, GetTime() ); MemWrite( &item->messageLiteral.time, GetTime() );
MemWrite( &item->message.text, (uint64_t)txt ); MemWrite( &item->messageLiteral.text, (uint64_t)txt );
TracyLfqCommit; TracyLfqCommit;
if( callstack != 0 ) tracy::GetProfiler().SendCallstack( callstack ); if( callstack != 0 ) tracy::GetProfiler().SendCallstack( callstack );
@ -331,11 +331,11 @@ public:
if( !GetProfiler().IsConnected() ) return; if( !GetProfiler().IsConnected() ) return;
#endif #endif
TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack ); TracyLfqPrepare( callstack == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack );
MemWrite( &item->messageColor.time, GetTime() ); MemWrite( &item->messageColorLiteral.time, GetTime() );
MemWrite( &item->messageColor.text, (uint64_t)txt ); MemWrite( &item->messageColorLiteral.text, (uint64_t)txt );
MemWrite( &item->messageColor.r, uint8_t( ( color ) & 0xFF ) ); MemWrite( &item->messageColorLiteral.r, uint8_t( ( color ) & 0xFF ) );
MemWrite( &item->messageColor.g, uint8_t( ( color >> 8 ) & 0xFF ) ); MemWrite( &item->messageColorLiteral.g, uint8_t( ( color >> 8 ) & 0xFF ) );
MemWrite( &item->messageColor.b, uint8_t( ( color >> 16 ) & 0xFF ) ); MemWrite( &item->messageColorLiteral.b, uint8_t( ( color >> 16 ) & 0xFF ) );
TracyLfqCommit; TracyLfqCommit;
if( callstack != 0 ) tracy::GetProfiler().SendCallstack( callstack ); if( callstack != 0 ) tracy::GetProfiler().SendCallstack( callstack );
@ -343,13 +343,14 @@ public:
static tracy_force_inline void MessageAppInfo( const char* txt, size_t size ) static tracy_force_inline void MessageAppInfo( const char* txt, size_t size )
{ {
assert( size < std::numeric_limits<uint16_t>::max() );
InitRPMallocThread(); InitRPMallocThread();
auto ptr = (char*)tracy_malloc( size+1 ); auto ptr = (char*)tracy_malloc( size );
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
ptr[size] = '\0';
TracyLfqPrepare( QueueType::MessageAppInfo ); TracyLfqPrepare( QueueType::MessageAppInfo );
MemWrite( &item->message.time, GetTime() ); MemWrite( &item->messageFat.time, GetTime() );
MemWrite( &item->message.text, (uint64_t)ptr ); MemWrite( &item->messageFat.text, (uint64_t)ptr );
MemWrite( &item->messageFat.size, (uint16_t)size );
#ifdef TRACY_ON_DEMAND #ifdef TRACY_ON_DEMAND
GetProfiler().DeferItem( *item ); GetProfiler().DeferItem( *item );

View File

@ -251,7 +251,6 @@ struct QueuePlotData
struct QueueMessage struct QueueMessage
{ {
int64_t time; int64_t time;
uint64_t text; // ptr
}; };
struct QueueMessageColor : public QueueMessage struct QueueMessageColor : public QueueMessage
@ -261,13 +260,25 @@ struct QueueMessageColor : public QueueMessage
uint8_t b; uint8_t b;
}; };
struct QueueMessageLiteral : public QueueMessage
{
uint64_t text; // ptr
};
struct QueueMessageColorLiteral : public QueueMessageColor
{
uint64_t text; // ptr
};
struct QueueMessageFat : public QueueMessage struct QueueMessageFat : public QueueMessage
{ {
uint64_t text; // ptr
uint16_t size; uint16_t size;
}; };
struct QueueMessageColorFat : public QueueMessageColor struct QueueMessageColorFat : public QueueMessageColor
{ {
uint64_t text; // ptr
uint16_t size; uint16_t size;
}; };
@ -495,6 +506,8 @@ struct QueueItem
QueuePlotData plotData; QueuePlotData plotData;
QueueMessage message; QueueMessage message;
QueueMessageColor messageColor; QueueMessageColor messageColor;
QueueMessageLiteral messageLiteral;
QueueMessageColorLiteral messageColorLiteral;
QueueMessageFat messageFat; QueueMessageFat messageFat;
QueueMessageColorFat messageColorFat; QueueMessageColorFat messageColorFat;
QueueGpuNewContext gpuNewContext; QueueGpuNewContext gpuNewContext;
@ -590,10 +603,10 @@ static constexpr size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueLockAnnounce ), sizeof( QueueHeader ) + sizeof( QueueLockAnnounce ),
sizeof( QueueHeader ) + sizeof( QueueLockTerminate ), sizeof( QueueHeader ) + sizeof( QueueLockTerminate ),
sizeof( QueueHeader ) + sizeof( QueueLockMark ), sizeof( QueueHeader ) + sizeof( QueueLockMark ),
sizeof( QueueHeader ) + sizeof( QueueMessage ), // literal sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ),
sizeof( QueueHeader ) + sizeof( QueueMessageColor ), // literal sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ),
sizeof( QueueHeader ) + sizeof( QueueMessage ), // literal, callstack sizeof( QueueHeader ) + sizeof( QueueMessageLiteral ), // callstack
sizeof( QueueHeader ) + sizeof( QueueMessageColor ), // literal, callstack sizeof( QueueHeader ) + sizeof( QueueMessageColorLiteral ), // callstack
sizeof( QueueHeader ) + sizeof( QueueGpuNewContext ), sizeof( QueueHeader ) + sizeof( QueueGpuNewContext ),
sizeof( QueueHeader ) + sizeof( QueueCallstackFrameSize ), sizeof( QueueHeader ) + sizeof( QueueCallstackFrameSize ),
sizeof( QueueHeader ) + sizeof( QueueCallstackFrame ), sizeof( QueueHeader ) + sizeof( QueueCallstackFrame ),

View File

@ -3947,25 +3947,25 @@ bool Worker::Process( const QueueItem& ev )
ProcessMessage( ev.message ); ProcessMessage( ev.message );
break; break;
case QueueType::MessageLiteral: case QueueType::MessageLiteral:
ProcessMessageLiteral( ev.message ); ProcessMessageLiteral( ev.messageLiteral );
break; break;
case QueueType::MessageColor: case QueueType::MessageColor:
ProcessMessageColor( ev.messageColor ); ProcessMessageColor( ev.messageColor );
break; break;
case QueueType::MessageLiteralColor: case QueueType::MessageLiteralColor:
ProcessMessageLiteralColor( ev.messageColor ); ProcessMessageLiteralColor( ev.messageColorLiteral );
break; break;
case QueueType::MessageCallstack: case QueueType::MessageCallstack:
ProcessMessageCallstack( ev.message ); ProcessMessageCallstack( ev.message );
break; break;
case QueueType::MessageLiteralCallstack: case QueueType::MessageLiteralCallstack:
ProcessMessageLiteralCallstack( ev.message ); ProcessMessageLiteralCallstack( ev.messageLiteral );
break; break;
case QueueType::MessageColorCallstack: case QueueType::MessageColorCallstack:
ProcessMessageColorCallstack( ev.messageColor ); ProcessMessageColorCallstack( ev.messageColor );
break; break;
case QueueType::MessageLiteralColorCallstack: case QueueType::MessageLiteralColorCallstack:
ProcessMessageLiteralColorCallstack( ev.messageColor ); ProcessMessageLiteralColorCallstack( ev.messageColorLiteral );
break; break;
case QueueType::MessageAppInfo: case QueueType::MessageAppInfo:
ProcessMessageAppInfo( ev.message ); ProcessMessageAppInfo( ev.message );
@ -4810,21 +4810,18 @@ void Worker::ProcessPlotConfig( const QueuePlotConfig& ev )
void Worker::ProcessMessage( const QueueMessage& ev ) void Worker::ProcessMessage( const QueueMessage& ev )
{ {
auto it = m_pendingCustomStrings.find( ev.text );
assert( it != m_pendingCustomStrings.end() );
auto msg = m_slab.Alloc<MessageData>(); auto msg = m_slab.Alloc<MessageData>();
const auto time = TscTime( ev.time - m_data.baseTime ); const auto time = TscTime( ev.time - m_data.baseTime );
msg->time = time; msg->time = time;
msg->ref = StringRef( StringRef::Type::Idx, it->second.idx ); msg->ref = StringRef( StringRef::Type::Idx, GetSingleStringIdx() );
msg->thread = CompressThread( m_threadCtx ); msg->thread = CompressThread( m_threadCtx );
msg->color = 0xFFFFFFFF; msg->color = 0xFFFFFFFF;
msg->callstack.SetVal( 0 ); msg->callstack.SetVal( 0 );
if( m_data.lastTime < time ) m_data.lastTime = time; if( m_data.lastTime < time ) m_data.lastTime = time;
InsertMessageData( msg ); InsertMessageData( msg );
m_pendingCustomStrings.erase( it );
} }
void Worker::ProcessMessageLiteral( const QueueMessage& ev ) void Worker::ProcessMessageLiteral( const QueueMessageLiteral& ev )
{ {
CheckString( ev.text ); CheckString( ev.text );
auto msg = m_slab.Alloc<MessageData>(); auto msg = m_slab.Alloc<MessageData>();
@ -4840,21 +4837,18 @@ void Worker::ProcessMessageLiteral( const QueueMessage& ev )
void Worker::ProcessMessageColor( const QueueMessageColor& ev ) void Worker::ProcessMessageColor( const QueueMessageColor& ev )
{ {
auto it = m_pendingCustomStrings.find( ev.text );
assert( it != m_pendingCustomStrings.end() );
auto msg = m_slab.Alloc<MessageData>(); auto msg = m_slab.Alloc<MessageData>();
const auto time = TscTime( ev.time - m_data.baseTime ); const auto time = TscTime( ev.time - m_data.baseTime );
msg->time = time; msg->time = time;
msg->ref = StringRef( StringRef::Type::Idx, it->second.idx ); msg->ref = StringRef( StringRef::Type::Idx, GetSingleStringIdx() );
msg->thread = CompressThread( m_threadCtx ); msg->thread = CompressThread( m_threadCtx );
msg->color = 0xFF000000 | ( ev.r << 16 ) | ( ev.g << 8 ) | ev.b; msg->color = 0xFF000000 | ( ev.r << 16 ) | ( ev.g << 8 ) | ev.b;
msg->callstack.SetVal( 0 ); msg->callstack.SetVal( 0 );
if( m_data.lastTime < time ) m_data.lastTime = time; if( m_data.lastTime < time ) m_data.lastTime = time;
InsertMessageData( msg ); InsertMessageData( msg );
m_pendingCustomStrings.erase( it );
} }
void Worker::ProcessMessageLiteralColor( const QueueMessageColor& ev ) void Worker::ProcessMessageLiteralColor( const QueueMessageColorLiteral& ev )
{ {
CheckString( ev.text ); CheckString( ev.text );
auto msg = m_slab.Alloc<MessageData>(); auto msg = m_slab.Alloc<MessageData>();
@ -4876,7 +4870,7 @@ void Worker::ProcessMessageCallstack( const QueueMessage& ev )
next.type = NextCallstackType::Message; next.type = NextCallstackType::Message;
} }
void Worker::ProcessMessageLiteralCallstack( const QueueMessage& ev ) void Worker::ProcessMessageLiteralCallstack( const QueueMessageLiteral& ev )
{ {
ProcessMessageLiteral( ev ); ProcessMessageLiteral( ev );
@ -4892,7 +4886,7 @@ void Worker::ProcessMessageColorCallstack( const QueueMessageColor& ev )
next.type = NextCallstackType::Message; next.type = NextCallstackType::Message;
} }
void Worker::ProcessMessageLiteralColorCallstack( const QueueMessageColor& ev ) void Worker::ProcessMessageLiteralColorCallstack( const QueueMessageColorLiteral& ev )
{ {
ProcessMessageLiteralColor( ev ); ProcessMessageLiteralColor( ev );
@ -4902,12 +4896,9 @@ void Worker::ProcessMessageLiteralColorCallstack( const QueueMessageColor& ev )
void Worker::ProcessMessageAppInfo( const QueueMessage& ev ) void Worker::ProcessMessageAppInfo( const QueueMessage& ev )
{ {
auto it = m_pendingCustomStrings.find( ev.text ); m_data.appInfo.push_back( StringRef( StringRef::Type::Idx, GetSingleStringIdx() ) );
assert( it != m_pendingCustomStrings.end() );
m_data.appInfo.push_back( StringRef( StringRef::Type::Idx, it->second.idx ) );
const auto time = TscTime( ev.time - m_data.baseTime ); const auto time = TscTime( ev.time - m_data.baseTime );
if( m_data.lastTime < time ) m_data.lastTime = time; if( m_data.lastTime < time ) m_data.lastTime = time;
m_pendingCustomStrings.erase( it );
} }
void Worker::ProcessGpuNewContext( const QueueGpuNewContext& ev ) void Worker::ProcessGpuNewContext( const QueueGpuNewContext& ev )

View File

@ -630,13 +630,13 @@ private:
tracy_force_inline void ProcessPlotData( const QueuePlotData& ev ); tracy_force_inline void ProcessPlotData( const QueuePlotData& ev );
tracy_force_inline void ProcessPlotConfig( const QueuePlotConfig& ev ); tracy_force_inline void ProcessPlotConfig( const QueuePlotConfig& ev );
tracy_force_inline void ProcessMessage( const QueueMessage& ev ); tracy_force_inline void ProcessMessage( const QueueMessage& ev );
tracy_force_inline void ProcessMessageLiteral( const QueueMessage& ev ); tracy_force_inline void ProcessMessageLiteral( const QueueMessageLiteral& ev );
tracy_force_inline void ProcessMessageColor( const QueueMessageColor& ev ); tracy_force_inline void ProcessMessageColor( const QueueMessageColor& ev );
tracy_force_inline void ProcessMessageLiteralColor( const QueueMessageColor& ev ); tracy_force_inline void ProcessMessageLiteralColor( const QueueMessageColorLiteral& ev );
tracy_force_inline void ProcessMessageCallstack( const QueueMessage& ev ); tracy_force_inline void ProcessMessageCallstack( const QueueMessage& ev );
tracy_force_inline void ProcessMessageLiteralCallstack( const QueueMessage& ev ); tracy_force_inline void ProcessMessageLiteralCallstack( const QueueMessageLiteral& ev );
tracy_force_inline void ProcessMessageColorCallstack( const QueueMessageColor& ev ); tracy_force_inline void ProcessMessageColorCallstack( const QueueMessageColor& ev );
tracy_force_inline void ProcessMessageLiteralColorCallstack( const QueueMessageColor& ev ); tracy_force_inline void ProcessMessageLiteralColorCallstack( const QueueMessageColorLiteral& ev );
tracy_force_inline void ProcessMessageAppInfo( const QueueMessage& ev ); tracy_force_inline void ProcessMessageAppInfo( const QueueMessage& ev );
tracy_force_inline void ProcessGpuNewContext( const QueueGpuNewContext& ev ); tracy_force_inline void ProcessGpuNewContext( const QueueGpuNewContext& ev );
tracy_force_inline void ProcessGpuZoneBegin( const QueueGpuZoneBegin& ev, bool serial ); tracy_force_inline void ProcessGpuZoneBegin( const QueueGpuZoneBegin& ev, bool serial );