From 0dfd7fb20bb903f0903e99c40c9f5f95212e823c Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Thu, 14 May 2026 19:33:43 +0200 Subject: [PATCH] Cache IsFrameExternal() queries. --- server/TracyWorker.cpp | 14 +++++++++++++- server/TracyWorker.hpp | 3 +++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 6ff98f84..28e7c121 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -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; } } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 1922ab27..653de169 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -1150,6 +1150,9 @@ private: Vector m_inlineStack; std::vector m_pendingThreadHints; + + unordered_flat_map m_isExternalCache; + std::shared_mutex m_isExternalCacheLock; }; }