diff --git a/public/client/TracySysTrace.cpp b/public/client/TracySysTrace.cpp index 48910ef3..58ec5e80 100644 --- a/public/client/TracySysTrace.cpp +++ b/public/client/TracySysTrace.cpp @@ -412,13 +412,17 @@ void SysTraceGetExternalName( uint64_t thread, const char*& threadName, const ch namespace tracy { -static std::atomic traceActive { false }; -static int s_numCpus = 0; -static int s_numBuffers = 0; -static int s_ctxBufferIdx = 0; -static bool s_ctxSwitchCallchain = false; +struct SysTraceState +{ + std::atomic traceActive { false }; + int numCpus = 0; + int numBuffers = 0; + int ctxBufferIdx = 0; + bool ctxSwitchCallchain = false; + RingBuffer* ring = nullptr; +}; -static RingBuffer* s_ring = nullptr; +static SysTraceState s_state; struct PerfIterTarget @@ -545,9 +549,9 @@ static bool OpenSampleEvent( const PerfIterTarget& tgt, const perf_event_attr& i TracyDebug( " Failed to setup!" ); return false; } - new( s_ring + s_numBuffers ) RingBuffer( 64 * 1024, fd, eventId ); - if( !s_ring[s_numBuffers].IsValid() ) return false; - s_numBuffers++; + new( s_state.ring + s_state.numBuffers ) RingBuffer( 64 * 1024, fd, eventId ); + if( !s_state.ring[s_state.numBuffers].IsValid() ) return false; + s_state.numBuffers++; return true; } @@ -1009,7 +1013,7 @@ bool SysTraceStart( int64_t& samplingPeriod ) #endif uint32_t currentPid = externalPid != 0 ? externalPid : (uint32_t)getpid(); - s_numCpus = (int)std::thread::hardware_concurrency(); + s_state.numCpus = (int)std::thread::hardware_concurrency(); PerfIterTarget* iter; int numIter; @@ -1025,20 +1029,20 @@ bool SysTraceStart( int64_t& samplingPeriod ) } if( numTids == 1 ) { - iter = (PerfIterTarget*)tracy_malloc( sizeof( PerfIterTarget ) * s_numCpus ); - for( int i=0; i= KERNEL_VERSION( 4, 8, 0 ) @@ -1226,15 +1230,15 @@ bool SysTraceStart( int64_t& samplingPeriod ) } TracyDebug( "Setup context switch capture" ); - for( int i=0; i