mirror of
https://github.com/wolfpld/tracy
synced 2025-05-03 06:03:51 +00:00
One check in CheckSourceLocation.
This commit is contained in:
parent
ccb39ad4bd
commit
184039d500
@ -128,6 +128,7 @@ View::View( const char* addr )
|
|||||||
, m_compRatio( 1 )
|
, m_compRatio( 1 )
|
||||||
, m_pendingStrings( 0 )
|
, m_pendingStrings( 0 )
|
||||||
, m_pendingThreads( 0 )
|
, m_pendingThreads( 0 )
|
||||||
|
, m_pendingSourceLocation( 0 )
|
||||||
, m_stream( LZ4_createStreamDecode() )
|
, m_stream( LZ4_createStreamDecode() )
|
||||||
, m_buffer( new char[TargetFrameSize*3 + 1] )
|
, m_buffer( new char[TargetFrameSize*3 + 1] )
|
||||||
, m_bufferOffset( 0 )
|
, m_bufferOffset( 0 )
|
||||||
@ -490,7 +491,7 @@ void View::Worker()
|
|||||||
|
|
||||||
if( m_terminate )
|
if( m_terminate )
|
||||||
{
|
{
|
||||||
if( m_pendingStrings != 0 || m_pendingThreads != 0 || !m_pendingSourceLocation.empty() ||
|
if( m_pendingStrings != 0 || m_pendingThreads != 0 || m_pendingSourceLocation != 0 ||
|
||||||
!m_pendingCustomStrings.empty() || !m_pendingPlots.empty() )
|
!m_pendingCustomStrings.empty() || !m_pendingPlots.empty() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -934,12 +935,14 @@ void View::CheckThreadString( uint64_t id )
|
|||||||
ServerQuery( ServerQueryThreadString, id );
|
ServerQuery( ServerQueryThreadString, id );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const SourceLocation emptySourceLocation = {};
|
||||||
|
|
||||||
void View::CheckSourceLocation( uint64_t ptr )
|
void View::CheckSourceLocation( uint64_t ptr )
|
||||||
{
|
{
|
||||||
if( m_sourceLocation.find( ptr ) != m_sourceLocation.end() ) return;
|
if( m_sourceLocation.find( ptr ) != m_sourceLocation.end() ) return;
|
||||||
if( m_pendingSourceLocation.find( ptr ) != m_pendingSourceLocation.end() ) return;
|
|
||||||
|
|
||||||
m_pendingSourceLocation.emplace( ptr );
|
m_sourceLocation.emplace( ptr, emptySourceLocation );
|
||||||
|
m_pendingSourceLocation++;
|
||||||
m_sourceLocationQueue.push_back( ptr );
|
m_sourceLocationQueue.push_back( ptr );
|
||||||
|
|
||||||
ServerQuery( ServerQuerySourceLocation, ptr );
|
ServerQuery( ServerQuerySourceLocation, ptr );
|
||||||
@ -997,18 +1000,19 @@ StringLocation View::StoreString( char* str, size_t sz )
|
|||||||
|
|
||||||
void View::AddSourceLocation( const QueueSourceLocation& srcloc )
|
void View::AddSourceLocation( const QueueSourceLocation& srcloc )
|
||||||
{
|
{
|
||||||
|
assert( m_pendingSourceLocation > 0 );
|
||||||
|
m_pendingSourceLocation--;
|
||||||
|
|
||||||
const auto ptr = m_sourceLocationQueue.front();
|
const auto ptr = m_sourceLocationQueue.front();
|
||||||
m_sourceLocationQueue.erase( m_sourceLocationQueue.begin() );
|
m_sourceLocationQueue.erase( m_sourceLocationQueue.begin() );
|
||||||
|
|
||||||
assert( m_sourceLocation.find( ptr ) == m_sourceLocation.end() );
|
auto it = m_sourceLocation.find( ptr );
|
||||||
auto it = m_pendingSourceLocation.find( ptr );
|
assert( it != m_sourceLocation.end() );
|
||||||
assert( it != m_pendingSourceLocation.end() );
|
|
||||||
m_pendingSourceLocation.erase( it );
|
|
||||||
CheckString( srcloc.name );
|
CheckString( srcloc.name );
|
||||||
CheckString( srcloc.file );
|
CheckString( srcloc.file );
|
||||||
CheckString( srcloc.function );
|
CheckString( srcloc.function );
|
||||||
uint32_t color = ( srcloc.r << 16 ) | ( srcloc.g << 8 ) | srcloc.b;
|
uint32_t color = ( srcloc.r << 16 ) | ( srcloc.g << 8 ) | srcloc.b;
|
||||||
m_sourceLocation.emplace( ptr, SourceLocation { srcloc.name == 0 ? StringRef() : StringRef( StringRef::Ptr, srcloc.name ), StringRef( StringRef::Ptr, srcloc.function ), StringRef( StringRef::Ptr, srcloc.file ), srcloc.line, color } );
|
it->second = SourceLocation { srcloc.name == 0 ? StringRef() : StringRef( StringRef::Ptr, srcloc.name ), StringRef( StringRef::Ptr, srcloc.function ), StringRef( StringRef::Ptr, srcloc.file ), srcloc.line, color };
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz )
|
void View::AddSourceLocationPayload( uint64_t ptr, char* data, size_t sz )
|
||||||
@ -1456,9 +1460,8 @@ const SourceLocation& View::GetSourceLocation( int32_t srcloc ) const
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
static const SourceLocation empty = {};
|
|
||||||
const auto it = m_sourceLocation.find( m_sourceLocationExpand[srcloc] );
|
const auto it = m_sourceLocation.find( m_sourceLocationExpand[srcloc] );
|
||||||
if( it == m_sourceLocation.end() ) return empty;
|
assert( it != m_sourceLocation.end() );
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -194,7 +194,6 @@ private:
|
|||||||
float m_compRatio;
|
float m_compRatio;
|
||||||
|
|
||||||
// not used for vis - no need to lock
|
// not used for vis - no need to lock
|
||||||
flat_hash_set<uint64_t, nohash<uint64_t>> m_pendingSourceLocation;
|
|
||||||
flat_hash_map<uint64_t, StringLocation, nohash<uint64_t>> m_pendingCustomStrings;
|
flat_hash_map<uint64_t, StringLocation, nohash<uint64_t>> m_pendingCustomStrings;
|
||||||
flat_hash_map<uint64_t, ThreadData*, nohash<uint64_t>> m_threadMap;
|
flat_hash_map<uint64_t, ThreadData*, nohash<uint64_t>> m_threadMap;
|
||||||
flat_hash_map<uint16_t, GpuCtxData*, nohash<uint16_t>> m_gpuCtxMap;
|
flat_hash_map<uint16_t, GpuCtxData*, nohash<uint16_t>> m_gpuCtxMap;
|
||||||
@ -207,6 +206,7 @@ private:
|
|||||||
|
|
||||||
uint32_t m_pendingStrings;
|
uint32_t m_pendingStrings;
|
||||||
uint32_t m_pendingThreads;
|
uint32_t m_pendingThreads;
|
||||||
|
uint32_t m_pendingSourceLocation;
|
||||||
|
|
||||||
Slab<64*1024*1024> m_slab;
|
Slab<64*1024*1024> m_slab;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user