Calculate min/max time spans for source locations.

This commit is contained in:
Bartosz Taudul 2018-03-18 20:15:45 +01:00
parent 43c3fe25ba
commit 0f1f7c6813
2 changed files with 25 additions and 1 deletions

View File

@ -1239,6 +1239,17 @@ void Worker::ProcessZoneEnd( const QueueZoneEnd& ev )
assert( zone->end >= zone->start ); assert( zone->end >= zone->start );
m_data.lastTime = std::max( m_data.lastTime, zone->end ); 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 ) void Worker::ProcessFrameMark( const QueueFrameMark& ev )
@ -1627,6 +1638,16 @@ void Worker::ReadTimeline( FileRead& f, Vector<ZoneEvent*>& vec, uint64_t size )
auto it = m_data.sourceLocationZones.find( zone->srcloc ); auto it = m_data.sourceLocationZones.find( zone->srcloc );
assert( it != m_data.sourceLocationZones.end() ); assert( it != m_data.sourceLocationZones.end() );
it->second.zones.push_back( zone ); 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 #endif
ReadTimeline( f, zone->child ); ReadTimeline( f, zone->child );

View File

@ -2,6 +2,7 @@
#define __TRACYWORKER_HPP__ #define __TRACYWORKER_HPP__
#include <atomic> #include <atomic>
#include <limits>
#include <map> #include <map>
#include <string> #include <string>
#include <thread> #include <thread>
@ -34,9 +35,11 @@ class Worker
{ {
struct SourceLocationZones struct SourceLocationZones
{ {
SourceLocationZones() {} SourceLocationZones() : min( std::numeric_limits<int64_t>::max() ), max( std::numeric_limits<int64_t>::min() ) {}
Vector<ZoneEvent*> zones; Vector<ZoneEvent*> zones;
int64_t min;
int64_t max;
}; };
struct DataBlock struct DataBlock