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

Lock events dispatch.

This commit is contained in:
Bartosz Taudul
2017-10-04 18:51:50 +02:00
parent 110e5971d1
commit 54735bacea
3 changed files with 56 additions and 19 deletions
+51 -8
View File
@@ -457,41 +457,80 @@ void View::ProcessLockAnnounce( const QueueLockAnnounce& ev )
{
CheckSourceLocation( ev.srcloc );
std::lock_guard<std::mutex> lock( m_lock );
assert( m_lockMap.find( ev.id ) == m_lockMap.end() );
m_lockMap.emplace( ev.id, LockMap { ev.srcloc } );
auto it = m_pendingLocks.find( ev.id );
std::unique_lock<std::mutex> lock( m_lock );
auto& lockmap = m_lockMap.emplace( ev.id, LockMap { ev.id, ev.srcloc } ).first->second;
if( it != m_pendingLocks.end() )
{
for( auto& v : it->second )
{
InsertLockEvent( lockmap.timeline, v );
}
lock.unlock();
m_pendingLocks.erase( it );
}
}
void View::ProcessLockWait( const QueueLockWait& ev )
{
auto lev = m_slab.Alloc<LockEvent>();
lev->time = ev.time;
lev->thread = ev.thread;
lev->type = LockEvent::Type::Wait;
auto it = m_lockMap.find( ev.id );
if( it == m_lockMap.end() )
{
auto& v = m_pendingLocks[ev.id];
v.push_back( LockEvent { ev.time, ev.thread, LockEvent::Type::Wait } );
return;
v.push_back( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second.timeline, lev );
}
}
void View::ProcessLockObtain( const QueueLockObtain& ev )
{
auto lev = m_slab.Alloc<LockEvent>();
lev->time = ev.time;
lev->thread = ev.thread;
lev->type = LockEvent::Type::Obtain;
auto it = m_lockMap.find( ev.id );
if( it == m_lockMap.end() )
{
auto& v = m_pendingLocks[ev.id];
v.push_back( LockEvent { ev.time, ev.thread, LockEvent::Type::Obtain } );
return;
v.push_back( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second.timeline, lev );
}
}
void View::ProcessLockRelease( const QueueLockRelease& ev )
{
auto lev = m_slab.Alloc<LockEvent>();
lev->time = ev.time;
lev->thread = ev.thread;
lev->type = LockEvent::Type::Release;
auto it = m_lockMap.find( ev.id );
if( it == m_lockMap.end() )
{
auto& v = m_pendingLocks[ev.id];
v.push_back( LockEvent { ev.time, ev.thread, LockEvent::Type::Release } );
return;
v.push_back( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second.timeline, lev );
}
}
@@ -637,6 +676,10 @@ void View::InsertZone( Event* zone, Event* parent, Vector<Event*>& vec )
}
}
void View::InsertLockEvent( Vector<LockEvent*>& timeline, const LockEvent* lev )
{
}
uint64_t View::GetFrameTime( size_t idx ) const
{
if( idx < m_frames.size() - 1 )