mirror of
https://github.com/wolfpld/tracy.git
synced 2026-08-28 22:18:23 +00:00
Cache IsFrameExternal() queries.
This commit is contained in:
@@ -8949,7 +8949,19 @@ static bool IsFrameExternalImpl( const char* filename, const char* image )
|
||||
|
||||
bool Worker::IsFrameExternal( StringIdx filename, StringIdx image )
|
||||
{
|
||||
return IsFrameExternalImpl( GetString( filename ), image.Active() ? GetString( image ) : nullptr );
|
||||
const auto key = ( uint64_t( filename.Raw() ) << 32 ) | image.Raw();
|
||||
|
||||
{
|
||||
std::shared_lock lock( m_isExternalCacheLock );
|
||||
auto it = m_isExternalCache.find( key );
|
||||
if( it != m_isExternalCache.end() ) return it->second;
|
||||
}
|
||||
|
||||
const auto res = IsFrameExternalImpl( GetString( filename ), image.Active() ? GetString( image ) : nullptr );
|
||||
|
||||
std::lock_guard lock( m_isExternalCacheLock );
|
||||
m_isExternalCache.emplace( key, res );
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1150,6 +1150,9 @@ private:
|
||||
Vector<InlineStackData> m_inlineStack;
|
||||
|
||||
std::vector<uint32_t> m_pendingThreadHints;
|
||||
|
||||
unordered_flat_map<uint64_t, bool> m_isExternalCache;
|
||||
std::shared_mutex m_isExternalCacheLock;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user