diff --git a/public/client/TracyProfiler.cpp b/public/client/TracyProfiler.cpp index fe241ad4..55fa3bc2 100644 --- a/public/client/TracyProfiler.cpp +++ b/public/client/TracyProfiler.cpp @@ -5666,6 +5666,28 @@ TRACY_API void ___tracy_custom_name_shared_lockable_ctx( struct __tracy_shared_l ___tracy_custom_name_lockable_ctx( &lockdata->m_base, name, nameSz ); } +TRACY_API uint32_t ___tracy_section_enter( uint16_t category, const char* fmt, ... ) +{ + va_list args; + va_start( args, fmt ); + uint32_t id = tracy::Profiler::SectionEnterV( category, fmt, args ); + va_end( args ); + return id; +} + +TRACY_API void ___tracy_section_leave( uint32_t id ) +{ + tracy::Profiler::SectionLeave( id ); +} + +TRACY_API void ___tracy_section_setup( uint16_t category, const char* fmt, ... ) +{ + va_list args; + va_start( args, fmt ); + tracy::Profiler::SectionSetupV( category, fmt, args ); + va_end( args ); +} + TRACY_API int32_t ___tracy_connected( void ) { return static_cast( tracy::GetProfiler().IsConnected() ); diff --git a/public/client/TracyProfiler.hpp b/public/client/TracyProfiler.hpp index 0f2fdb80..07cd48b3 100644 --- a/public/client/TracyProfiler.hpp +++ b/public/client/TracyProfiler.hpp @@ -837,23 +837,21 @@ public: } #endif - static uint32_t SectionEnter( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ) + static uint32_t SectionEnterV( uint16_t category, const char* fmt, va_list args ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 0 ) { auto& profiler = GetProfiler(); #ifdef TRACY_ON_DEMAND if( !profiler.IsConnected() ) return 0; #endif - va_list args; - va_start( args, fmt ); - auto size = vsnprintf( nullptr, 0, fmt, args ); - va_end( args ); + va_list args2; + va_copy( args2, args ); + auto size = vsnprintf( nullptr, 0, fmt, args2 ); + va_end( args2 ); if( size < 0 ) return 0; TRACY_ASSERT( size < (std::numeric_limits::max)() ); char* ptr = (char*)tracy_malloc( size_t( size ) + 1 ); - va_start( args, fmt ); vsnprintf( ptr, size_t( size ) + 1, fmt, args ); - va_end( args ); const auto id = profiler.GetNextSectionId(); TracyLfqPrepare( QueueType::SectionEnter ); @@ -866,6 +864,15 @@ public: return id; } + static uint32_t SectionEnter( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ) + { + va_list args; + va_start( args, fmt ); + uint32_t id = SectionEnterV( category, fmt, args ); + va_end( args ); + return id; + } + static tracy_force_inline void SectionLeave( uint32_t id ) { if( id == 0 ) return; @@ -878,19 +885,17 @@ public: TracyLfqCommit; } - static void SectionSetup( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ) + static void SectionSetupV( uint16_t category, const char* fmt, va_list args ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 0 ) { - va_list args; - va_start( args, fmt ); - auto size = vsnprintf( nullptr, 0, fmt, args ); - va_end( args ); + va_list args2; + va_copy( args2, args ); + auto size = vsnprintf( nullptr, 0, fmt, args2 ); + va_end( args2 ); if( size < 0 ) return; TRACY_ASSERT( size < (std::numeric_limits::max)() ); char* ptr = (char*)tracy_malloc( size_t( size ) + 1 ); - va_start( args, fmt ); vsnprintf( ptr, size_t( size ) + 1, fmt, args ); - va_end( args ); TracyLfqPrepare( QueueType::SectionSetup ); MemWrite( &item->sectionSetupFat.category, category ); @@ -904,6 +909,14 @@ public: TracyLfqCommit; } + static void SectionSetup( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ) + { + va_list args; + va_start( args, fmt ); + SectionSetupV( category, fmt, args ); + va_end( args ); + } + void SendCallstack( int32_t depth, const char** skipBefore ); static void CutCallstack( void* callstack, const char** skipBefore ); diff --git a/public/tracy/TracyC.h b/public/tracy/TracyC.h index cbc2f739..b971dc70 100644 --- a/public/tracy/TracyC.h +++ b/public/tracy/TracyC.h @@ -129,6 +129,11 @@ typedef const void* TracyCSharedLockCtx; #define TracyCSharedLockMark(l) #define TracyCSharedLockCustomName(l,x,y) +#define TracyCSectionEnter(x,...) 0 +#define TracyCSectionEnterCategory(c,x,...) 0 +#define TracyCSectionLeave(x) +#define TracyCSectionSetup(c,x,...) + #define TracyCIsConnected 0 #define TracyCIsStarted 0 @@ -387,6 +392,10 @@ TRACY_API void ___tracy_after_try_lock_shared_shared_lockable_ctx( struct __trac TRACY_API void ___tracy_mark_shared_lockable_ctx( struct __tracy_shared_lockable_context_data* lockdata, const struct ___tracy_source_location_data* srcloc ); TRACY_API void ___tracy_custom_name_shared_lockable_ctx( struct __tracy_shared_lockable_context_data* lockdata, const char* name, size_t nameSz ); +TRACY_API uint32_t ___tracy_section_enter( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ); +TRACY_API void ___tracy_section_leave( uint32_t id ); +TRACY_API void ___tracy_section_setup( uint16_t category, const char* fmt, ... ) TRACY_ATTRIBUTE_FORMAT_PRINTF( 2, 3 ); + #define TracyCLockAnnounce( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; lock = ___tracy_announce_lockable_ctx( &TracyConcat(__tracy_source_location,TracyLine) ) #define TracyCLockTerminate( lock ) ___tracy_terminate_lockable_ctx( lock ) @@ -410,6 +419,11 @@ TRACY_API void ___tracy_custom_name_shared_lockable_ctx( struct __tracy_shared_l #define TracyCSharedLockMark( lock ) static const struct ___tracy_source_location_data TracyConcat(__tracy_source_location,TracyLine) = { NULL, __func__, TracyFile, (uint32_t)TracyLine, 0 }; ___tracy_mark_shared_lockable_ctx( lock, &TracyConcat(__tracy_source_location,TracyLine) ) #define TracyCSharedLockCustomName( lock, name, nameSz ) ___tracy_custom_name_shared_lockable_ctx( lock, name, nameSz ) +#define TracyCSectionEnter( fmt, ... ) ___tracy_section_enter( 0, fmt, ##__VA_ARGS__ ) +#define TracyCSectionEnterCategory( category, fmt, ... ) ___tracy_section_enter( category, fmt, ##__VA_ARGS__ ) +#define TracyCSectionLeave( id ) ___tracy_section_leave( id ) +#define TracyCSectionSetup( category, fmt, ... ) ___tracy_section_setup( category, fmt, ##__VA_ARGS__ ) + #define TracyCIsConnected ___tracy_connected() TRACY_API int ___tracy_begin_sampling_profiling( void );