mirror of
https://github.com/wolfpld/tracy.git
synced 2024-11-25 23:44:35 +00:00
Add TracyIsStarted
When using TRACY_MANUAL_LIFETIME, calling most Tracy functions before starting the profiler results in an assertion. Notably, even TracyIsConnected is affected. There is, however, no function to check if the profiler had already started. This commit adds such a function.
This commit is contained in:
parent
18054b4f34
commit
852a1a5f14
@ -1142,12 +1142,14 @@ thread_local bool RpThreadShutdown = false;
|
||||
# ifdef TRACY_MANUAL_LIFETIME
|
||||
ProfilerData* s_profilerData = nullptr;
|
||||
static ProfilerThreadData& GetProfilerThreadData();
|
||||
static std::atomic<bool> s_isProfilerStarted { false };
|
||||
TRACY_API void StartupProfiler()
|
||||
{
|
||||
s_profilerData = (ProfilerData*)tracy_malloc( sizeof( ProfilerData ) );
|
||||
new (s_profilerData) ProfilerData();
|
||||
s_profilerData->profiler.SpawnWorkerThreads();
|
||||
GetProfilerThreadData().token = ProducerWrapper( *s_profilerData );
|
||||
s_isProfilerStarted.store( true, std::memory_order_seq_cst );
|
||||
}
|
||||
static ProfilerData& GetProfilerData()
|
||||
{
|
||||
@ -1156,6 +1158,7 @@ static ProfilerData& GetProfilerData()
|
||||
}
|
||||
TRACY_API void ShutdownProfiler()
|
||||
{
|
||||
s_isProfilerStarted.store( false, std::memory_order_seq_cst );
|
||||
s_profilerData->~ProfilerData();
|
||||
tracy_free( s_profilerData );
|
||||
s_profilerData = nullptr;
|
||||
@ -1163,6 +1166,10 @@ TRACY_API void ShutdownProfiler()
|
||||
RpThreadInitDone = false;
|
||||
RpInitDone.store( 0, std::memory_order_release );
|
||||
}
|
||||
TRACY_API bool IsProfilerStarted()
|
||||
{
|
||||
return s_isProfilerStarted.load( std::memory_order_seq_cst );
|
||||
}
|
||||
# else
|
||||
static std::atomic<int> profilerDataLock { 0 };
|
||||
static std::atomic<ProfilerData*> profilerData { nullptr };
|
||||
@ -4439,6 +4446,11 @@ TRACY_API void ___tracy_shutdown_profiler( void )
|
||||
{
|
||||
tracy::ShutdownProfiler();
|
||||
}
|
||||
|
||||
TRACY_API int ___tracy_profiler_started( void )
|
||||
{
|
||||
return tracy::s_isProfilerStarted.load( std::memory_order_seq_cst );
|
||||
}
|
||||
# endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -51,6 +51,10 @@ namespace tracy
|
||||
#if defined(TRACY_DELAYED_INIT) && defined(TRACY_MANUAL_LIFETIME)
|
||||
TRACY_API void StartupProfiler();
|
||||
TRACY_API void ShutdownProfiler();
|
||||
TRACY_API bool IsProfilerStarted();
|
||||
# define TracyIsStarted tracy::IsProfilerStarted()
|
||||
#else
|
||||
# define TracyIsStarted true
|
||||
#endif
|
||||
|
||||
class GpuCtx;
|
||||
|
@ -109,6 +109,7 @@
|
||||
#define TracyParameterRegister(x,y)
|
||||
#define TracyParameterSetup(x,y,z,w)
|
||||
#define TracyIsConnected false
|
||||
#define TracyIsStarted false
|
||||
#define TracySetProgramName(x)
|
||||
|
||||
#define TracyFiberEnter(x)
|
||||
|
@ -97,6 +97,7 @@ typedef const void* TracyCZoneCtx;
|
||||
#define TracyCMessageLCS(x,y,z)
|
||||
|
||||
#define TracyCIsConnected 0
|
||||
#define TracyCIsStarted 0
|
||||
|
||||
#ifdef TRACY_FIBERS
|
||||
# define TracyCFiberEnter(fiber)
|
||||
@ -185,6 +186,11 @@ typedef /*const*/ struct ___tracy_c_zone_context TracyCZoneCtx;
|
||||
#ifdef TRACY_MANUAL_LIFETIME
|
||||
TRACY_API void ___tracy_startup_profiler(void);
|
||||
TRACY_API void ___tracy_shutdown_profiler(void);
|
||||
TRACY_API int ___tracy_profiler_started(void);
|
||||
|
||||
# define TracyCIsStarted ___tracy_profiler_started()
|
||||
#else
|
||||
# define TracyCIsStarted 1
|
||||
#endif
|
||||
|
||||
TRACY_API uint64_t ___tracy_alloc_srcloc( uint32_t line, const char* source, size_t sourceSz, const char* function, size_t functionSz );
|
||||
|
Loading…
Reference in New Issue
Block a user