diff --git a/client/TracyLock.hpp b/client/TracyLock.hpp index 6d74a734..844832d3 100644 --- a/client/TracyLock.hpp +++ b/client/TracyLock.hpp @@ -19,7 +19,7 @@ public: : m_id( s_lockCounter.fetch_add( 1, std::memory_order_relaxed ) ) { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockAnnounce; @@ -37,7 +37,7 @@ public: const auto thread = GetThreadHandle(); { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockWait; @@ -51,7 +51,7 @@ public: { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockObtain; @@ -68,7 +68,7 @@ public: uint32_t cpu; Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockRelease; @@ -85,7 +85,7 @@ public: { uint32_t cpu; Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockObtain; @@ -100,7 +100,7 @@ public: tracy_force_inline void Mark( const SourceLocation* srcloc ) const { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::LockMark; diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 2bc1ddd8..56bb6f87 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -56,7 +56,7 @@ enum { QueuePrealloc = 256 * 1024 }; static moodycamel::ConcurrentQueue init_order(101) s_queue( QueueItemSize * QueuePrealloc ); static thread_local moodycamel::ProducerToken init_order(102) s_token_detail( s_queue ); -thread_local moodycamel::ConcurrentQueue::ExplicitProducer* init_order(103) s_token = s_queue.get_explicit_producer( s_token_detail ); +thread_local ProducerWrapper init_order(103) s_token { s_queue.get_explicit_producer( s_token_detail ) }; std::atomic s_id( 0 ); @@ -227,7 +227,7 @@ void Profiler::SendSourceLocation( uint64_t ptr ) item.srcloc.function = (uint64_t)srcloc->function; item.srcloc.line = srcloc->line; item.srcloc.color = srcloc->color; - s_token->enqueue( std::move( item ) ); + s_token.ptr->enqueue( std::move( item ) ); } bool Profiler::HandleServerQuery() diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index 18237aa4..c8180a51 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -31,7 +31,12 @@ struct SourceLocation uint32_t color; }; -extern thread_local moodycamel::ConcurrentQueue::ExplicitProducer* s_token; +struct ProducerWrapper +{ + moodycamel::ConcurrentQueue::ExplicitProducer* ptr; +}; + +extern thread_local ProducerWrapper s_token; using Magic = moodycamel::ConcurrentQueueDefaultTraits::index_t; @@ -69,7 +74,7 @@ public: { uint32_t cpu; Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::FrameMarkMsg; diff --git a/client/TracyScoped.hpp b/client/TracyScoped.hpp index 65c09613..99155745 100644 --- a/client/TracyScoped.hpp +++ b/client/TracyScoped.hpp @@ -18,7 +18,7 @@ public: const auto thread = GetThreadHandle(); m_thread = thread; Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::ZoneBegin; @@ -31,7 +31,7 @@ public: tracy_force_inline ~ScopedZone() { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::ZoneEnd; @@ -46,7 +46,7 @@ public: auto ptr = new char[size+1]; memcpy( ptr, txt, size ); ptr[size] = '\0'; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::ZoneText; @@ -58,7 +58,7 @@ public: tracy_force_inline void Name( const char* name ) { Magic magic; - auto& token = s_token; + auto& token = s_token.ptr; auto& tail = token->get_tail_index(); auto item = token->enqueue_begin( magic ); item->hdr.type = QueueType::ZoneName;