mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-22 22:44:34 +00:00
Recursive, incomplete zone insertion into timeline.
This commit is contained in:
parent
b89adbaf8c
commit
73df330dd5
@ -224,7 +224,6 @@ void View::ProcessZoneBegin( uint64_t id, const QueueZoneBegin& ev )
|
|||||||
{
|
{
|
||||||
auto it = m_pendingEndZone.find( id );
|
auto it = m_pendingEndZone.find( id );
|
||||||
auto zone = m_slab.Alloc<Event>();
|
auto zone = m_slab.Alloc<Event>();
|
||||||
zone->parent = nullptr;
|
|
||||||
|
|
||||||
CheckString( ev.filename );
|
CheckString( ev.filename );
|
||||||
CheckString( ev.function );
|
CheckString( ev.function );
|
||||||
@ -360,22 +359,7 @@ void View::NewZone( Event* zone, uint64_t thread )
|
|||||||
timeline = &m_threads[it->second].timeline;
|
timeline = &m_threads[it->second].timeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !timeline->empty() )
|
InsertZone( zone, nullptr, *timeline );
|
||||||
{
|
|
||||||
const auto lastend = timeline->back()->end;
|
|
||||||
if( lastend != -1 && lastend < zone->start )
|
|
||||||
{
|
|
||||||
timeline->push_back( zone );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
timeline->push_back( zone );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::UpdateZone( Event* zone )
|
void View::UpdateZone( Event* zone )
|
||||||
@ -383,6 +367,37 @@ void View::UpdateZone( Event* zone )
|
|||||||
assert( zone->end != -1 );
|
assert( zone->end != -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void View::InsertZone( Event* zone, Event* parent, Vector<Event*>& vec )
|
||||||
|
{
|
||||||
|
if( !vec.empty() )
|
||||||
|
{
|
||||||
|
const auto lastend = vec.back()->end;
|
||||||
|
if( lastend != -1 && lastend < zone->start )
|
||||||
|
{
|
||||||
|
zone->parent = parent;
|
||||||
|
vec.push_back( zone );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
auto it = std::upper_bound( vec.begin(), vec.end(), zone->start, [] ( const auto& l, const auto& r ) { return l < r->start; } );
|
||||||
|
if( it == vec.end() )
|
||||||
|
{
|
||||||
|
assert( vec.back()->end == -1 );
|
||||||
|
InsertZone( zone, vec.back(), vec.back()->child );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zone->parent = parent;
|
||||||
|
vec.push_back( zone );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint64_t View::GetFrameTime( size_t idx ) const
|
uint64_t View::GetFrameTime( size_t idx ) const
|
||||||
{
|
{
|
||||||
if( idx < m_frames.size() - 1 )
|
if( idx < m_frames.size() - 1 )
|
||||||
|
@ -57,6 +57,8 @@ private:
|
|||||||
void NewZone( Event* zone, uint64_t thread );
|
void NewZone( Event* zone, uint64_t thread );
|
||||||
void UpdateZone( Event* zone );
|
void UpdateZone( Event* zone );
|
||||||
|
|
||||||
|
void InsertZone( Event* zone, Event* parent, Vector<Event*>& vec );
|
||||||
|
|
||||||
uint64_t GetFrameTime( size_t idx ) const;
|
uint64_t GetFrameTime( size_t idx ) const;
|
||||||
uint64_t GetFrameBegin( size_t idx ) const;
|
uint64_t GetFrameBegin( size_t idx ) const;
|
||||||
uint64_t GetFrameEnd( size_t idx ) const;
|
uint64_t GetFrameEnd( size_t idx ) const;
|
||||||
|
Loading…
Reference in New Issue
Block a user