mirror of
https://github.com/wolfpld/tracy.git
synced 2025-03-20 07:40:02 +08:00
Adding manual lifetime management to aid multi-DLL usecase
This commit is contained in:
parent
384e2e3fa1
commit
da5e58682f
@ -913,6 +913,24 @@ struct ProfilerThreadData
|
|||||||
# endif
|
# endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef TRACY_MANUAL_LIFETIME
|
||||||
|
ProfilerData* s_profilerData = nullptr;
|
||||||
|
TRACY_API void startupProfiler()
|
||||||
|
{
|
||||||
|
s_profilerData = new ProfilerData;
|
||||||
|
s_profilerData->profiler.SpawnWorkerThreads();
|
||||||
|
}
|
||||||
|
static ProfilerData& GetProfilerData()
|
||||||
|
{
|
||||||
|
while (!s_profilerData);
|
||||||
|
return *s_profilerData;
|
||||||
|
}
|
||||||
|
TRACY_API void shutdownProfiler()
|
||||||
|
{
|
||||||
|
delete s_profilerData;
|
||||||
|
s_profilerData = nullptr;
|
||||||
|
}
|
||||||
|
#else
|
||||||
static std::atomic<int> profilerDataLock { 0 };
|
static std::atomic<int> profilerDataLock { 0 };
|
||||||
static std::atomic<ProfilerData*> profilerData { nullptr };
|
static std::atomic<ProfilerData*> profilerData { nullptr };
|
||||||
|
|
||||||
@ -934,6 +952,7 @@ static ProfilerData& GetProfilerData()
|
|||||||
}
|
}
|
||||||
return *ptr;
|
return *ptr;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static ProfilerThreadData& GetProfilerThreadData()
|
static ProfilerThreadData& GetProfilerThreadData()
|
||||||
{
|
{
|
||||||
@ -955,10 +974,13 @@ std::atomic<ThreadNameData*>& GetThreadNameData() { return GetProfilerData().thr
|
|||||||
TRACY_API LuaZoneState& GetLuaZoneState() { return GetProfilerThreadData().luaZoneState; }
|
TRACY_API LuaZoneState& GetLuaZoneState() { return GetProfilerThreadData().luaZoneState; }
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
#ifdef TRACY_MANUAL_LIFETIME
|
||||||
|
#else
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
const auto& __profiler_init = GetProfiler();
|
const auto& __profiler_init = GetProfiler();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#else
|
#else
|
||||||
TRACY_API void InitRPMallocThread()
|
TRACY_API void InitRPMallocThread()
|
||||||
@ -1000,10 +1022,25 @@ std::atomic<ThreadNameData*>& s_threadNameData = s_threadNameDataInstance;
|
|||||||
thread_local LuaZoneState init_order(104) s_luaZoneState { 0, false };
|
thread_local LuaZoneState init_order(104) s_luaZoneState { 0, false };
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
#ifdef TRACY_MANUAL_LIFETIME
|
||||||
|
Profiler* s_profiler = nullptr;
|
||||||
|
|
||||||
|
TRACY_API void startupProfiler()
|
||||||
|
{
|
||||||
|
s_profiler = new Profiler;
|
||||||
|
}
|
||||||
|
TRACY_API void shutdownProfiler()
|
||||||
|
{
|
||||||
|
delete s_profiler;
|
||||||
|
s_profiler = nullptr;
|
||||||
|
}
|
||||||
|
TRACY_API Profiler& GetProfiler() { return *s_profiler; }
|
||||||
|
#else
|
||||||
static Profiler init_order(105) s_profiler;
|
static Profiler init_order(105) s_profiler;
|
||||||
|
TRACY_API Profiler& GetProfiler() { return s_profiler; }
|
||||||
|
#endif
|
||||||
|
|
||||||
TRACY_API moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* GetToken() { return s_token.ptr; }
|
TRACY_API moodycamel::ConcurrentQueue<QueueItem>::ExplicitProducer* GetToken() { return s_token.ptr; }
|
||||||
TRACY_API Profiler& GetProfiler() { return s_profiler; }
|
|
||||||
TRACY_API moodycamel::ConcurrentQueue<QueueItem>& GetQueue() { return s_queue; }
|
TRACY_API moodycamel::ConcurrentQueue<QueueItem>& GetQueue() { return s_queue; }
|
||||||
TRACY_API int64_t GetInitTime() { return s_initTime.val; }
|
TRACY_API int64_t GetInitTime() { return s_initTime.val; }
|
||||||
TRACY_API std::atomic<uint32_t>& GetLockCounter() { return s_lockCounter; }
|
TRACY_API std::atomic<uint32_t>& GetLockCounter() { return s_lockCounter; }
|
||||||
@ -1083,6 +1120,14 @@ Profiler::Profiler()
|
|||||||
m_userPort = atoi( userPort );
|
m_userPort = atoi( userPort );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef TRACY_MANUAL_LIFETIME
|
||||||
|
#else
|
||||||
|
SpawnWorkerThreads();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void Profiler::SpawnWorkerThreads()
|
||||||
|
{
|
||||||
s_thread = (Thread*)tracy_malloc( sizeof( Thread ) );
|
s_thread = (Thread*)tracy_malloc( sizeof( Thread ) );
|
||||||
new(s_thread) Thread( LaunchWorker, this );
|
new(s_thread) Thread( LaunchWorker, this );
|
||||||
|
|
||||||
|
|||||||
@ -41,6 +41,10 @@
|
|||||||
|
|
||||||
namespace tracy
|
namespace tracy
|
||||||
{
|
{
|
||||||
|
#ifdef TRACY_MANUAL_LIFETIME
|
||||||
|
void startupProfiler();
|
||||||
|
void shutdownProfiler();
|
||||||
|
#endif
|
||||||
|
|
||||||
class GpuCtx;
|
class GpuCtx;
|
||||||
class Profiler;
|
class Profiler;
|
||||||
@ -118,6 +122,8 @@ public:
|
|||||||
Profiler();
|
Profiler();
|
||||||
~Profiler();
|
~Profiler();
|
||||||
|
|
||||||
|
void SpawnWorkerThreads();
|
||||||
|
|
||||||
static tracy_force_inline int64_t GetTime()
|
static tracy_force_inline int64_t GetTime()
|
||||||
{
|
{
|
||||||
#ifdef TRACY_HW_TIMER
|
#ifdef TRACY_HW_TIMER
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user