Tracy.hpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. #ifndef __TRACY_HPP__
  2. #define __TRACY_HPP__
  3. #include "common/TracyColor.hpp"
  4. #include "common/TracySystem.hpp"
  5. #ifndef TRACY_ENABLE
  6. #define ZoneNamed(x,y)
  7. #define ZoneNamedN(x,y,z)
  8. #define ZoneNamedC(x,y,z)
  9. #define ZoneNamedNC(x,y,z,w)
  10. #define ZoneTransient(x,y)
  11. #define ZoneTransientN(x,y,z)
  12. #define ZoneScoped
  13. #define ZoneScopedN(x)
  14. #define ZoneScopedC(x)
  15. #define ZoneScopedNC(x,y)
  16. #define ZoneText(x,y)
  17. #define ZoneTextV(x,y,z)
  18. #define ZoneName(x,y)
  19. #define ZoneNameV(x,y,z)
  20. #define ZoneColor(x)
  21. #define ZoneColorV(x,y)
  22. #define ZoneValue(x)
  23. #define ZoneValueV(x,y)
  24. #define FrameMark
  25. #define FrameMarkNamed(x)
  26. #define FrameMarkStart(x)
  27. #define FrameMarkEnd(x)
  28. #define FrameImage(x,y,z,w,a)
  29. #define TracyLockable( type, varname ) type varname;
  30. #define TracyLockableN( type, varname, desc ) type varname;
  31. #define TracySharedLockable( type, varname ) type varname;
  32. #define TracySharedLockableN( type, varname, desc ) type varname;
  33. #define LockableBase( type ) type
  34. #define SharedLockableBase( type ) type
  35. #define LockMark(x) (void)x;
  36. #define LockableName(x,y,z);
  37. #define TracyPlot(x,y)
  38. #define TracyPlotConfig(x,y)
  39. #define TracyMessage(x,y)
  40. #define TracyMessageL(x)
  41. #define TracyMessageC(x,y,z)
  42. #define TracyMessageLC(x,y)
  43. #define TracyAppInfo(x,y)
  44. #define TracyAlloc(x,y)
  45. #define TracyFree(x)
  46. #define TracySecureAlloc(x,y)
  47. #define TracySecureFree(x)
  48. #define TracyAllocN(x,y,z)
  49. #define TracyFreeN(x,y)
  50. #define TracySecureAllocN(x,y,z)
  51. #define TracySecureFreeN(x,y)
  52. #define ZoneNamedS(x,y,z)
  53. #define ZoneNamedNS(x,y,z,w)
  54. #define ZoneNamedCS(x,y,z,w)
  55. #define ZoneNamedNCS(x,y,z,w,a)
  56. #define ZoneTransientS(x,y,z)
  57. #define ZoneTransientNS(x,y,z,w)
  58. #define ZoneScopedS(x)
  59. #define ZoneScopedNS(x,y)
  60. #define ZoneScopedCS(x,y)
  61. #define ZoneScopedNCS(x,y,z)
  62. #define TracyAllocS(x,y,z)
  63. #define TracyFreeS(x,y)
  64. #define TracySecureAllocS(x,y,z)
  65. #define TracySecureFreeS(x,y)
  66. #define TracyAllocNS(x,y,z,w)
  67. #define TracyFreeNS(x,y,z)
  68. #define TracySecureAllocNS(x,y,z,w)
  69. #define TracySecureFreeNS(x,y,z)
  70. #define TracyMessageS(x,y,z)
  71. #define TracyMessageLS(x,y)
  72. #define TracyMessageCS(x,y,z,w)
  73. #define TracyMessageLCS(x,y,z)
  74. #define TracyParameterRegister(x)
  75. #define TracyParameterSetup(x,y,z,w)
  76. #define TracyIsConnected false
  77. #else
  78. #include <string.h>
  79. #include "client/TracyLock.hpp"
  80. #include "client/TracyProfiler.hpp"
  81. #include "client/TracyScoped.hpp"
  82. #if defined TRACY_HAS_CALLSTACK && defined TRACY_CALLSTACK
  83. # define ZoneNamed( varname, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), TRACY_CALLSTACK, active );
  84. # define ZoneNamedN( varname, name, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), TRACY_CALLSTACK, active );
  85. # define ZoneNamedC( varname, color, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), TRACY_CALLSTACK, active );
  86. # define ZoneNamedNC( varname, name, color, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), TRACY_CALLSTACK, active );
  87. # define ZoneTransient( varname, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), nullptr, 0, TRACY_CALLSTACK, active );
  88. # define ZoneTransientN( varname, name, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), name, strlen( name ), TRACY_CALLSTACK, active );
  89. #else
  90. # define ZoneNamed( varname, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), active );
  91. # define ZoneNamedN( varname, name, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), active );
  92. # define ZoneNamedC( varname, color, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), active );
  93. # define ZoneNamedNC( varname, name, color, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), active );
  94. # define ZoneTransient( varname, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), nullptr, 0, active );
  95. # define ZoneTransientN( varname, name, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), name, strlen( name ), active );
  96. #endif
  97. #define ZoneScoped ZoneNamed( ___tracy_scoped_zone, true )
  98. #define ZoneScopedN( name ) ZoneNamedN( ___tracy_scoped_zone, name, true )
  99. #define ZoneScopedC( color ) ZoneNamedC( ___tracy_scoped_zone, color, true )
  100. #define ZoneScopedNC( name, color ) ZoneNamedNC( ___tracy_scoped_zone, name, color, true )
  101. #define ZoneText( txt, size ) ___tracy_scoped_zone.Text( txt, size );
  102. #define ZoneTextV( varname, txt, size ) varname.Text( txt, size );
  103. #define ZoneName( txt, size ) ___tracy_scoped_zone.Name( txt, size );
  104. #define ZoneNameV( varname, txt, size ) varname.Name( txt, size );
  105. #define ZoneColor( color ) __trace_scoped_zone.Color( color );
  106. #define ZoneColorV( varname, color ) varname.Color( color );
  107. #define ZoneValue( value ) ___tracy_scoped_zone.Value( value );
  108. #define ZoneValueV( varname, value ) varname.Value( value );
  109. #define FrameMark tracy::Profiler::SendFrameMark( nullptr );
  110. #define FrameMarkNamed( name ) tracy::Profiler::SendFrameMark( name );
  111. #define FrameMarkStart( name ) tracy::Profiler::SendFrameMark( name, tracy::QueueType::FrameMarkMsgStart );
  112. #define FrameMarkEnd( name ) tracy::Profiler::SendFrameMark( name, tracy::QueueType::FrameMarkMsgEnd );
  113. #define FrameImage( image, width, height, offset, flip ) tracy::Profiler::SendFrameImage( image, width, height, offset, flip );
  114. #define TracyLockable( type, varname ) tracy::Lockable<type> varname { [] () -> const tracy::SourceLocationData* { static constexpr tracy::SourceLocationData srcloc { nullptr, #type " " #varname, __FILE__, __LINE__, 0 }; return &srcloc; }() };
  115. #define TracyLockableN( type, varname, desc ) tracy::Lockable<type> varname { [] () -> const tracy::SourceLocationData* { static constexpr tracy::SourceLocationData srcloc { nullptr, desc, __FILE__, __LINE__, 0 }; return &srcloc; }() };
  116. #define TracySharedLockable( type, varname ) tracy::SharedLockable<type> varname { [] () -> const tracy::SourceLocationData* { static constexpr tracy::SourceLocationData srcloc { nullptr, #type " " #varname, __FILE__, __LINE__, 0 }; return &srcloc; }() };
  117. #define TracySharedLockableN( type, varname, desc ) tracy::SharedLockable<type> varname { [] () -> const tracy::SourceLocationData* { static constexpr tracy::SourceLocationData srcloc { nullptr, desc, __FILE__, __LINE__, 0 }; return &srcloc; }() };
  118. #define LockableBase( type ) tracy::Lockable<type>
  119. #define SharedLockableBase( type ) tracy::SharedLockable<type>
  120. #define LockMark( varname ) static constexpr tracy::SourceLocationData __tracy_lock_location_##varname { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; varname.Mark( &__tracy_lock_location_##varname );
  121. #define LockableName( varname, txt, size ) varname.CustomName( txt, size );
  122. #define TracyPlot( name, val ) tracy::Profiler::PlotData( name, val );
  123. #define TracyPlotConfig( name, type ) tracy::Profiler::ConfigurePlot( name, type );
  124. #define TracyAppInfo( txt, size ) tracy::Profiler::MessageAppInfo( txt, size );
  125. #if defined TRACY_HAS_CALLSTACK && defined TRACY_CALLSTACK
  126. # define TracyMessage( txt, size ) tracy::Profiler::Message( txt, size, TRACY_CALLSTACK );
  127. # define TracyMessageL( txt ) tracy::Profiler::Message( txt, TRACY_CALLSTACK );
  128. # define TracyMessageC( txt, size, color ) tracy::Profiler::MessageColor( txt, size, color, TRACY_CALLSTACK );
  129. # define TracyMessageLC( txt, color ) tracy::Profiler::MessageColor( txt, color, TRACY_CALLSTACK );
  130. # define TracyAlloc( ptr, size ) tracy::Profiler::MemAllocCallstack( ptr, size, TRACY_CALLSTACK, false );
  131. # define TracyFree( ptr ) tracy::Profiler::MemFreeCallstack( ptr, TRACY_CALLSTACK, false );
  132. # define TracySecureAlloc( ptr, size ) tracy::Profiler::MemAllocCallstack( ptr, size, TRACY_CALLSTACK, true );
  133. # define TracySecureFree( ptr ) tracy::Profiler::MemFreeCallstack( ptr, TRACY_CALLSTACK, true );
  134. # define TracyAllocN( ptr, size, name ) tracy::Profiler::MemAllocCallstackNamed( ptr, size, TRACY_CALLSTACK, false, name );
  135. # define TracyFreeN( ptr, name ) tracy::Profiler::MemFreeCallstackNamed( ptr, TRACY_CALLSTACK, false, name );
  136. # define TracySecureAllocN( ptr, size, name ) tracy::Profiler::MemAllocCallstackNamed( ptr, size, TRACY_CALLSTACK, true, name );
  137. # define TracySecureFreeN( ptr, name ) tracy::Profiler::MemFreeCallstackNamed( ptr, TRACY_CALLSTACK, true, name );
  138. #else
  139. # define TracyMessage( txt, size ) tracy::Profiler::Message( txt, size, 0 );
  140. # define TracyMessageL( txt ) tracy::Profiler::Message( txt, 0 );
  141. # define TracyMessageC( txt, size, color ) tracy::Profiler::MessageColor( txt, size, color, 0 );
  142. # define TracyMessageLC( txt, color ) tracy::Profiler::MessageColor( txt, color, 0 );
  143. # define TracyAlloc( ptr, size ) tracy::Profiler::MemAlloc( ptr, size, false );
  144. # define TracyFree( ptr ) tracy::Profiler::MemFree( ptr, false );
  145. # define TracySecureAlloc( ptr, size ) tracy::Profiler::MemAlloc( ptr, size, true );
  146. # define TracySecureFree( ptr ) tracy::Profiler::MemFree( ptr, true );
  147. # define TracyAllocN( ptr, size, name ) tracy::Profiler::MemAllocNamed( ptr, size, false, name );
  148. # define TracyFreeN( ptr, name ) tracy::Profiler::MemFreeNamed( ptr, false, name );
  149. # define TracySecureAllocN( ptr, size, name ) tracy::Profiler::MemAllocNamed( ptr, size, true, name );
  150. # define TracySecureFreeN( ptr, name ) tracy::Profiler::MemFreeNamed( ptr, true, name );
  151. #endif
  152. #ifdef TRACY_HAS_CALLSTACK
  153. # define ZoneNamedS( varname, depth, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), depth, active );
  154. # define ZoneNamedNS( varname, name, depth, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, 0 }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), depth, active );
  155. # define ZoneNamedCS( varname, color, depth, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { nullptr, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), depth, active );
  156. # define ZoneNamedNCS( varname, name, color, depth, active ) static constexpr tracy::SourceLocationData TracyConcat(__tracy_source_location,__LINE__) { name, __FUNCTION__, __FILE__, (uint32_t)__LINE__, color }; tracy::ScopedZone varname( &TracyConcat(__tracy_source_location,__LINE__), depth, active );
  157. # define ZoneTransientS( varname, depth, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), nullptr, 0, depth, active );
  158. # define ZoneTransientNS( varname, name, depth, active ) tracy::ScopedZone varname( __LINE__, __FILE__, strlen( __FILE__ ), __FUNCTION__, strlen( __FUNCTION__ ), name, strlen( name ), depth, active );
  159. # define ZoneScopedS( depth ) ZoneNamedS( ___tracy_scoped_zone, depth, true )
  160. # define ZoneScopedNS( name, depth ) ZoneNamedNS( ___tracy_scoped_zone, name, depth, true )
  161. # define ZoneScopedCS( color, depth ) ZoneNamedCS( ___tracy_scoped_zone, color, depth, true )
  162. # define ZoneScopedNCS( name, color, depth ) ZoneNamedNCS( ___tracy_scoped_zone, name, color, depth, true )
  163. # define TracyAllocS( ptr, size, depth ) tracy::Profiler::MemAllocCallstack( ptr, size, depth, false );
  164. # define TracyFreeS( ptr, depth ) tracy::Profiler::MemFreeCallstack( ptr, depth, false );
  165. # define TracySecureAllocS( ptr, size, depth ) tracy::Profiler::MemAllocCallstack( ptr, size, depth, true );
  166. # define TracySecureFreeS( ptr, depth ) tracy::Profiler::MemFreeCallstack( ptr, depth, true );
  167. # define TracyAllocNS( ptr, size, depth, name ) tracy::Profiler::MemAllocCallstackNamed( ptr, size, depth, false, name );
  168. # define TracyFreeNS( ptr, depth, name ) tracy::Profiler::MemFreeCallstackNamed( ptr, depth, false, name );
  169. # define TracySecureAllocNS( ptr, size, depth, name ) tracy::Profiler::MemAllocCallstackNamed( ptr, size, depth, true, name );
  170. # define TracySecureFreeNS( ptr, depth, name ) tracy::Profiler::MemFreeCallstackNamed( ptr, depth, true, name );
  171. # define TracyMessageS( txt, size, depth ) tracy::Profiler::Message( txt, size, depth );
  172. # define TracyMessageLS( txt, depth ) tracy::Profiler::Message( txt, depth );
  173. # define TracyMessageCS( txt, size, color, depth ) tracy::Profiler::MessageColor( txt, size, color, depth );
  174. # define TracyMessageLCS( txt, color, depth ) tracy::Profiler::MessageColor( txt, color, depth );
  175. #else
  176. # define ZoneNamedS( varname, depth, active ) ZoneNamed( varname, active )
  177. # define ZoneNamedNS( varname, name, depth, active ) ZoneNamedN( varname, name, active )
  178. # define ZoneNamedCS( varname, color, depth, active ) ZoneNamedC( varname, color, active )
  179. # define ZoneNamedNCS( varname, name, color, depth, active ) ZoneNamedNC( varname, name, color, active )
  180. # define ZoneTransientS( varname, depth, active ) ZoneTransient( varname, active )
  181. # define ZoneTransientNS( varname, name, depth, active ) ZoneTransientN( varname, name, active )
  182. # define ZoneScopedS( depth ) ZoneScoped
  183. # define ZoneScopedNS( name, depth ) ZoneScopedN( name )
  184. # define ZoneScopedCS( color, depth ) ZoneScopedC( color )
  185. # define ZoneScopedNCS( name, color, depth ) ZoneScopedNC( name, color )
  186. # define TracyAllocS( ptr, size, depth ) TracyAlloc( ptr, size )
  187. # define TracyFreeS( ptr, depth ) TracyFree( ptr )
  188. # define TracySecureAllocS( ptr, size, depth ) TracySecureAlloc( ptr, size )
  189. # define TracySecureFreeS( ptr, depth ) TracySecureFree( ptr )
  190. # define TracyAllocNS( ptr, size, depth, name ) TracyAlloc( ptr, size, name )
  191. # define TracyFreeNS( ptr, depth, name ) TracyFree( ptr, name )
  192. # define TracySecureAllocNS( ptr, size, depth, name ) TracySecureAlloc( ptr, size, name )
  193. # define TracySecureFreeNS( ptr, depth, name ) TracySecureFree( ptr, name )
  194. # define TracyMessageS( txt, size, depth ) TracyMessage( txt, size )
  195. # define TracyMessageLS( txt, depth ) TracyMessageL( txt )
  196. # define TracyMessageCS( txt, size, color, depth ) TracyMessageC( txt, size, color )
  197. # define TracyMessageLCS( txt, color, depth ) TracyMessageLC( txt, color )
  198. #endif
  199. #define TracyParameterRegister( cb ) tracy::Profiler::ParameterRegister( cb );
  200. #define TracyParameterSetup( idx, name, isBool, val ) tracy::Profiler::ParameterSetup( idx, name, isBool, val );
  201. #define TracyIsConnected tracy::GetProfiler().IsConnected()
  202. #endif
  203. #endif