1
0
mirror of https://github.com/wolfpld/tracy synced 2025-05-01 21:23:52 +00:00

Workaround gcc stupidity.

This commit is contained in:
Bartosz Taudul 2017-10-11 01:44:35 +02:00
parent 77dfefb5d0
commit e23da05a65
4 changed files with 19 additions and 14 deletions

View File

@ -19,7 +19,7 @@ public:
: m_id( s_lockCounter.fetch_add( 1, std::memory_order_relaxed ) ) : m_id( s_lockCounter.fetch_add( 1, std::memory_order_relaxed ) )
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockAnnounce; item->hdr.type = QueueType::LockAnnounce;
@ -37,7 +37,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockWait; item->hdr.type = QueueType::LockWait;
@ -51,7 +51,7 @@ public:
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockObtain; item->hdr.type = QueueType::LockObtain;
@ -68,7 +68,7 @@ public:
uint32_t cpu; uint32_t cpu;
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockRelease; item->hdr.type = QueueType::LockRelease;
@ -85,7 +85,7 @@ public:
{ {
uint32_t cpu; uint32_t cpu;
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockObtain; item->hdr.type = QueueType::LockObtain;
@ -100,7 +100,7 @@ public:
tracy_force_inline void Mark( const SourceLocation* srcloc ) const tracy_force_inline void Mark( const SourceLocation* srcloc ) const
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::LockMark; item->hdr.type = QueueType::LockMark;

View File

@ -56,7 +56,7 @@ enum { QueuePrealloc = 256 * 1024 };
static moodycamel::ConcurrentQueue<QueueItem> init_order(101) s_queue( QueueItemSize * QueuePrealloc ); static moodycamel::ConcurrentQueue<QueueItem> init_order(101) s_queue( QueueItemSize * QueuePrealloc );
static thread_local moodycamel::ProducerToken init_order(102) s_token_detail( s_queue ); static thread_local moodycamel::ProducerToken init_order(102) s_token_detail( s_queue );
thread_local moodycamel::ConcurrentQueue<QueueItem>::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<uint64_t> s_id( 0 ); std::atomic<uint64_t> s_id( 0 );
@ -227,7 +227,7 @@ void Profiler::SendSourceLocation( uint64_t ptr )
item.srcloc.function = (uint64_t)srcloc->function; item.srcloc.function = (uint64_t)srcloc->function;
item.srcloc.line = srcloc->line; item.srcloc.line = srcloc->line;
item.srcloc.color = srcloc->color; item.srcloc.color = srcloc->color;
s_token->enqueue<moodycamel::CanAlloc>( std::move( item ) ); s_token.ptr->enqueue<moodycamel::CanAlloc>( std::move( item ) );
} }
bool Profiler::HandleServerQuery() bool Profiler::HandleServerQuery()

View File

@ -31,7 +31,12 @@ struct SourceLocation
uint32_t color; uint32_t color;
}; };
extern thread_local moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* s_token; struct ProducerWrapper
{
moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* ptr;
};
extern thread_local ProducerWrapper s_token;
using Magic = moodycamel::ConcurrentQueueDefaultTraits::index_t; using Magic = moodycamel::ConcurrentQueueDefaultTraits::index_t;
@ -69,7 +74,7 @@ public:
{ {
uint32_t cpu; uint32_t cpu;
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::FrameMarkMsg; item->hdr.type = QueueType::FrameMarkMsg;

View File

@ -18,7 +18,7 @@ public:
const auto thread = GetThreadHandle(); const auto thread = GetThreadHandle();
m_thread = thread; m_thread = thread;
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::ZoneBegin; item->hdr.type = QueueType::ZoneBegin;
@ -31,7 +31,7 @@ public:
tracy_force_inline ~ScopedZone() tracy_force_inline ~ScopedZone()
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::ZoneEnd; item->hdr.type = QueueType::ZoneEnd;
@ -46,7 +46,7 @@ public:
auto ptr = new char[size+1]; auto ptr = new char[size+1];
memcpy( ptr, txt, size ); memcpy( ptr, txt, size );
ptr[size] = '\0'; ptr[size] = '\0';
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::ZoneText; item->hdr.type = QueueType::ZoneText;
@ -58,7 +58,7 @@ public:
tracy_force_inline void Name( const char* name ) tracy_force_inline void Name( const char* name )
{ {
Magic magic; Magic magic;
auto& token = s_token; auto& token = s_token.ptr;
auto& tail = token->get_tail_index(); auto& tail = token->get_tail_index();
auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic ); auto item = token->enqueue_begin<moodycamel::CanAlloc>( magic );
item->hdr.type = QueueType::ZoneName; item->hdr.type = QueueType::ZoneName;