Add C API for Sections

This commit is contained in:
develOseven
2026-10-03 18:26:25 +02:00
parent f55c69603f
commit fbf3a3d738
3 changed files with 63 additions and 14 deletions

View File

@@ -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<int32_t>( tracy::GetProfiler().IsConnected() );

View File

@@ -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<uint16_t>::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<uint16_t>::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 );

View File

@@ -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 );