1
0
mirror of https://github.com/wolfpld/tracy.git synced 2025-03-20 07:40:02 +08:00

Store pointers to ThreadData.

This prevents moves of Vector<>.
This commit is contained in:
Bartosz Taudul 2017-09-28 21:05:51 +02:00
parent 556e085f2c
commit 8ecb5de062
2 changed files with 10 additions and 10 deletions

View File

@ -440,12 +440,12 @@ void View::NewZone( Event* zone, uint64_t thread )
if( it == m_threadMap.end() ) if( it == m_threadMap.end() )
{ {
m_threadMap.emplace( thread, (uint32_t)m_threads.size() ); m_threadMap.emplace( thread, (uint32_t)m_threads.size() );
m_threads.push_back( ThreadData { thread } ); m_threads.push_back( new ThreadData { thread } );
timeline = &m_threads.back().timeline; timeline = &m_threads.back()->timeline;
} }
else else
{ {
timeline = &m_threads[it->second].timeline; timeline = &m_threads[it->second]->timeline;
} }
InsertZone( zone, nullptr, *timeline ); InsertZone( zone, nullptr, *timeline );
@ -561,9 +561,9 @@ uint64_t View::GetLastTime() const
if( !m_frames.empty() ) last = m_frames.back(); if( !m_frames.empty() ) last = m_frames.back();
for( auto& v : m_threads ) for( auto& v : m_threads )
{ {
if( !v.timeline.empty() ) if( !v->timeline.empty() )
{ {
auto ev = v.timeline.back(); auto ev = v->timeline.back();
if( ev->end == -1 ) if( ev->end == -1 )
{ {
if( ev->start > last ) last = ev->start; if( ev->start > last ) last = ev->start;
@ -598,8 +598,8 @@ Vector<Event*>& View::GetParentVector( const Event& ev )
{ {
for( auto& t : m_threads ) for( auto& t : m_threads )
{ {
auto it = std::lower_bound( t.timeline.begin(), t.timeline.end(), ev.start, [] ( const auto& l, const auto& r ) { return l->start < r; } ); auto it = std::lower_bound( t->timeline.begin(), t->timeline.end(), ev.start, [] ( const auto& l, const auto& r ) { return l->start < r; } );
if( it != t.timeline.end() && *it == &ev ) return t.timeline; if( it != t->timeline.end() && *it == &ev ) return t->timeline;
} }
assert( false ); assert( false );
static Vector<Event*> empty; static Vector<Event*> empty;
@ -1075,10 +1075,10 @@ void View::DrawZones()
for( auto& v : m_threads ) for( auto& v : m_threads )
{ {
draw->AddLine( wpos + ImVec2( 0, offset + ostep - 1 ), wpos + ImVec2( w, offset + ostep - 1 ), 0x33FFFFFF ); draw->AddLine( wpos + ImVec2( 0, offset + ostep - 1 ), wpos + ImVec2( w, offset + ostep - 1 ), 0x33FFFFFF );
draw->AddText( wpos + ImVec2( 0, offset ), 0xFFFFFFFF, GetThreadString( v.id ) ); draw->AddText( wpos + ImVec2( 0, offset ), 0xFFFFFFFF, GetThreadString( v->id ) );
offset += ostep; offset += ostep;
const auto depth = DrawZoneLevel( v.timeline, hover, pxns, wpos, offset, 0 ); const auto depth = DrawZoneLevel( v->timeline, hover, pxns, wpos, offset, 0 );
offset += ostep * ( depth + 1.2f ); offset += ostep * ( depth + 1.2f );
} }

View File

@ -97,7 +97,7 @@ private:
// this block must be locked // this block must be locked
std::mutex m_lock; std::mutex m_lock;
Vector<uint64_t> m_frames; Vector<uint64_t> m_frames;
Vector<ThreadData> m_threads; Vector<ThreadData*> m_threads;
std::unordered_map<uint64_t, std::string> m_strings; std::unordered_map<uint64_t, std::string> m_strings;
std::unordered_map<uint64_t, std::string> m_threadNames; std::unordered_map<uint64_t, std::string> m_threadNames;
std::unordered_set<const char*, charutil::Hasher, charutil::Comparator> m_customStrings; std::unordered_set<const char*, charutil::Hasher, charutil::Comparator> m_customStrings;