1
0
mirror of https://github.com/wolfpld/tracy synced 2025-05-02 13:43:52 +00:00

Don't wait for lock to be announced before processing events.

This commit is contained in:
Bartosz Taudul 2017-10-06 17:09:15 +02:00
parent 695b0426bf
commit cbf5ddece1
2 changed files with 8 additions and 50 deletions

View File

@ -485,22 +485,8 @@ void View::ProcessZoneName( const QueueZoneName& ev )
void View::ProcessLockAnnounce( const QueueLockAnnounce& ev )
{
CheckSourceLocation( ev.srcloc );
assert( m_lockMap.find( ev.id ) == m_lockMap.end() );
auto it = m_pendingLocks.find( ev.id );
std::unique_lock<std::mutex> lock( m_lock );
auto& lockmap = m_lockMap.emplace( ev.id, LockMap { ev.srcloc } ).first->second;
if( it != m_pendingLocks.end() )
{
for( auto& v : it->second )
{
InsertLockEvent( lockmap, v );
}
lock.unlock();
m_pendingLocks.erase( it );
}
std::lock_guard<std::mutex> lock( m_lock );
m_lockMap[ev.id].srcloc = ev.srcloc;
}
void View::ProcessLockWait( const QueueLockWait& ev )
@ -510,17 +496,8 @@ void View::ProcessLockWait( const QueueLockWait& ev )
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( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second, lev );
}
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( m_lockMap[ev.id], lev );
}
void View::ProcessLockObtain( const QueueLockObtain& ev )
@ -530,17 +507,8 @@ void View::ProcessLockObtain( const QueueLockObtain& ev )
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( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second, lev );
}
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( m_lockMap[ev.id], lev );
}
void View::ProcessLockRelease( const QueueLockRelease& ev )
@ -550,17 +518,8 @@ void View::ProcessLockRelease( const QueueLockRelease& ev )
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( lev );
}
else
{
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( it->second, lev );
}
std::lock_guard<std::mutex> lock( m_lock );
InsertLockEvent( m_lockMap[ev.id], lev );
}
void View::ProcessLockMark( const QueueLockMark& ev )

View File

@ -149,7 +149,6 @@ private:
std::unordered_set<uint64_t> m_pendingSourceLocation;
std::unordered_map<uint64_t, Event*> m_pendingCustomStrings;
std::unordered_map<uint64_t, uint32_t> m_threadMap;
std::unordered_map<uint64_t, std::vector<LockEvent*>> m_pendingLocks;
Slab<EventSize*1024*1024> m_slab;