From 0f1f7c6813a5bde104ddfde60c7757ee082bf95a Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 18 Mar 2018 20:15:45 +0100 Subject: [PATCH] Calculate min/max time spans for source locations. --- server/TracyWorker.cpp | 21 +++++++++++++++++++++ server/TracyWorker.hpp | 5 ++++- 2 files changed, 25 insertions(+), 1 deletion(-) 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