From 4cceab5ad8eb236cf3d02c85cd423b3837dbb369 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Gr=C3=A9goire?= Date: Fri, 26 Dec 2025 16:44:40 +0100 Subject: [PATCH] Remove Profiler::Messsage since it's not part of the public API This also replaces `___tracy_emit_message*` by `___tracy_emit_logString`. The `TracyCMessage*` defines no long include the `;`, which may be a breaking change even though we did already require semi-colon since 0.9.0. See #493 and #592 --- public/client/TracyProfiler.cpp | 14 ++- public/client/TracyProfiler.hpp | 138 ++++++++++------------------- public/client/windows/TracyETW.cpp | 4 +- public/common/TracyStackFrames.cpp | 2 +- public/tracy/TracyC.h | 32 ++++--- 5 files changed, 79 insertions(+), 111 deletions(-) diff --git a/public/client/TracyProfiler.cpp b/public/client/TracyProfiler.cpp index 5e148023..0ed75f44 100644 --- a/public/client/TracyProfiler.cpp +++ b/public/client/TracyProfiler.cpp @@ -4613,10 +4613,16 @@ TRACY_API void ___tracy_emit_plot( const char* name, double val ) { tracy::Profi TRACY_API void ___tracy_emit_plot_float( const char* name, float val ) { tracy::Profiler::PlotData( name, val ); } TRACY_API void ___tracy_emit_plot_int( const char* name, int64_t val ) { tracy::Profiler::PlotData( name, val ); } TRACY_API void ___tracy_emit_plot_config( const char* name, int32_t type, int32_t step, int32_t fill, uint32_t color ) { tracy::Profiler::ConfigurePlot( name, tracy::PlotFormatType(type), step != 0, fill != 0, color ); } -TRACY_API void ___tracy_emit_message( const char* txt, size_t size, int32_t callstack_depth ) { tracy::Profiler::Message( txt, size, callstack_depth ); } -TRACY_API void ___tracy_emit_messageL( const char* txt, int32_t callstack_depth ) { tracy::Profiler::Message( txt, callstack_depth ); } -TRACY_API void ___tracy_emit_messageC( const char* txt, size_t size, uint32_t color, int32_t callstack_depth ) { tracy::Profiler::MessageColor( txt, size, color, callstack_depth ); } -TRACY_API void ___tracy_emit_messageLC( const char* txt, uint32_t color, int32_t callstack_depth ) { tracy::Profiler::MessageColor( txt, color, callstack_depth ); } + +static_assert( TracyMessageSeverityTrace == int(tracy::MessageSeverity::Trace), "Mismatch between C and C++ versions of message severity" ); +static_assert( TracyMessageSeverityDebug == int(tracy::MessageSeverity::Debug), "Mismatch between C and C++ versions of message severity" ); +static_assert( TracyMessageSeverityInfo == int(tracy::MessageSeverity::Info), "Mismatch between C and C++ versions of message severity" ); +static_assert( TracyMessageSeverityWarning == int(tracy::MessageSeverity::Warning), "Mismatch between C and C++ versions of message severity" ); +static_assert( TracyMessageSeverityError == int(tracy::MessageSeverity::Error), "Mismatch between C and C++ versions of message severity" ); +static_assert( TracyMessageSeverityFatal == int(tracy::MessageSeverity::Fatal), "Mismatch between C and C++ versions of message severity" ); + +TRACY_API void ___tracy_emit_logString( int8_t severity, int32_t color, int32_t callstack_depth, size_t size, const char* txt ) { tracy::Profiler::LogString( tracy::MessageSourceType::User, tracy::MessageSeverity(severity), color, callstack_depth, size, txt ); } +TRACY_API void ___tracy_emit_logStringL( int8_t severity, int32_t color, int32_t callstack_depth, const char* txt ) { tracy::Profiler::LogString( tracy::MessageSourceType::User, tracy::MessageSeverity(severity), color, callstack_depth, txt ); } TRACY_API void ___tracy_emit_message_appinfo( const char* txt, size_t size ) { tracy::Profiler::MessageAppInfo( txt, size ); } TRACY_API uint64_t ___tracy_alloc_srcloc( uint32_t line, const char* source, size_t sourceSz, const char* function, size_t functionSz, uint32_t color ) { diff --git a/public/client/TracyProfiler.hpp b/public/client/TracyProfiler.hpp index 3ee7dc53..55ad878a 100644 --- a/public/client/TracyProfiler.hpp +++ b/public/client/TracyProfiler.hpp @@ -405,10 +405,10 @@ public: TracyLfqCommit; } - - static tracy_force_inline void Message( MessageSourceType source, MessageSeverity severity, const char* txt, size_t size, int32_t callstack_depth ) + + static tracy_force_inline void LogString( MessageSourceType source, MessageSeverity severity, uint32_t color, int32_t callstack_depth, size_t txtLength, const char* txt ) { - assert( size < (std::numeric_limits::max)() ); + assert( txtLength < (std::numeric_limits::max)() ); #ifdef TRACY_ON_DEMAND if( !GetProfiler().IsConnected() ) return; #endif @@ -417,106 +417,60 @@ public: tracy::GetProfiler().SendCallstack( callstack_depth ); } - auto ptr = (char*)tracy_malloc( size ); - memcpy( ptr, txt, size ); + auto ptr = (char*)tracy_malloc( txtLength ); + memcpy( ptr, txt, txtLength ); TaggedUserlandAddress taggedPtr{ (uint64_t)ptr, MakeMessageMetadata( source, severity ) }; - TracyQueuePrepare( callstack_depth == 0 ? QueueType::Message : QueueType::MessageCallstack ); - MemWrite( &item->messageFat.time, GetTime() ); - MemWrite( &item->messageFat.textAndMetadata, taggedPtr ); - MemWrite( &item->messageFat.size, (uint16_t)size ); - TracyQueueCommit( messageFatThread ); - } - static tracy_force_inline void Message(const char* txt, size_t size, int32_t callstack_depth) - { - Message(tracy::MessageSourceType::User, tracy::MessageSeverity::Info, txt, size, callstack_depth); - } - - static tracy_force_inline void Message( MessageSourceType source, MessageSeverity severity, const char* txt, int32_t callstack_depth ) - { -#ifdef TRACY_ON_DEMAND - if( !GetProfiler().IsConnected() ) return; -#endif - if( callstack_depth != 0 && has_callstack() ) + if( color != 0 ) { - tracy::GetProfiler().SendCallstack( callstack_depth ); + TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack ); + MemWrite( &item->messageColorFat.time, GetTime() ); + MemWrite( &item->messageColorFat.textAndMetadata, taggedPtr ); + MemWrite( &item->messageColorFat.b, uint8_t( ( color ) & 0xFF ) ); + MemWrite( &item->messageColorFat.g, uint8_t( ( color >> 8 ) & 0xFF ) ); + MemWrite( &item->messageColorFat.r, uint8_t( ( color >> 16 ) & 0xFF ) ); + MemWrite( &item->messageColorFat.size, (uint16_t)txtLength ); + TracyQueueCommit( messageColorFatThread ); } - - TaggedUserlandAddress taggedPtr{ (uint64_t)txt, MakeMessageMetadata( source, severity ) }; - - TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack ); - MemWrite( &item->messageLiteral.time, GetTime() ); - MemWrite( &item->messageLiteral.textAndMetadata, taggedPtr ); - TracyQueueCommit( messageLiteralThread ); - } - static tracy_force_inline void Message( const char* txt, int32_t callstack_depth ) - { - Message( tracy::MessageSourceType::User, tracy::MessageSeverity::Info, txt, callstack_depth ); - } - - static tracy_force_inline void MessageColor( MessageSourceType source, MessageSeverity severity, const char* txt, size_t size, uint32_t color, int32_t callstack_depth ) - { - assert( size < (std::numeric_limits::max)() ); -#ifdef TRACY_ON_DEMAND - if( !GetProfiler().IsConnected() ) return; -#endif - if( callstack_depth != 0 && has_callstack() ) + else { - tracy::GetProfiler().SendCallstack( callstack_depth ); + TracyQueuePrepare( callstack_depth == 0 ? QueueType::Message : QueueType::MessageCallstack ); + MemWrite( &item->messageFat.time, GetTime() ); + MemWrite( &item->messageFat.textAndMetadata, taggedPtr ); + MemWrite( &item->messageFat.size, (uint16_t)txtLength ); + TracyQueueCommit( messageFatThread ); } - - auto ptr = (char*)tracy_malloc( size ); - memcpy( ptr, txt, size ); - TaggedUserlandAddress taggedPtr{ (uint64_t)ptr, MakeMessageMetadata( source, severity ) }; - - TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageColor : QueueType::MessageColorCallstack ); - MemWrite( &item->messageColorFat.time, GetTime() ); - MemWrite( &item->messageColorFat.textAndMetadata, taggedPtr ); - MemWrite( &item->messageColorFat.b, uint8_t( ( color ) & 0xFF ) ); - MemWrite( &item->messageColorFat.g, uint8_t( ( color >> 8 ) & 0xFF ) ); - MemWrite( &item->messageColorFat.r, uint8_t( ( color >> 16 ) & 0xFF ) ); - MemWrite( &item->messageColorFat.size, (uint16_t)size ); - TracyQueueCommit( messageColorFatThread ); - } - static tracy_force_inline void MessageColor( const char* txt, size_t size, uint32_t color, int32_t callstack_depth ) - { - MessageColor( tracy::MessageSourceType::User, tracy::MessageSeverity::Info, txt, size, color, callstack_depth ); - } - - static tracy_force_inline void MessageColor( MessageSourceType source, MessageSeverity severity, const char* txt, uint32_t color, int32_t callstack_depth ) - { -#ifdef TRACY_ON_DEMAND - if( !GetProfiler().IsConnected() ) return; -#endif - if( callstack_depth != 0 && has_callstack() ) - { - tracy::GetProfiler().SendCallstack( callstack_depth ); - } - TaggedUserlandAddress taggedPtr{ (uint64_t)txt, MakeMessageMetadata( source, severity ) }; - - TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack ); - MemWrite( &item->messageColorLiteral.time, GetTime() ); - MemWrite( &item->messageColorLiteral.textAndMetadata, taggedPtr ); - MemWrite( &item->messageColorLiteral.b, uint8_t( ( color ) & 0xFF ) ); - MemWrite( &item->messageColorLiteral.g, uint8_t( ( color >> 8 ) & 0xFF ) ); - MemWrite( &item->messageColorLiteral.r, uint8_t( ( color >> 16 ) & 0xFF ) ); - TracyQueueCommit( messageColorLiteralThread ); - } - static tracy_force_inline void MessageColor( const char* txt, uint32_t color, int32_t callstack_depth ) - { - MessageColor( tracy::MessageSourceType::User, tracy::MessageSeverity::Info, txt, color, callstack_depth ); } static tracy_force_inline void LogString( MessageSourceType source, MessageSeverity severity, uint32_t color, int32_t callstack_depth, const char* txt ) { - if( color != 0 ) MessageColor( source, severity, txt, color, callstack_depth ); - else Message( source, severity, txt, callstack_depth ); - } +#ifdef TRACY_ON_DEMAND + if( !GetProfiler().IsConnected() ) return; +#endif + if( callstack_depth != 0 && has_callstack() ) + { + tracy::GetProfiler().SendCallstack( callstack_depth ); + } - static tracy_force_inline void LogString( MessageSourceType source, MessageSeverity severity, uint32_t color, int32_t callstack_depth, size_t txtLength, const char* txt ) - { - if( color != 0 ) MessageColor( source, severity, txt, txtLength, color, callstack_depth ); - else Message( source, severity, txt, txtLength, callstack_depth ); + TaggedUserlandAddress taggedPtr{ (uint64_t)txt, MakeMessageMetadata( source, severity ) }; + + if( color != 0 ) + { + TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageLiteralColor : QueueType::MessageLiteralColorCallstack ); + MemWrite( &item->messageColorLiteral.time, GetTime() ); + MemWrite( &item->messageColorLiteral.textAndMetadata, taggedPtr ); + MemWrite( &item->messageColorLiteral.b, uint8_t( ( color ) & 0xFF ) ); + MemWrite( &item->messageColorLiteral.g, uint8_t( ( color >> 8 ) & 0xFF ) ); + MemWrite( &item->messageColorLiteral.r, uint8_t( ( color >> 16 ) & 0xFF ) ); + TracyQueueCommit( messageColorLiteral ); + } + else + { + TracyQueuePrepare( callstack_depth == 0 ? QueueType::MessageLiteral : QueueType::MessageLiteralCallstack ); + MemWrite( &item->messageLiteral.time, GetTime() ); + MemWrite( &item->messageLiteral.textAndMetadata, taggedPtr ); + TracyQueueCommit( messageLiteralThread ); + } } diff --git a/public/client/windows/TracyETW.cpp b/public/client/windows/TracyETW.cpp index c92772c6..53997706 100644 --- a/public/client/windows/TracyETW.cpp +++ b/public/client/windows/TracyETW.cpp @@ -136,9 +136,9 @@ static void ETWErrorAction( ULONG error_code, const char* message, int length ) #ifndef TRACY_NO_INTERNAL_MESSAGE #ifdef TRACY_HAS_CALLSTACK tracy::InitCallstackCritical(); - tracy::Profiler::MessageColor( MessageSourceType::Tracy, MessageSeverity::Error, message, length, Color_Red4, 60 ); + tracy::Profiler::LogString( MessageSourceType::Tracy, MessageSeverity::Error, Color_Red4, 60, length, message ); #else - tracy::Profiler::MessageColor( MessageSourceType::Tracy, MessageSeverity::Error, message, length, Color_Red4, 0 ); + tracy::Profiler::LogString( MessageSourceType::Tracy, MessageSeverity::Error, Color_Red4, 0, length, message ); #endif #endif #ifdef __cpp_exceptions diff --git a/public/common/TracyStackFrames.cpp b/public/common/TracyStackFrames.cpp index 7b0abace..11e3dc47 100644 --- a/public/common/TracyStackFrames.cpp +++ b/public/common/TracyStackFrames.cpp @@ -16,7 +16,7 @@ const char* s_tracyStackFrames_[] = { "tracy::Profiler::MemFreeCallstack(void const*, int)", "tracy::ScopedZone::{ctor}", "tracy::ScopedZone::ScopedZone(tracy::SourceLocationData const*, int, bool)", - "tracy::Profiler::Message", + "tracy::Profiler::LogString", nullptr }; diff --git a/public/tracy/TracyC.h b/public/tracy/TracyC.h index e77c01f7..185b38ce 100644 --- a/public/tracy/TracyC.h +++ b/public/tracy/TracyC.h @@ -18,6 +18,16 @@ enum TracyPlotFormatEnum TracyPlotFormatWatt }; +enum TracyMessageSeverity +{ + TracyMessageSeverityTrace, // Broadly track variable states and events in the software program. + TracyMessageSeverityDebug, // Describes variable states and details about specific internal events in the software, that are useful for investigations. + TracyMessageSeverityInfo, // Describes normal events, which inform on the expected progress and state of your software. + TracyMessageSeverityWarning, // Describes potentially dangerous situations caused by unexpected events and states. + TracyMessageSeverityError, // Describes the occurance of unexpected behavior. Does not interrupt the execution of the software. + TracyMessageSeverityFatal, // Describes a critical event that will lead to a software failure/crash. +}; + TRACY_API void ___tracy_set_thread_name( const char* name ); #define TracyCSetThreadName( name ) ___tracy_set_thread_name( name ); @@ -279,10 +289,8 @@ TRACY_API void ___tracy_emit_memory_free_callstack_named( const void* ptr, int32 TRACY_API void ___tracy_emit_memory_discard( const char* name, int32_t secure ); TRACY_API void ___tracy_emit_memory_discard_callstack( const char* name, int32_t secure, int32_t depth ); -TRACY_API void ___tracy_emit_message( const char* txt, size_t size, int32_t callstack_depth ); -TRACY_API void ___tracy_emit_messageL( const char* txt, int32_t callstack_depth ); -TRACY_API void ___tracy_emit_messageC( const char* txt, size_t size, uint32_t color, int32_t callstack_depth ); -TRACY_API void ___tracy_emit_messageLC( const char* txt, uint32_t color, int32_t callstack_depth ); +TRACY_API void ___tracy_emit_logString( int8_t severity, int32_t color, int32_t callstack_depth, size_t size, const char* txt ); +TRACY_API void ___tracy_emit_logStringL( int8_t severity, int32_t color, int32_t callstack_depth, const char* txt ); #define TracyCAlloc( ptr, size ) ___tracy_emit_memory_alloc_callstack( ptr, size, TRACY_CALLSTACK, 0 ) #define TracyCFree( ptr ) ___tracy_emit_memory_free_callstack( ptr, TRACY_CALLSTACK, 0 ) @@ -296,10 +304,10 @@ TRACY_API void ___tracy_emit_messageLC( const char* txt, uint32_t color, int32_t #define TracyCSecureAllocN( ptr, size, name ) ___tracy_emit_memory_alloc_callstack_named( ptr, size, TRACY_CALLSTACK, 1, name ) #define TracyCSecureFreeN( ptr, name ) ___tracy_emit_memory_free_callstack_named( ptr, TRACY_CALLSTACK, 1, name ) -#define TracyCMessage( txt, size ) ___tracy_emit_message( txt, size, TRACY_CALLSTACK ); -#define TracyCMessageL( txt ) ___tracy_emit_messageL( txt, TRACY_CALLSTACK ); -#define TracyCMessageC( txt, size, color ) ___tracy_emit_messageC( txt, size, color, TRACY_CALLSTACK ); -#define TracyCMessageLC( txt, color ) ___tracy_emit_messageLC( txt, color, TRACY_CALLSTACK ); +#define TracyCMessage( txt, size ) ___tracy_emit_logString( TracyMessageSeverityInfo, 0, TRACY_CALLSTACK, size, txt ) +#define TracyCMessageL( txt ) ___tracy_emit_logString( TracyMessageSeverityInfo, 0, TRACY_CALLSTACK, txt ) +#define TracyCMessageC( txt, size, color ) ___tracy_emit_logString( TracyMessageSeverityInfo, color, TRACY_CALLSTACK, size, txt ) +#define TracyCMessageLC( txt, color ) ___tracy_emit_logString( TracyMessageSeverityInfo, color, TRACY_CALLSTACK, txt ) TRACY_API void ___tracy_emit_frame_mark( const char* name ); @@ -344,10 +352,10 @@ TRACY_API void ___tracy_emit_message_appinfo( const char* txt, size_t size ); #define TracyCSecureAllocNS( ptr, size, depth, name ) ___tracy_emit_memory_alloc_callstack_named( ptr, size, depth, 1, name ) #define TracyCSecureFreeNS( ptr, depth, name ) ___tracy_emit_memory_free_callstack_named( ptr, depth, 1, name ) -#define TracyCMessageS( txt, size, depth ) ___tracy_emit_message( txt, size, depth ); -#define TracyCMessageLS( txt, depth ) ___tracy_emit_messageL( txt, depth ); -#define TracyCMessageCS( txt, size, color, depth ) ___tracy_emit_messageC( txt, size, color, depth ); -#define TracyCMessageLCS( txt, color, depth ) ___tracy_emit_messageLC( txt, color, depth ); +#define TracyCMessageS( txt, size, depth ) ___tracy_emit_logString( TracyMessageSeverityInfo, 0, depth, size, txt ) +#define TracyCMessageLS( txt, depth ) ___tracy_emit_logString( TracyMessageSeverityInfo, 0, depth, txt ) +#define TracyCMessageCS( txt, size, color, depth ) ___tracy_emit_logString( TracyMessageSeverityInfo, color, depth, size, txt ) +#define TracyCMessageLCS( txt, color, depth ) ___tracy_emit_logString( TracyMessageSeverityInfo, color, depth, txt ) TRACY_API struct __tracy_lockable_context_data* ___tracy_announce_lockable_ctx( const struct ___tracy_source_location_data* srcloc );