mirror of
https://github.com/wolfpld/tracy
synced 2025-05-03 14:03:52 +00:00
Don't wait for lock to be announced before processing events.
This commit is contained in:
parent
695b0426bf
commit
cbf5ddece1
@ -485,22 +485,8 @@ void View::ProcessZoneName( const QueueZoneName& ev )
|
|||||||
void View::ProcessLockAnnounce( const QueueLockAnnounce& ev )
|
void View::ProcessLockAnnounce( const QueueLockAnnounce& ev )
|
||||||
{
|
{
|
||||||
CheckSourceLocation( ev.srcloc );
|
CheckSourceLocation( ev.srcloc );
|
||||||
|
std::lock_guard<std::mutex> lock( m_lock );
|
||||||
assert( m_lockMap.find( ev.id ) == m_lockMap.end() );
|
m_lockMap[ev.id].srcloc = 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.srcloc } ).first->second;
|
|
||||||
|
|
||||||
if( it != m_pendingLocks.end() )
|
|
||||||
{
|
|
||||||
for( auto& v : it->second )
|
|
||||||
{
|
|
||||||
InsertLockEvent( lockmap, v );
|
|
||||||
}
|
|
||||||
lock.unlock();
|
|
||||||
m_pendingLocks.erase( it );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::ProcessLockWait( const QueueLockWait& ev )
|
void View::ProcessLockWait( const QueueLockWait& ev )
|
||||||
@ -510,17 +496,8 @@ void View::ProcessLockWait( const QueueLockWait& ev )
|
|||||||
lev->thread = ev.thread;
|
lev->thread = ev.thread;
|
||||||
lev->type = LockEvent::Type::Wait;
|
lev->type = LockEvent::Type::Wait;
|
||||||
|
|
||||||
auto it = m_lockMap.find( ev.id );
|
std::lock_guard<std::mutex> lock( m_lock );
|
||||||
if( it == m_lockMap.end() )
|
InsertLockEvent( m_lockMap[ev.id], lev );
|
||||||
{
|
|
||||||
auto& v = m_pendingLocks[ev.id];
|
|
||||||
v.push_back( lev );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock( m_lock );
|
|
||||||
InsertLockEvent( it->second, lev );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::ProcessLockObtain( const QueueLockObtain& ev )
|
void View::ProcessLockObtain( const QueueLockObtain& ev )
|
||||||
@ -530,17 +507,8 @@ void View::ProcessLockObtain( const QueueLockObtain& ev )
|
|||||||
lev->thread = ev.thread;
|
lev->thread = ev.thread;
|
||||||
lev->type = LockEvent::Type::Obtain;
|
lev->type = LockEvent::Type::Obtain;
|
||||||
|
|
||||||
auto it = m_lockMap.find( ev.id );
|
std::lock_guard<std::mutex> lock( m_lock );
|
||||||
if( it == m_lockMap.end() )
|
InsertLockEvent( m_lockMap[ev.id], lev );
|
||||||
{
|
|
||||||
auto& v = m_pendingLocks[ev.id];
|
|
||||||
v.push_back( lev );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock( m_lock );
|
|
||||||
InsertLockEvent( it->second, lev );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::ProcessLockRelease( const QueueLockRelease& ev )
|
void View::ProcessLockRelease( const QueueLockRelease& ev )
|
||||||
@ -550,17 +518,8 @@ void View::ProcessLockRelease( const QueueLockRelease& ev )
|
|||||||
lev->thread = ev.thread;
|
lev->thread = ev.thread;
|
||||||
lev->type = LockEvent::Type::Release;
|
lev->type = LockEvent::Type::Release;
|
||||||
|
|
||||||
auto it = m_lockMap.find( ev.id );
|
std::lock_guard<std::mutex> lock( m_lock );
|
||||||
if( it == m_lockMap.end() )
|
InsertLockEvent( m_lockMap[ev.id], lev );
|
||||||
{
|
|
||||||
auto& v = m_pendingLocks[ev.id];
|
|
||||||
v.push_back( lev );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::lock_guard<std::mutex> lock( m_lock );
|
|
||||||
InsertLockEvent( it->second, lev );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void View::ProcessLockMark( const QueueLockMark& ev )
|
void View::ProcessLockMark( const QueueLockMark& ev )
|
||||||
|
@ -149,7 +149,6 @@ private:
|
|||||||
std::unordered_set<uint64_t> m_pendingSourceLocation;
|
std::unordered_set<uint64_t> m_pendingSourceLocation;
|
||||||
std::unordered_map<uint64_t, Event*> m_pendingCustomStrings;
|
std::unordered_map<uint64_t, Event*> m_pendingCustomStrings;
|
||||||
std::unordered_map<uint64_t, uint32_t> m_threadMap;
|
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;
|
Slab<EventSize*1024*1024> m_slab;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user