mirror of
https://github.com/wolfpld/tracy
synced 2025-04-29 04:23:51 +00:00
Fiber name transport.
This commit is contained in:
parent
211b202d8e
commit
fceb065329
@ -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;
|
||||
|
@ -54,7 +54,8 @@ enum ServerQuery : uint8_t
|
||||
ServerQueryCodeLocation,
|
||||
ServerQuerySourceCode,
|
||||
ServerQueryDataTransfer,
|
||||
ServerQueryDataTransferPart
|
||||
ServerQueryDataTransferPart,
|
||||
ServerQueryFiberName
|
||||
};
|
||||
|
||||
struct ServerQueryPacket
|
||||
|
@ -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" );
|
||||
|
@ -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
|
||||
{
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user