diff --git a/client/TracyProfiler.cpp b/client/TracyProfiler.cpp index 08167163..4b0357e6 100644 --- a/client/TracyProfiler.cpp +++ b/client/TracyProfiler.cpp @@ -472,7 +472,7 @@ void Profiler::ClearQueues( moodycamel::ConsumerToken& token ) for( size_t i=0; i lock( m_serialLock ); + std::lock_guard lock( m_serialLock ); for( auto& v : m_serialDequeue ) FreeAssociatedMemory( v ); m_serialDequeue.clear(); @@ -536,7 +536,7 @@ Profiler::DequeueStatus Profiler::Dequeue( moodycamel::ConsumerToken& token ) Profiler::DequeueStatus Profiler::DequeueSerial() { { - std::lock_guard lock( m_serialLock ); + std::lock_guard lock( m_serialLock ); m_serialQueue.swap( m_serialDequeue ); } diff --git a/client/TracyProfiler.hpp b/client/TracyProfiler.hpp index ab75b856..15d6b93b 100644 --- a/client/TracyProfiler.hpp +++ b/client/TracyProfiler.hpp @@ -10,10 +10,10 @@ #include "TracyCallstack.hpp" #include "TracyFastVector.hpp" #include "../common/tracy_lz4.hpp" -#include "../common/tracy_benaphore.h" #include "../common/TracyQueue.hpp" #include "../common/TracyAlign.hpp" #include "../common/TracyAlloc.hpp" +#include "../common/TracyMutex.hpp" #include "../common/TracySystem.hpp" #if defined _MSC_VER || defined __CYGWIN__ @@ -412,13 +412,13 @@ private: char* m_lz4Buf; FastVector m_serialQueue, m_serialDequeue; - NonRecursiveBenaphore m_serialLock; + TracyMutex m_serialLock; #ifdef TRACY_ON_DEMAND std::atomic m_isConnected; std::atomic m_frameCount; - NonRecursiveBenaphore m_deferredLock; + TracyMutex m_deferredLock; FastVector m_deferredQueue; #endif }; diff --git a/common/TracyMutex.hpp b/common/TracyMutex.hpp new file mode 100644 index 00000000..e5899048 --- /dev/null +++ b/common/TracyMutex.hpp @@ -0,0 +1,33 @@ +#ifndef __TRACYMUTEX_HPP__ +#define __TRACYMUTEX_HPP__ + +#if defined _MSC_VER + +# include + +namespace tracy +{ +using TracyMutex = std::shared_mutex; +} + +#elif defined __CYGWIN__ + +#include "tracy_benaphore.h" + +namespace tracy +{ +using TracyMutex = NonRecursiveBenaphore; +} + +#else + +#include + +namespace tracy +{ +using TracyMutex = std::mutex; +} + +#endif + +#endif diff --git a/server/TracyView.cpp b/server/TracyView.cpp index ea3b086b..8bd5a927 100644 --- a/server/TracyView.cpp +++ b/server/TracyView.cpp @@ -9,6 +9,7 @@ #include #include +#include "../common/TracyMutex.hpp" #include "../common/TracySystem.hpp" #include "tracy_pdqsort.h" #include "TracyBadVersion.hpp" @@ -364,7 +365,7 @@ bool View::DrawImpl() keepOpenPtr = &keepOpen; } - std::lock_guard lock( m_worker.GetDataLock() ); + std::lock_guard lock( m_worker.GetDataLock() ); char tmp[2048]; sprintf( tmp, "%s###Profiler", m_worker.GetCaptureName().c_str() ); ImGui::SetNextWindowSize( ImVec2( 1550, 800 ), ImGuiCond_FirstUseEver ); @@ -437,7 +438,7 @@ void View::DrawConnection() const auto cs = ty * 0.9f; { - std::lock_guard lock( m_worker.GetMbpsDataLock() ); + std::lock_guard lock( m_worker.GetMbpsDataLock() ); ImGui::Begin( m_worker.GetAddr().c_str(), nullptr, ImGuiWindowFlags_AlwaysAutoResize ); const auto& mbpsVector = m_worker.GetMbpsData(); const auto mbps = mbpsVector.back(); @@ -461,7 +462,7 @@ void View::DrawConnection() const auto wpos = ImGui::GetWindowPos() + ImGui::GetWindowContentRegionMin(); ImGui::GetWindowDrawList()->AddCircleFilled( wpos + ImVec2( 1 + cs * 0.5, 3 + ty * 0.5 ), cs * 0.5, m_worker.IsConnected() ? 0xFF2222CC : 0xFF444444, 10 ); - std::lock_guard lock( m_worker.GetDataLock() ); + std::lock_guard lock( m_worker.GetDataLock() ); { const auto sz = m_worker.GetFrameCount(); if( sz > 1 ) diff --git a/server/TracyView.hpp b/server/TracyView.hpp index 9a873145..b08f9e89 100644 --- a/server/TracyView.hpp +++ b/server/TracyView.hpp @@ -8,7 +8,6 @@ #include #include -#include "../common/tracy_benaphore.h" #include "TracyVector.hpp" #include "TracyWorker.hpp" #include "tracy_flat_hash_map.hpp" diff --git a/server/TracyWorker.cpp b/server/TracyWorker.cpp index c0007220..b2414272 100644 --- a/server/TracyWorker.cpp +++ b/server/TracyWorker.cpp @@ -501,7 +501,7 @@ Worker::Worker( FileRead& f, EventType::Type eventMask ) std::sort( std::execution::par_unseq, zones.begin(), zones.end(), []( const auto& lhs, const auto& rhs ) { return lhs.zone->start < rhs.zone->start; } ); #endif } - std::lock_guard lock( m_data.lock ); + std::lock_guard lock( m_data.lock ); m_data.sourceLocationZonesReady = true; } ); #endif @@ -1031,7 +1031,7 @@ void Worker::Exec() const char* end = buf + sz; { - std::lock_guard lock( m_data.lock ); + std::lock_guard lock( m_data.lock ); while( ptr < end ) { auto ev = (const QueueItem*)ptr; @@ -1049,7 +1049,7 @@ void Worker::Exec() enum { MbpsUpdateTime = 200 }; if( td > MbpsUpdateTime ) { - std::lock_guard lock( m_mbpsData.lock ); + std::lock_guard lock( m_mbpsData.lock ); m_mbpsData.mbps.erase( m_mbpsData.mbps.begin() ); m_mbpsData.mbps.emplace_back( bytes / ( td * 125.f ) ); m_mbpsData.compRatio = float( bytes ) / decBytes; @@ -2331,7 +2331,7 @@ void Worker::ReconstructMemAllocPlot() PlotData* plot; { - std::lock_guard lock( m_data.lock ); + std::lock_guard lock( m_data.lock ); plot = m_slab.AllocInit(); } @@ -2413,7 +2413,7 @@ void Worker::ReconstructMemAllocPlot() plot->min = 0; plot->max = max; - std::lock_guard lock( m_data.lock ); + std::lock_guard lock( m_data.lock ); m_data.plots.insert( m_data.plots.begin(), plot ); m_data.memory.plot = plot; } diff --git a/server/TracyWorker.hpp b/server/TracyWorker.hpp index 6f3bda87..ae245816 100644 --- a/server/TracyWorker.hpp +++ b/server/TracyWorker.hpp @@ -9,9 +9,9 @@ #include #include -#include "../common/tracy_benaphore.h" #include "../common/tracy_lz4.hpp" #include "../common/TracyForceInline.hpp" +#include "../common/TracyMutex.hpp" #include "../common/TracyQueue.hpp" #include "../common/TracySocket.hpp" #include "tracy_flat_hash_map.hpp" @@ -75,7 +75,7 @@ class Worker { DataBlock() : zonesCnt( 0 ), lastTime( 0 ), frameOffset( 0 ), threadLast( std::numeric_limits::max(), 0 ) {} - NonRecursiveBenaphore lock; + TracyMutex lock; Vector frames; Vector gpuData; Vector messages; @@ -115,7 +115,7 @@ class Worker { MbpsBlock() : mbps( 64 ), compRatio( 1.0 ) {} - NonRecursiveBenaphore lock; + TracyMutex lock; std::vector mbps; float compRatio; }; @@ -146,7 +146,7 @@ public: int64_t GetDelay() const { return m_delay; } int64_t GetResolution() const { return m_resolution; } - NonRecursiveBenaphore& GetDataLock() { return m_data.lock; } + TracyMutex& GetDataLock() { return m_data.lock; } size_t GetFrameCount() const { return m_data.frames.size(); } int64_t GetLastTime() const { return m_data.lastTime; } uint64_t GetZoneCount() const { return m_data.zonesCnt; } @@ -202,7 +202,7 @@ public: } tracy_force_inline uint64_t DecompressThread( uint16_t thread ) const { assert( thread < m_data.threadExpand.size() ); return m_data.threadExpand[thread]; } - NonRecursiveBenaphore& GetMbpsDataLock() { return m_mbpsData.lock; } + TracyMutex& GetMbpsDataLock() { return m_mbpsData.lock; } const std::vector& GetMbpsData() const { return m_mbpsData.mbps; } float GetCompRatio() const { return m_mbpsData.compRatio; } diff --git a/standalone/build/win32/Tracy.vcxproj b/standalone/build/win32/Tracy.vcxproj index 51a7f317..457921cc 100644 --- a/standalone/build/win32/Tracy.vcxproj +++ b/standalone/build/win32/Tracy.vcxproj @@ -112,6 +112,7 @@ + diff --git a/standalone/build/win32/Tracy.vcxproj.filters b/standalone/build/win32/Tracy.vcxproj.filters index 051bdd51..cac58a1c 100644 --- a/standalone/build/win32/Tracy.vcxproj.filters +++ b/standalone/build/win32/Tracy.vcxproj.filters @@ -179,6 +179,9 @@ server + + common +