From a7d2ab4d4f3f2813816d83b3eafda165f6f6e1fc Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Sun, 26 Jul 2020 01:22:09 +0200 Subject: [PATCH] Send single string for lock name. --- client/TracyLock.hpp | 18 ++++++++++-------- client/TracyProfiler.cpp | 12 +++++++----- common/TracyQueue.hpp | 6 ++++++ server/TracyWorker.cpp | 5 +---- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/client/TracyLock.hpp b/client/TracyLock.hpp index 5cda66de..7143e0d3 100644 --- a/client/TracyLock.hpp +++ b/client/TracyLock.hpp @@ -155,12 +155,13 @@ public: tracy_force_inline void CustomName( const char* name, size_t size ) { - auto ptr = (char*)tracy_malloc( size+1 ); + assert( size < std::numeric_limits::max() ); + auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, name, size ); - ptr[size] = '\0'; TracyLfqPrepare( QueueType::LockName ); - MemWrite( &item->lockName.id, m_id ); - MemWrite( &item->lockName.name, (uint64_t)ptr ); + MemWrite( &item->lockNameFat.id, m_id ); + MemWrite( &item->lockNameFat.name, (uint64_t)ptr ); + MemWrite( &item->lockNameFat.size, (uint16_t)size ); #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif @@ -455,12 +456,13 @@ public: tracy_force_inline void CustomName( const char* name, size_t size ) { - auto ptr = (char*)tracy_malloc( size+1 ); + assert( size < std::numeric_limits::max() ); + auto ptr = (char*)tracy_malloc( size ); memcpy( ptr, name, size ); - ptr[size] = '\0'; TracyLfqPrepare( QueueType::LockName ); - MemWrite( &item->lockName.id, m_id ); - MemWrite( &item->lockName.name, (uint64_t)ptr ); + MemWrite( &item->lockNameFat.id, m_id ); + MemWrite( &item->lockNameFat.name, (uint64_t)ptr ); + MemWrite( &item->lockNameFat.size, (uint16_t)size ); #ifdef TRACY_ON_DEMAND GetProfiler().DeferItem( *item ); #endif diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index e8ba2c41..66d43a1a 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -1457,8 +1457,9 @@ void Profiler::Worker() SendSingleString( (const char*)ptr, size ); break; case QueueType::LockName: - ptr = MemRead( &item.lockName.name ); - SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); + ptr = MemRead( &item.lockNameFat.name ); + size = MemRead( &item.lockNameFat.size ); + SendSingleString( (const char*)ptr, size ); break; default: break; @@ -1754,7 +1755,7 @@ static void FreeAssociatedMemory( const QueueItem& item ) break; #ifndef TRACY_ON_DEMAND case QueueType::LockName: - ptr = MemRead( &item.lockName.name ); + ptr = MemRead( &item.lockNameFat.name ); tracy_free( (void*)ptr ); break; #endif @@ -1940,8 +1941,9 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) break; } case QueueType::LockName: - ptr = MemRead( &item->lockName.name ); - SendString( ptr, (const char*)ptr, QueueType::CustomStringData ); + ptr = MemRead( &item->lockNameFat.name ); + size = MemRead( &item->lockNameFat.size ); + SendSingleString( (const char*)ptr, size ); #ifndef TRACY_ON_DEMAND tracy_free( (void*)ptr ); #endif diff --git a/common/TracyQueue.hpp b/common/TracyQueue.hpp index 2b73a94d..13d2d024 100644 --- a/common/TracyQueue.hpp +++ b/common/TracyQueue.hpp @@ -225,7 +225,12 @@ struct QueueLockMark struct QueueLockName { uint32_t id; +}; + +struct QueueLockNameFat : public QueueLockName +{ uint64_t name; // ptr + uint16_t size; }; enum class PlotDataType : uint8_t @@ -503,6 +508,7 @@ struct QueueItem QueueLockRelease lockRelease; QueueLockMark lockMark; QueueLockName lockName; + QueueLockNameFat lockNameFat; QueuePlotData plotData; QueueMessage message; QueueMessageColor messageColor; diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index 68b17feb..583e8a1f 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -4755,10 +4755,7 @@ void Worker::ProcessLockName( const QueueLockName& ev ) { auto lit = m_data.lockMap.find( ev.id ); assert( lit != m_data.lockMap.end() ); - auto it = m_pendingCustomStrings.find( ev.name ); - assert( it != m_pendingCustomStrings.end() ); - lit->second->customName = StringIdx( it->second.idx ); - m_pendingCustomStrings.erase( it ); + lit->second->customName = StringIdx( GetSingleStringIdx() ); } void Worker::ProcessPlotData( const QueuePlotData& ev )