mirror of
https://github.com/wolfpld/tracy
synced 2025-04-29 04:23:51 +00:00
Send priority queries before other queued up queries.
This ensures that simple to handle yet important queries are answered in a timely manner. Previously an onslaught of slow symbol-related queries could block e.g. zone name resolving for a couple of minutes.
This commit is contained in:
parent
5ae9e791a5
commit
2b47c2a64e
@ -3235,6 +3235,20 @@ void Worker::Exec()
|
||||
m_netWriteCv.notify_one();
|
||||
}
|
||||
|
||||
if( m_serverQuerySpaceLeft > 0 && !m_serverQueryQueuePrio.empty() )
|
||||
{
|
||||
const auto toSend = std::min( m_serverQuerySpaceLeft, m_serverQueryQueuePrio.size() );
|
||||
m_sock.Send( m_serverQueryQueuePrio.data(), toSend * ServerQueryPacketSize );
|
||||
m_serverQuerySpaceLeft -= toSend;
|
||||
if( toSend == m_serverQueryQueuePrio.size() )
|
||||
{
|
||||
m_serverQueryQueuePrio.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_serverQueryQueuePrio.erase( m_serverQueryQueuePrio.begin(), m_serverQueryQueuePrio.begin() + toSend );
|
||||
}
|
||||
}
|
||||
if( m_serverQuerySpaceLeft > 0 && !m_serverQueryQueue.empty() )
|
||||
{
|
||||
const auto toSend = std::min( m_serverQuerySpaceLeft, m_serverQueryQueue.size() );
|
||||
@ -3265,7 +3279,7 @@ void Worker::Exec()
|
||||
if( m_pendingStrings != 0 || m_pendingThreads != 0 || m_pendingSourceLocation != 0 || m_pendingCallstackFrames != 0 ||
|
||||
m_data.plots.IsPending() || m_pendingCallstackId != 0 || m_pendingExternalNames != 0 ||
|
||||
m_pendingCallstackSubframes != 0 || m_pendingFrameImageData.image != nullptr || !m_pendingSymbols.empty() ||
|
||||
m_pendingSymbolCode != 0 || m_pendingCodeInformation != 0 || !m_serverQueryQueue.empty() ||
|
||||
m_pendingSymbolCode != 0 || m_pendingCodeInformation != 0 || !m_serverQueryQueue.empty() || !m_serverQueryQueuePrio.empty() ||
|
||||
m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr || m_pendingSecondString.ptr != nullptr ||
|
||||
!m_sourceCodeQuery.empty() || m_pendingFibers != 0 )
|
||||
{
|
||||
@ -3308,7 +3322,7 @@ void Worker::UpdateMbps( int64_t td )
|
||||
m_mbpsData.mbps.emplace_back( bytes / ( td * 125.f ) );
|
||||
}
|
||||
m_mbpsData.compRatio = decBytes == 0 ? 1 : float( bytes ) / decBytes;
|
||||
m_mbpsData.queue = m_serverQueryQueue.size();
|
||||
m_mbpsData.queue = m_serverQueryQueue.size() + m_serverQueryQueuePrio.size();
|
||||
m_mbpsData.transferred += bytes;
|
||||
}
|
||||
|
||||
@ -3363,6 +3377,20 @@ void Worker::HandleFailure( const char* ptr, const char* end )
|
||||
m_netWriteCv.notify_one();
|
||||
}
|
||||
|
||||
if( m_serverQuerySpaceLeft > 0 && !m_serverQueryQueuePrio.empty() )
|
||||
{
|
||||
const auto toSend = std::min( m_serverQuerySpaceLeft, m_serverQueryQueuePrio.size() );
|
||||
m_sock.Send( m_serverQueryQueuePrio.data(), toSend * ServerQueryPacketSize );
|
||||
m_serverQuerySpaceLeft -= toSend;
|
||||
if( toSend == m_serverQueryQueuePrio.size() )
|
||||
{
|
||||
m_serverQueryQueuePrio.clear();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_serverQueryQueuePrio.erase( m_serverQueryQueuePrio.begin(), m_serverQueryQueuePrio.begin() + toSend );
|
||||
}
|
||||
}
|
||||
if( m_serverQuerySpaceLeft > 0 && !m_serverQueryQueue.empty() )
|
||||
{
|
||||
const auto toSend = std::min( m_serverQuerySpaceLeft, m_serverQueryQueue.size() );
|
||||
@ -3492,11 +3520,15 @@ void Worker::DispatchFailure( const QueueItem& ev, const char*& ptr )
|
||||
void Worker::Query( ServerQuery type, uint64_t data, uint32_t extra )
|
||||
{
|
||||
ServerQueryPacket query { type, data, extra };
|
||||
if( m_serverQuerySpaceLeft > 0 && m_serverQueryQueue.empty() )
|
||||
if( m_serverQuerySpaceLeft > 0 && m_serverQueryQueuePrio.empty() && m_serverQueryQueue.empty() )
|
||||
{
|
||||
m_serverQuerySpaceLeft--;
|
||||
m_sock.Send( &query, ServerQueryPacketSize );
|
||||
}
|
||||
else if( IsQueryPrio( type ) )
|
||||
{
|
||||
m_serverQueryQueuePrio.push_back( query );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_serverQueryQueue.push_back( query );
|
||||
|
@ -1019,7 +1019,7 @@ private:
|
||||
|
||||
PlotData* m_sysTimePlot = nullptr;
|
||||
|
||||
Vector<ServerQueryPacket> m_serverQueryQueue;
|
||||
Vector<ServerQueryPacket> m_serverQueryQueue, m_serverQueryQueuePrio;
|
||||
size_t m_serverQuerySpaceLeft, m_serverQuerySpaceBase;
|
||||
|
||||
unordered_flat_map<uint64_t, int32_t> m_frameImageStaging;
|
||||
|
Loading…
x
Reference in New Issue
Block a user