1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Also retrieve external thread names.

This commit is contained in:
Bartosz Taudul
2019-08-16 19:49:16 +02:00
parent 134a8c5d2a
commit e975c4d7bf
6 changed files with 62 additions and 14 deletions
+2 -1
View File
@@ -3972,7 +3972,7 @@ int View::DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover,
{
const auto thread = it->Thread();
const auto local = m_worker.IsThreadLocal( thread );
auto txt = local ? m_worker.GetThreadString( thread ) : m_worker.GetExternalName( thread );
auto txt = local ? m_worker.GetThreadString( thread ) : m_worker.GetExternalName( thread ).first;
const bool untracked = !local && strcmp( txt, m_worker.GetCaptureProgram().c_str() ) == 0;
const auto pr0 = ( start - m_zvStart ) * pxns;
const auto pr1 = ( end - m_zvStart ) * pxns;
@@ -4031,6 +4031,7 @@ int View::DrawCpuData( int offset, double pxns, const ImVec2& wpos, bool hover,
{
TextDisabledUnformatted( "(external)" );
}
TextFocused( "Thread:", m_worker.GetExternalName( thread ).second );
}
ImGui::Separator();
TextFocused( "Start time:", TimeToString( start ) );
+27 -10
View File
@@ -499,12 +499,14 @@ Worker::Worker( FileRead& f, EventType::Type eventMask )
f.Read( sz );
for( uint64_t i=0; i<sz; i++ )
{
uint64_t id, ptr;
uint64_t id, ptr, ptr2;
f.Read2( id, ptr );
f.Read( ptr2 );
auto it = pointerMap.find( ptr );
if( it != pointerMap.end() )
auto it2 = pointerMap.find( ptr2 );
if( it != pointerMap.end() && it2 != pointerMap.end() )
{
m_data.externalNames.emplace( id, it->second );
m_data.externalNames.emplace( id, std::make_pair( it->second, it2->second ) );
}
}
}
@@ -1854,12 +1856,12 @@ const SourceLocation& Worker::GetSourceLocation( int16_t srcloc ) const
}
}
const char* Worker::GetExternalName( uint64_t id ) const
std::pair<const char*, const char*> Worker::GetExternalName( uint64_t id ) const
{
const auto it = m_data.externalNames.find( id );
if( it == m_data.externalNames.end() )
{
return "???";
return std::make_pair( "???", "???" );
}
else
{
@@ -2287,6 +2289,9 @@ bool Worker::DispatchProcess( const QueueItem& ev, char*& ptr )
case QueueType::ExternalName:
AddExternalName( ev.stringTransfer.ptr, ptr, sz );
break;
case QueueType::ExternalThreadName:
AddExternalThreadName( ev.stringTransfer.ptr, ptr, sz );
break;
default:
assert( false );
break;
@@ -2519,8 +2524,8 @@ void Worker::CheckExternalName( uint64_t id )
{
if( m_data.externalNames.find( id ) != m_data.externalNames.end() ) return;
m_data.externalNames.emplace( id, "???" );
m_pendingExternalNames++;
m_data.externalNames.emplace( id, std::make_pair( "???", "???" ) );
m_pendingExternalNames += 2;
Query( ServerQueryExternalName, id );
}
@@ -2622,9 +2627,19 @@ void Worker::AddExternalName( uint64_t ptr, char* str, size_t sz )
assert( m_pendingExternalNames > 0 );
m_pendingExternalNames--;
auto it = m_data.externalNames.find( ptr );
assert( it != m_data.externalNames.end() && strcmp( it->second, "???" ) == 0 );
assert( it != m_data.externalNames.end() && strcmp( it->second.first, "???" ) == 0 );
const auto sl = StoreString( str, sz );
it->second = sl.ptr;
it->second.first = sl.ptr;
}
void Worker::AddExternalThreadName( uint64_t ptr, char* str, size_t sz )
{
assert( m_pendingExternalNames > 0 );
m_pendingExternalNames--;
auto it = m_data.externalNames.find( ptr );
assert( it != m_data.externalNames.end() && strcmp( it->second.second, "???" ) == 0 );
const auto sl = StoreString( str, sz );
it->second.second = sl.ptr;
}
static const uint8_t DxtcIndexTable[256] = {
@@ -4695,7 +4710,9 @@ void Worker::Write( FileWrite& f )
for( auto& v : m_data.externalNames )
{
f.Write( &v.first, sizeof( v.first ) );
uint64_t ptr = (uint64_t)v.second;
uint64_t ptr = (uint64_t)v.second.first;
f.Write( &ptr, sizeof( ptr ) );
ptr = (uint64_t)v.second.second;
f.Write( &ptr, sizeof( ptr ) );
}
+3 -2
View File
@@ -173,7 +173,7 @@ private:
Vector<const char*> stringData;
flat_hash_map<charutil::StringKey, uint32_t, charutil::StringKey::HasherPOT, charutil::StringKey::Comparator> stringMap;
flat_hash_map<uint64_t, const char*, nohash<uint64_t>> threadNames;
flat_hash_map<uint64_t, const char*, nohash<uint64_t>> externalNames;
flat_hash_map<uint64_t, std::pair<const char*, const char*>, nohash<uint64_t>> externalNames;
flat_hash_map<uint64_t, SourceLocation, nohash<uint64_t>> sourceLocation;
Vector<SourceLocation*> sourceLocationPayload;
@@ -335,7 +335,7 @@ public:
const char* GetThreadString( uint64_t id ) const;
bool IsThreadLocal( uint64_t id ) const;
const SourceLocation& GetSourceLocation( int16_t srcloc ) const;
const char* GetExternalName( uint64_t id ) const;
std::pair<const char*, const char*> GetExternalName( uint64_t id ) const;
const char* GetZoneName( const SourceLocation& srcloc ) const;
const char* GetZoneName( const ZoneEvent& ev ) const;
@@ -488,6 +488,7 @@ private:
void AddThreadString( uint64_t id, char* str, size_t sz );
void AddCustomString( uint64_t ptr, char* str, size_t sz );
void AddExternalName( uint64_t ptr, char* str, size_t sz );
void AddExternalThreadName( uint64_t ptr, char* str, size_t sz );
void AddFrameImageData( uint64_t ptr, char* data, size_t sz );
tracy_force_inline void AddCallstackPayload( uint64_t ptr, char* data, size_t sz );