diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 369742c4..c687a59b 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -1239,6 +1239,17 @@ void Worker::ProcessZoneEnd( const QueueZoneEnd& ev ) assert( zone->end >= zone->start ); m_data.lastTime = std::max( m_data.lastTime, zone->end ); + +#ifndef TRACY_NO_STATISTICS + auto it = m_data.sourceLocationZones.find( zone->srcloc ); + assert( it != m_data.sourceLocationZones.end() ); + const auto timeSpan = zone->end - zone->start; + if( timeSpan > 0 ) + { + it->second.min = std::min( it->second.min, timeSpan ); + it->second.max = std::max( it->second.max, timeSpan ); + } +#endif } void Worker::ProcessFrameMark( const QueueFrameMark& ev ) @@ -1627,6 +1638,16 @@ void Worker::ReadTimeline( FileRead& f, Vector& vec, uint64_t size ) auto it = m_data.sourceLocationZones.find( zone->srcloc ); assert( it != m_data.sourceLocationZones.end() ); it->second.zones.push_back( zone ); + + if( zone->end != -1 ) + { + const auto timeSpan = zone->end - zone->start; + if( timeSpan > 0 ) + { + it->second.min = std::min( it->second.min, timeSpan ); + it->second.max = std::max( it->second.max, timeSpan ); + } + } #endif ReadTimeline( f, zone->child ); diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 57623c76..4f5a7876 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -2,6 +2,7 @@ #define __TRACYWORKER_HPP__ #include +#include #include #include #include @@ -34,9 +35,11 @@ class Worker { struct SourceLocationZones { - SourceLocationZones() {} + SourceLocationZones() : min( std::numeric_limits::max() ), max( std::numeric_limits::min() ) {} Vector zones; + int64_t min; + int64_t max; }; struct DataBlock