mirror of
https://github.com/wolfpld/tracy
synced 2025-04-29 12:23:53 +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::PlotName ||
|
||||||
type == QueueType::FrameName ||
|
type == QueueType::FrameName ||
|
||||||
type == QueueType::ExternalName ||
|
type == QueueType::ExternalName ||
|
||||||
type == QueueType::ExternalThreadName );
|
type == QueueType::ExternalThreadName ||
|
||||||
|
type == QueueType::FiberName );
|
||||||
|
|
||||||
QueueItem item;
|
QueueItem item;
|
||||||
MemWrite( &item.hdr.type, type );
|
MemWrite( &item.hdr.type, type );
|
||||||
@ -3311,6 +3312,11 @@ bool Profiler::HandleServerQuery()
|
|||||||
m_queryDataPtr += 12;
|
m_queryDataPtr += 12;
|
||||||
AckServerQuery();
|
AckServerQuery();
|
||||||
break;
|
break;
|
||||||
|
#ifdef TRACY_FIBERS
|
||||||
|
case ServerQueryFiberName:
|
||||||
|
SendString( ptr, (const char*)ptr, QueueType::FiberName );
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
assert( false );
|
assert( false );
|
||||||
break;
|
break;
|
||||||
|
@ -54,7 +54,8 @@ enum ServerQuery : uint8_t
|
|||||||
ServerQueryCodeLocation,
|
ServerQueryCodeLocation,
|
||||||
ServerQuerySourceCode,
|
ServerQuerySourceCode,
|
||||||
ServerQueryDataTransfer,
|
ServerQueryDataTransfer,
|
||||||
ServerQueryDataTransferPart
|
ServerQueryDataTransferPart,
|
||||||
|
ServerQueryFiberName
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ServerQueryPacket
|
struct ServerQueryPacket
|
||||||
|
@ -111,6 +111,7 @@ enum class QueueType : uint8_t
|
|||||||
ExternalThreadName,
|
ExternalThreadName,
|
||||||
SymbolCode,
|
SymbolCode,
|
||||||
SourceCode,
|
SourceCode,
|
||||||
|
FiberName,
|
||||||
NUM_TYPES
|
NUM_TYPES
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -822,6 +823,7 @@ static constexpr size_t QueueDataSize[] = {
|
|||||||
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external thread name
|
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // external thread name
|
||||||
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // symbol code
|
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // symbol code
|
||||||
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // source code
|
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // source code
|
||||||
|
sizeof( QueueHeader ) + sizeof( QueueStringTransfer ), // fiber name
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert( QueueItemSize == 32, "Queue item size not 32 bytes" );
|
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_inconsistentSamples( false )
|
||||||
, m_pendingStrings( 0 )
|
, m_pendingStrings( 0 )
|
||||||
, m_pendingThreads( 0 )
|
, m_pendingThreads( 0 )
|
||||||
|
, m_pendingFibers( 0 )
|
||||||
, m_pendingExternalNames( 0 )
|
, m_pendingExternalNames( 0 )
|
||||||
, m_pendingSourceLocation( 0 )
|
, m_pendingSourceLocation( 0 )
|
||||||
, m_pendingCallstackFrames( 0 )
|
, m_pendingCallstackFrames( 0 )
|
||||||
@ -3084,7 +3085,7 @@ void Worker::Exec()
|
|||||||
m_pendingCallstackSubframes != 0 || m_pendingFrameImageData.image != nullptr || !m_pendingSymbols.empty() ||
|
m_pendingCallstackSubframes != 0 || m_pendingFrameImageData.image != nullptr || !m_pendingSymbols.empty() ||
|
||||||
!m_pendingSymbolCode.empty() || m_pendingCodeInformation != 0 || !m_serverQueryQueue.empty() ||
|
!m_pendingSymbolCode.empty() || m_pendingCodeInformation != 0 || !m_serverQueryQueue.empty() ||
|
||||||
m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr || m_pendingSecondString.ptr != nullptr ||
|
m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr || m_pendingSecondString.ptr != nullptr ||
|
||||||
!m_sourceCodeQuery.empty() )
|
!m_sourceCodeQuery.empty() || m_pendingFibers != 0 )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -3243,6 +3244,10 @@ void Worker::DispatchFailure( const QueueItem& ev, const char*& ptr )
|
|||||||
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
|
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
|
||||||
m_serverQuerySpaceLeft++;
|
m_serverQuerySpaceLeft++;
|
||||||
break;
|
break;
|
||||||
|
case QueueType::FiberName:
|
||||||
|
AddFiberName( ev.stringTransfer.ptr, ptr, sz );
|
||||||
|
m_serverQuerySpaceLeft++;
|
||||||
|
break;
|
||||||
case QueueType::PlotName:
|
case QueueType::PlotName:
|
||||||
case QueueType::FrameName:
|
case QueueType::FrameName:
|
||||||
case QueueType::ExternalName:
|
case QueueType::ExternalName:
|
||||||
@ -3406,6 +3411,10 @@ bool Worker::DispatchProcess( const QueueItem& ev, const char*& ptr )
|
|||||||
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
|
AddThreadString( ev.stringTransfer.ptr, ptr, sz );
|
||||||
m_serverQuerySpaceLeft++;
|
m_serverQuerySpaceLeft++;
|
||||||
break;
|
break;
|
||||||
|
case QueueType::FiberName:
|
||||||
|
AddFiberName( ev.stringTransfer.ptr, ptr, sz );
|
||||||
|
m_serverQuerySpaceLeft++;
|
||||||
|
break;
|
||||||
case QueueType::PlotName:
|
case QueueType::PlotName:
|
||||||
HandlePlotName( ev.stringTransfer.ptr, ptr, sz );
|
HandlePlotName( ev.stringTransfer.ptr, ptr, sz );
|
||||||
m_serverQuerySpaceLeft++;
|
m_serverQuerySpaceLeft++;
|
||||||
@ -3570,6 +3579,7 @@ ThreadData* Worker::NoticeThreadReal( uint64_t thread )
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
CheckThreadString( thread );
|
||||||
return NewThread( thread, false );
|
return NewThread( thread, false );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3646,7 +3656,6 @@ const MemData& Worker::GetMemoryNamed( uint64_t name ) const
|
|||||||
|
|
||||||
ThreadData* Worker::NewThread( uint64_t thread, bool fiber )
|
ThreadData* Worker::NewThread( uint64_t thread, bool fiber )
|
||||||
{
|
{
|
||||||
if( !fiber ) CheckThreadString( thread );
|
|
||||||
auto td = m_slab.AllocInit<ThreadData>();
|
auto td = m_slab.AllocInit<ThreadData>();
|
||||||
td->id = thread;
|
td->id = thread;
|
||||||
td->count = 0;
|
td->count = 0;
|
||||||
@ -3769,6 +3778,16 @@ void Worker::CheckThreadString( uint64_t id )
|
|||||||
if( m_sock.IsValid() ) Query( ServerQueryThreadString, 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 )
|
void Worker::CheckExternalName( uint64_t id )
|
||||||
{
|
{
|
||||||
if( m_data.externalNames.find( id ) != m_data.externalNames.end() ) return;
|
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;
|
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 )
|
void Worker::AddSingleString( const char* str, size_t sz )
|
||||||
{
|
{
|
||||||
assert( m_pendingSingleString.ptr == nullptr );
|
assert( m_pendingSingleString.ptr == nullptr );
|
||||||
@ -6725,6 +6756,7 @@ void Worker::ProcessFiberEnter( const QueueFiberEnter& ev )
|
|||||||
tid = ( uint64_t(1) << 32 ) | m_data.fiberToThreadMap.size();
|
tid = ( uint64_t(1) << 32 ) | m_data.fiberToThreadMap.size();
|
||||||
m_data.fiberToThreadMap.emplace( ev.fiber, tid );
|
m_data.fiberToThreadMap.emplace( ev.fiber, tid );
|
||||||
NewThread( tid, true );
|
NewThread( tid, true );
|
||||||
|
CheckFiberName( ev.fiber, tid );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -787,6 +787,7 @@ private:
|
|||||||
|
|
||||||
bool CheckString( uint64_t ptr );
|
bool CheckString( uint64_t ptr );
|
||||||
void CheckThreadString( uint64_t id );
|
void CheckThreadString( uint64_t id );
|
||||||
|
void CheckFiberName( uint64_t id, uint64_t tid );
|
||||||
void CheckExternalName( uint64_t id );
|
void CheckExternalName( uint64_t id );
|
||||||
|
|
||||||
void AddSourceLocation( const QueueSourceLocation& srcloc );
|
void AddSourceLocation( const QueueSourceLocation& srcloc );
|
||||||
@ -794,6 +795,7 @@ private:
|
|||||||
|
|
||||||
void AddString( uint64_t ptr, const char* str, size_t sz );
|
void AddString( uint64_t ptr, const char* str, size_t sz );
|
||||||
void AddThreadString( uint64_t id, 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 AddSingleString( const char* str, size_t sz );
|
||||||
void AddSingleStringFailure( const char* str, size_t sz );
|
void AddSingleStringFailure( const char* str, size_t sz );
|
||||||
void AddSecondString( 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_pendingStrings;
|
||||||
uint32_t m_pendingThreads;
|
uint32_t m_pendingThreads;
|
||||||
|
uint32_t m_pendingFibers;
|
||||||
uint32_t m_pendingExternalNames;
|
uint32_t m_pendingExternalNames;
|
||||||
uint32_t m_pendingSourceLocation;
|
uint32_t m_pendingSourceLocation;
|
||||||
uint32_t m_pendingCallstackFrames;
|
uint32_t m_pendingCallstackFrames;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user