1
0
mirror of https://github.com/wolfpld/tracy synced 2025-04-29 04:23:51 +00:00

Fiber name transport.

This commit is contained in:
Bartosz Taudul 2021-11-03 18:57:30 +01:00
parent 211b202d8e
commit fceb065329
No known key found for this signature in database
GPG Key ID: B7FE2008B7575DF3
5 changed files with 48 additions and 4 deletions

View File

@ -2869,7 +2869,8 @@ void Profiler::SendString( uint64_t str, const char* ptr, size_t len, QueueType
type == QueueType::PlotName ||
type == QueueType::FrameName ||
type == QueueType::ExternalName ||
type == QueueType::ExternalThreadName );
type == QueueType::ExternalThreadName ||
type == QueueType::FiberName );
QueueItem item;
MemWrite( &item.hdr.type, type );
@ -3311,6 +3312,11 @@ bool Profiler::HandleServerQuery()
m_queryDataPtr += 12;
AckServerQuery();
break;
#ifdef TRACY_FIBERS
case ServerQueryFiberName:
SendString( ptr, (const char*)ptr, QueueType::FiberName );
break;
#endif
default:
assert( false );
break;

View File

@ -54,7 +54,8 @@ enum ServerQuery : uint8_t
ServerQueryCodeLocation,
ServerQuerySourceCode,
ServerQueryDataTransfer,
ServerQueryDataTransferPart
ServerQueryDataTransferPart,
ServerQueryFiberName
};
struct ServerQueryPacket

View File

@ -111,6 +111,7 @@ enum class QueueType : uint8_t
ExternalThreadName,
SymbolCode,
SourceCode,
FiberName,
NUM_TYPES
};
@ -822,6 +823,7 @@ static constexpr size_t QueueDataSize[] = {
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external thread name
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // symbol code
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // source code
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // fiber name
};
static_assert( QueueItemSize == 32, "Queue item size not 32 bytes" );

View File

@ -266,6 +266,7 @@ Worker::Worker( const char* addr, uint16_t port )
, m_inconsistentSamples( false )
, m_pendingStrings( 0 )
, m_pendingThreads( 0 )
, m_pendingFibers( 0 )
, m_pendingExternalNames( 0 )
, m_pendingSourceLocation( 0 )
, m_pendingCallstackFrames( 0 )
@ -3084,7 +3085,7 @@ void Worker::Exec()
m_pendingCallstackSubframes != 0 || m_pendingFrameImageData.image != nullptr || !m_pendingSymbols.empty() ||
!m_pendingSymbolCode.empty() || m_pendingCodeInformation != 0 || !m_serverQueryQueue.empty() ||
m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr || m_pendingSecondString.ptr != nullptr ||
!m_sourceCodeQuery.empty() )
!m_sourceCodeQuery.empty() || m_pendingFibers != 0 )
{
continue;
}
@ -3243,6 +3244,10 @@ void Worker::DispatchFailure( const QueueItem& ev, const char*& ptr )
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
m_serverQuerySpaceLeft++;
break;
case QueueType::FiberName:
AddFiberName( ev.stringTransfer.ptr, ptr, sz );
m_serverQuerySpaceLeft++;
break;
case QueueType::PlotName:
case QueueType::FrameName:
case QueueType::ExternalName:
@ -3406,6 +3411,10 @@ bool Worker::DispatchProcess( const QueueItem& ev, const char*& ptr )
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
m_serverQuerySpaceLeft++;
break;
case QueueType::FiberName:
AddFiberName( ev.stringTransfer.ptr, ptr, sz );
m_serverQuerySpaceLeft++;
break;
case QueueType::PlotName:
HandlePlotName( ev.stringTransfer.ptr, ptr, sz );
m_serverQuerySpaceLeft++;
@ -3570,6 +3579,7 @@ ThreadData* Worker::NoticeThreadReal( uint64_t thread )
}
else
{
CheckThreadString( thread );
return NewThread( thread, false );
}
}
@ -3646,7 +3656,6 @@ const MemData& Worker::GetMemoryNamed( uint64_t name ) const
ThreadData* Worker::NewThread( uint64_t thread, bool fiber )
{
if( !fiber ) CheckThreadString( thread );
auto td = m_slab.AllocInit<ThreadData>();
td->id = thread;
td->count = 0;
@ -3769,6 +3778,16 @@ void Worker::CheckThreadString( uint64_t id )
if( m_sock.IsValid() ) Query( ServerQueryThreadString, id );
}
void Worker::CheckFiberName( uint64_t id, uint64_t tid )
{
if( m_data.threadNames.find( tid ) != m_data.threadNames.end() ) return;
m_data.threadNames.emplace( tid, "???" );
m_pendingFibers++;
if( m_sock.IsValid() ) Query( ServerQueryFiberName, id );
}
void Worker::CheckExternalName( uint64_t id )
{
if( m_data.externalNames.find( id ) != m_data.externalNames.end() ) return;
@ -3895,6 +3914,18 @@ void Worker::AddThreadString( uint64_t id, const char* str, size_t sz )
it->second = sl.ptr;
}
void Worker::AddFiberName( uint64_t id, const char* str, size_t sz )
{
assert( m_pendingFibers > 0 );
m_pendingFibers--;
auto it = m_data.fiberToThreadMap.find( id );
assert( it != m_data.fiberToThreadMap.end() );
auto tit = m_data.threadNames.find( it->second );
assert( tit != m_data.threadNames.end() && strcmp( tit->second, "???" ) == 0 );
const auto sl = StoreString( str, sz );
tit->second = sl.ptr;
}
void Worker::AddSingleString( const char* str, size_t sz )
{
assert( m_pendingSingleString.ptr == nullptr );
@ -6725,6 +6756,7 @@ void Worker::ProcessFiberEnter( const QueueFiberEnter& ev )
tid = ( uint64_t(1) << 32 ) | m_data.fiberToThreadMap.size();
m_data.fiberToThreadMap.emplace( ev.fiber, tid );
NewThread( tid, true );
CheckFiberName( ev.fiber, tid );
}
else
{

View File

@ -787,6 +787,7 @@ private:
bool CheckString( uint64_t ptr );
void CheckThreadString( uint64_t id );
void CheckFiberName( uint64_t id, uint64_t tid );
void CheckExternalName( uint64_t id );
void AddSourceLocation( const QueueSourceLocation& srcloc );
@ -794,6 +795,7 @@ private:
void AddString( uint64_t ptr, const char* str, size_t sz );
void AddThreadString( uint64_t id, const char* str, size_t sz );
void AddFiberName( uint64_t id, const char* str, size_t sz );
void AddSingleString( const char* str, size_t sz );
void AddSingleStringFailure( const char* str, size_t sz );
void AddSecondString( const char* str, size_t sz );
@ -924,6 +926,7 @@ private:
uint32_t m_pendingStrings;
uint32_t m_pendingThreads;
uint32_t m_pendingFibers;
uint32_t m_pendingExternalNames;
uint32_t m_pendingSourceLocation;
uint32_t m_pendingCallstackFrames;