diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index c63bf710..0f985870 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -5542,7 +5542,20 @@ void Worker::ProcessCodeInformation( const QueueCodeInformation& ev ) if( ev.line != 0 ) { assert( m_data.codeAddressToLocation.find( ev.ptr ) == m_data.codeAddressToLocation.end() ); - m_data.codeAddressToLocation.emplace( ev.ptr, PackFileLine( fit->second.idx, ev.line ) ); + const auto packed = PackFileLine( fit->second.idx, ev.line ); + m_data.codeAddressToLocation.emplace( ev.ptr, packed ); + + auto lit = m_data.locationCodeAddressList.find( packed ); + if( lit == m_data.locationCodeAddressList.end() ) + { + m_data.locationCodeAddressList.emplace( packed, Vector( ev.ptr ) ); + } + else + { + const bool needSort = lit->second.back() > ev.ptr; + lit->second.push_back( ev.ptr ); + if( needSort ) pdqsort_branchless( lit->second.begin(), lit->second.end() ); + } } m_pendingCustomStrings.erase( fit ); diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 0db36bf8..80667f45 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -298,6 +298,7 @@ private: uint64_t symbolCodeSize = 0; unordered_flat_map codeAddressToLocation; + unordered_flat_map> locationCodeAddressList; }; struct MbpsBlock