From 3ac98beb5a22f8420b6937198c9562c422e52acc Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 18 Mar 2018 20:20:24 +0100 Subject: [PATCH] Use precalculated min/max time spans. --- server/TracyView.cpp | 27 +++++++-------------------- server/TracyWorker.cpp | 6 +++--- server/TracyWorker.hpp | 2 +- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/server/TracyView.cpp b/server/TracyView.cpp index 3f088a50..3a4f6cdb 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -2734,7 +2734,7 @@ void View::DrawFindZone() for( auto& v : m_findZone.match ) { auto& srcloc = m_worker.GetSourceLocation( v ); - auto& zones = m_worker.GetZonesForSourceLocation( v ); + auto& zones = m_worker.GetZonesForSourceLocation( v ).zones; ImGui::PushID( idx ); ImGui::RadioButton( m_worker.GetString( srcloc.name.active ? srcloc.name : srcloc.function ), &m_findZone.selMatch, idx++ ); ImGui::SameLine(); @@ -2755,19 +2755,10 @@ void View::DrawFindZone() { const auto ty = ImGui::GetFontSize(); - int64_t tmin = std::numeric_limits::max(); - int64_t tmax = std::numeric_limits::min(); - - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); - for( auto& ev : zones ) - { - const auto timeSpan = m_worker.GetZoneEndDirect( *ev ) - ev->start; - if( timeSpan != 0 ) - { - tmin = std::min( tmin, timeSpan ); - tmax = std::max( tmax, timeSpan ); - } - } + auto& zoneData = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); + auto& zones = zoneData.zones; + auto tmin = zoneData.min; + auto tmax = zoneData.max; if( tmin != std::numeric_limits::max() ) { @@ -2812,7 +2803,6 @@ void View::DrawFindZone() { const auto tMinLog = log10( tmin ); const auto idt = numBins / ( log10( tmax ) - tMinLog ); - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); for( auto& ev : zones ) { const auto timeSpan = m_worker.GetZoneEndDirect( *ev ) - ev->start; @@ -2828,7 +2818,6 @@ void View::DrawFindZone() else { const auto idt = numBins / dt; - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); for( auto& ev : zones ) { const auto timeSpan = m_worker.GetZoneEndDirect( *ev ) - ev->start; @@ -2848,7 +2837,6 @@ void View::DrawFindZone() { const auto tMinLog = log10( tmin ); const auto idt = numBins / ( log10( tmax ) - tMinLog ); - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); for( auto& ev : zones ) { const auto timeSpan = m_worker.GetZoneEndDirect( *ev ) - ev->start; @@ -2863,7 +2851,6 @@ void View::DrawFindZone() else { const auto idt = numBins / dt; - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); for( auto& ev : zones ) { const auto timeSpan = m_worker.GetZoneEndDirect( *ev ) - ev->start; @@ -3145,7 +3132,7 @@ void View::DrawFindZone() ImGui::Separator(); ImGui::Text( "Found zones:" ); - auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ); + auto& zones = m_worker.GetZonesForSourceLocation( m_findZone.match[m_findZone.selMatch] ).zones; auto sz = zones.size(); for( size_t i=m_findZone.processed; i Worker::GetMatchingSourceLocation( const char* query ) cons } #ifndef TRACY_NO_STATISTICS -const Vector& Worker::GetZonesForSourceLocation( int32_t srcloc ) const +const Worker::SourceLocationZones& Worker::GetZonesForSourceLocation( int32_t srcloc ) const { - static const Vector empty; + static const SourceLocationZones empty; auto it = m_data.sourceLocationZones.find( srcloc ); - return it != m_data.sourceLocationZones.end() ? it->second.zones : empty; + return it != m_data.sourceLocationZones.end() ? it->second : empty; } #endif diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 4f5a7876..fd640216 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -123,7 +123,7 @@ public: std::vector GetMatchingSourceLocation( const char* query ) const; #ifndef TRACY_NO_STATISTICS - const Vector& GetZonesForSourceLocation( int32_t srcloc ) const; + const SourceLocationZones& GetZonesForSourceLocation( int32_t srcloc ) const; #endif NonRecursiveBenaphore& GetMbpsDataLock() { return m_mbpsData.lock; }