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

Add second single string transfer.

This commit is contained in:
Bartosz Taudul
2020-07-26 01:32:49 +02:00
parent a7d2ab4d4f
commit c0b73c248f
5 changed files with 61 additions and 21 deletions
+38 -18
View File
@@ -2672,7 +2672,8 @@ void Worker::Exec()
!m_pendingCustomStrings.empty() || m_data.plots.IsPending() || m_pendingCallstackPtr != 0 ||
m_pendingExternalNames != 0 || m_pendingCallstackSubframes != 0 || m_pendingFrameImageData.image != nullptr ||
!m_pendingSymbols.empty() || !m_pendingSymbolCode.empty() || m_pendingCodeInformation != 0 ||
!m_serverQueryQueue.empty() || m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr )
!m_serverQueryQueue.empty() || m_pendingSourceLocationPayload != 0 || m_pendingSingleString.ptr != nullptr ||
m_pendingSecondString.ptr != nullptr )
{
continue;
}
@@ -2941,20 +2942,29 @@ bool Worker::DispatchProcess( const QueueItem& ev, const char*& ptr )
}
return true;
}
else if( ev.hdr.type == QueueType::SingleStringData )
{
ptr += sizeof( QueueHeader );
uint16_t sz;
memcpy( &sz, ptr, sizeof( sz ) );
ptr += sizeof( sz );
AddSingleString( ptr, sz );
ptr += sz;
return true;
}
else
{
ptr += QueueDataSize[ev.hdr.idx];
return Process( ev );
uint16_t sz;
switch( ev.hdr.type )
{
case QueueType::SingleStringData:
ptr += sizeof( QueueHeader );
memcpy( &sz, ptr, sizeof( sz ) );
ptr += sizeof( sz );
AddSingleString( ptr, sz );
ptr += sz;
return true;
case QueueType::SecondStringData:
ptr += sizeof( QueueHeader );
memcpy( &sz, ptr, sizeof( sz ) );
ptr += sizeof( sz );
AddSecondString( ptr, sz );
ptr += sz;
return true;
default:
ptr += QueueDataSize[ev.hdr.idx];
return Process( ev );
}
}
}
@@ -3366,6 +3376,12 @@ void Worker::AddSingleString( const char* str, size_t sz )
m_pendingSingleString = StoreString( str, sz );
}
void Worker::AddSecondString( const char* str, size_t sz )
{
assert( m_pendingSecondString.ptr == nullptr );
m_pendingSecondString = StoreString( str, sz );
}
void Worker::AddExternalName( uint64_t ptr, const char* str, size_t sz )
{
assert( m_pendingExternalNames > 0 );
@@ -3834,6 +3850,14 @@ uint32_t Worker::GetSingleStringIdx()
return idx;
}
uint32_t Worker::GetSecondStringIdx()
{
assert( m_pendingSecondString.ptr != nullptr );
const auto idx = m_pendingSecondString.idx;
m_pendingSecondString.ptr = nullptr;
return idx;
}
StringLocation Worker::StoreString( const char* str, size_t sz )
{
StringLocation ret;
@@ -5421,11 +5445,7 @@ void Worker::ProcessCallstackFrame( const QueueCallstackFrame& ev )
assert( m_pendingCallstackSubframes > 0 );
const auto nitidx = GetSingleStringIdx();
auto fit = m_pendingCustomStrings.find( ev.file );
assert( fit != m_pendingCustomStrings.end() );
const auto fitidx = fit->second.idx;
m_pendingCustomStrings.erase( fit );
const auto fitidx = GetSecondStringIdx();
if( m_callstackFrameStaging )
{