12#include "Containers/Array.h"
13#include "Containers/Map.h"
14#include "Containers/Queue.h"
47 #define CSV_CATEGORY_INDEX(CategoryName) (_GCsvCategory_##CategoryName.Index)
48 #define CSV_CATEGORY_INDEX_GLOBAL (0)
51 #define CSV_DEFINE_CATEGORY(CategoryName,bDefaultValue) FCsvCategory _GCsvCategory_##CategoryName(TEXT(#CategoryName),bDefaultValue)
52 #define CSV_DEFINE_CATEGORY_MODULE(Module_API,CategoryName,bDefaultValue) FCsvCategory Module_API _GCsvCategory_##CategoryName(TEXT(#CategoryName),bDefaultValue)
53 #define CSV_DECLARE_CATEGORY_EXTERN(CategoryName) extern FCsvCategory _GCsvCategory_##CategoryName
54 #define CSV_DECLARE_CATEGORY_MODULE_EXTERN(Module_API,CategoryName) extern Module_API FCsvCategory _GCsvCategory_##CategoryName
57 #define CSV_EVENT(Category, Format, ...) \
58 FCsvProfiler::RecordEventf( CSV_CATEGORY_INDEX(Category), Format, ##__VA_ARGS__ ); \
59 TRACE_BOOKMARK(TEXT(PREPROCESSOR_TO_STRING(Category)) TEXT("/") Format, ##__VA_ARGS__)
61 #define CSV_EVENT_GLOBAL(Format, ...) \
62 FCsvProfiler::RecordEventf( CSV_CATEGORY_INDEX_GLOBAL, Format, ##__VA_ARGS__ ); \
63 TRACE_BOOKMARK(Format, ##__VA_ARGS__)
66 #define CSV_METADATA(Key,Value) FCsvProfiler::SetMetadata( Key, Value )
67 #define CSV_NON_PERSISTENT_METADATA(Key,Value) FCsvProfiler::SetNonPersistentMetadata( Key, Value )
71 #define CSV_CUSTOM_STAT_MINIMAL(Category,StatName,Value,Op) FCsvProfiler::RecordCustomStatMinimal(#StatName, CSV_CATEGORY_INDEX(Category), Value, Op);
72 #define CSV_CUSTOM_STAT_MINIMAL_GLOBAL(StatName,Value,Op) FCsvProfiler::RecordCustomStatMinimal(#StatName, CSV_CATEGORY_INDEX_GLOBAL, Value, Op);
75 #define CSV_CATEGORY_INDEX(CategoryName) (0)
76 #define CSV_CATEGORY_INDEX_GLOBAL (0)
77 #define CSV_DEFINE_CATEGORY(CategoryName,bDefaultValue)
78 #define CSV_DEFINE_CATEGORY_MODULE(Module_API,CategoryName,bDefaultValue)
79 #define CSV_DECLARE_CATEGORY_EXTERN(CategoryName)
80 #define CSV_DECLARE_CATEGORY_MODULE_EXTERN(Module_API,CategoryName)
81 #define CSV_EVENT(Category, Format, ...)
82 #define CSV_EVENT_GLOBAL(Format, ...)
83 #define CSV_METADATA(Key,Value)
84 #define CSV_NON_PERSISTENT_METADATA(Key,Value)
85 #define CSV_CUSTOM_STAT_MINIMAL(Category,StatName,Value,Op)
86 #define CSV_CUSTOM_STAT_MINIMAL_GLOBAL(StatName,Value,Op)
90#if CSV_PROFILER && !CSV_PROFILER_MINIMAL
92 #define CSV_STAT_FNAME(StatName) (_GCsvStat_##StatName.Name)
95 #define CSV_SCOPED_TIMING_STAT(Category,StatName) \
96 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX(Category)); \
97 FScopedCsvStat _ScopedCsvStat_ ## StatName (#StatName, CSV_CATEGORY_INDEX(Category), "CSV_"#StatName);
98 #define CSV_SCOPED_TIMING_STAT_GLOBAL(StatName) \
99 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX_GLOBAL); \
100 FScopedCsvStat _ScopedCsvStat_ ## StatName (#StatName, CSV_CATEGORY_INDEX_GLOBAL, "CSV_"#StatName);
101 #define CSV_SCOPED_TIMING_STAT_CONDITIONAL(Category,StatName, Condition) \
102 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX(Category)); \
103 FScopedCsvStatConditional _ScopedCsvStat_ ## StatName (#StatName, CSV_CATEGORY_INDEX(Category), Condition, "CSV_"#StatName);
104 #define CSV_SCOPED_TIMING_STAT_EXCLUSIVE(StatName) \
105 TRACE_CSV_PROFILER_INLINE_STAT_EXCLUSIVE(#StatName); \
106 FScopedCsvStatExclusive _ScopedCsvStatExclusive_ ## StatName (#StatName, "CSV_"#StatName);
107 #define CSV_SCOPED_TIMING_STAT_EXCLUSIVE_CONDITIONAL(StatName,Condition) \
108 TRACE_CSV_PROFILER_INLINE_STAT_EXCLUSIVE(#StatName); \
109 FScopedCsvStatExclusiveConditional _ScopedCsvStatExclusive_ ## StatName (#StatName,Condition, "CSV_"#StatName);
110 #define CSV_SCOPED_TIMING_STAT_RECURSIVE(Category,StatName) \
111 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX(Category)); \
112 static thread_local int32 _ScopedCsvStatRecursive_EntryCount_ ## StatName = 0; \
113 FScopedCsvStatRecursive _ScopedCsvStatRecursive_ ## StatName (_ScopedCsvStatRecursive_EntryCount_ ## StatName, #StatName, CSV_CATEGORY_INDEX(Category), "CSV_"#StatName);
114 #define CSV_SCOPED_TIMING_STAT_RECURSIVE_CONDITIONAL(Category,StatName,Condition) \
115 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX(Category)); \
116 static thread_local int32 _ScopedCsvStatRecursive_EntryCount_ ## StatName = 0; \
117 FScopedCsvStatRecursiveConditional _ScopedCsvStatRecursive_ ## StatName (_ScopedCsvStatRecursive_EntryCount_ ## StatName, #StatName, CSV_CATEGORY_INDEX(Category), Condition, "CSV_"#StatName);
120 #define CSV_SCOPED_WAIT(WaitTime) FScopedCsvWaitConditional _ScopedCsvWait(WaitTime>0 && FCsvProfiler::IsWaitTrackingEnabledOnCurrentThread());
121 #define CSV_SCOPED_WAIT_CONDITIONAL(Condition) FScopedCsvWaitConditional _ScopedCsvWait(Condition);
123 #define CSV_SCOPED_SET_WAIT_STAT(StatName) \
124 TRACE_CSV_PROFILER_INLINE_STAT_EXCLUSIVE("EventWait/"#StatName); \
125 FScopedCsvSetWaitStat _ScopedCsvSetWaitStat ## StatName("EventWait/"#StatName, "CsvEventWait/"#StatName, "CsvEventWait/"#StatName" (Non-CP)");
127 #define CSV_SCOPED_SET_WAIT_STAT_IGNORE() FScopedCsvSetWaitStat _ScopedCsvSetWaitStat ## StatName();
130 #define CSV_CUSTOM_STAT(Category,StatName,Value,Op) \
133 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX(Category)); \
134 FCsvProfiler::RecordCustomStat(#StatName, CSV_CATEGORY_INDEX(Category), Value, Op); \
136 #define CSV_CUSTOM_STAT_GLOBAL(StatName,Value,Op) \
139 TRACE_CSV_PROFILER_INLINE_STAT(#StatName, CSV_CATEGORY_INDEX_GLOBAL); \
140 FCsvProfiler::RecordCustomStat(#StatName, CSV_CATEGORY_INDEX_GLOBAL, Value, Op); \
144 #define CSV_DEFINE_STAT(Category,StatName) FCsvDeclaredStat _GCsvStat_##StatName((TCHAR*)TEXT(#StatName), CSV_CATEGORY_INDEX(Category));
145 #define CSV_DEFINE_STAT_GLOBAL(StatName) FCsvDeclaredStat _GCsvStat_##StatName((TCHAR*)TEXT(#StatName), CSV_CATEGORY_INDEX_GLOBAL);
146 #define CSV_DECLARE_STAT_EXTERN(Category,StatName) extern FCsvDeclaredStat _GCsvStat_##StatName
147 #define CSV_CUSTOM_STAT_DEFINED(StatName,Value,Op) FCsvProfiler::RecordCustomStat(_GCsvStat_##StatName.Name, _GCsvStat_##StatName.CategoryIndex, Value, Op);
149 #define CSV_STAT_FNAME(StatName) NAME_None
150 #define CSV_SCOPED_TIMING_STAT(Category,StatName)
151 #define CSV_SCOPED_TIMING_STAT_GLOBAL(StatName)
152 #define CSV_SCOPED_TIMING_STAT_EXCLUSIVE(StatName)
153 #define CSV_SCOPED_TIMING_STAT_EXCLUSIVE_CONDITIONAL(StatName,Condition)
154 #define CSV_SCOPED_TIMING_STAT_RECURSIVE(Category,StatName)
155 #define CSV_SCOPED_TIMING_STAT_RECURSIVE_CONDITIONAL(Category,StatName,Condition)
156 #define CSV_SCOPED_WAIT(WaitTime)
157 #define CSV_SCOPED_WAIT_CONDITIONAL(Condition)
158 #define CSV_SCOPED_SET_WAIT_STAT(StatName)
159 #define CSV_SCOPED_SET_WAIT_STAT_IGNORE()
160 #define CSV_CUSTOM_STAT(Category,StatName,Value,Op)
161 #define CSV_CUSTOM_STAT_GLOBAL(StatName,Value,Op)
162 #define CSV_DEFINE_STAT(Category,StatName)
163 #define CSV_DEFINE_STAT_GLOBAL(StatName)
164 #define CSV_DECLARE_STAT_EXTERN(Category,StatName)
165 #define CSV_CUSTOM_STAT_DEFINED(StatName,Value,Op)
284 std::atomic<T>
Value;
302 while (!
Value.compare_exchange_weak(
Previous,
Desired, std::memory_order_release, std::memory_order_consume))
314 return Value.store(
NewVal, std::memory_order_relaxed);
322 std::atomic<float>
Value;
338 return Value.fetch_add(Rhs, std::memory_order_relaxed);
342 return Value.fetch_sub(Rhs, std::memory_order_relaxed);
354 std::atomic<int>
Value;
409 template <
typename FmtType,
typename... Types>
536 int32 NumFramesToCapture;
537 int32 CaptureFrameNumber;
549 double CaptureStartTime;
551 FString OutputFilename;
587 AutoRTFM::PushOnAbortHandler(
this, [
SN = StatName,
CI = CategoryIndex](){ FCsvProfiler::EndStat(
SN,
CI); });
592 AutoRTFM::PopOnAbortHandler(
this);
595 const char * StatName;
617 FCsvProfiler::EndStat(StatName, CategoryIndex);
621 const char* StatName;
633 AutoRTFM::PushOnAbortHandler(
this, [
SN = StatName](){ FCsvProfiler::EndExclusiveStat(
SN); });
638 AutoRTFM::PopOnAbortHandler(
this);
641 const char * StatName;
661 FCsvProfiler::EndExclusiveStat(StatName);
664 const char * StatName;
670 const char* StatName;
689 FCsvProfiler::EndStat(StatName, CategoryIndex);
697 const char* StatName;
723 FCsvProfiler::EndStat(StatName, CategoryIndex);
738 FCsvProfiler::BeginWait();
746 FCsvProfiler::EndWait();
769 FCsvProfiler::EndSetWaitStat();
772 const char* StatName;
783 Index = FCsvProfiler::RegisterCategory(
Name, bDefaultValue, bIsGlobal);
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CSV_PROFILER_DECLARED_STAT(...)
Definition CsvProfilerTrace.h:98
#define CSV_CATEGORY_INDEX_GLOBAL
Definition CsvProfiler.h:76
#define CSV_DECLARE_CATEGORY_MODULE_EXTERN(Module_API, CategoryName)
Definition CsvProfiler.h:80
#define DECLARE_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:58
#define DECLARE_MULTICAST_DELEGATE(DelegateName)
Definition DelegateCombinations.h:23
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
void Init()
Definition LockFreeList.h:4
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
::FCriticalSection FTransactionallySafeCriticalSection
Definition TransactionallySafeCriticalSection.h:16
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition NameTypes.h:617
Definition ThreadSafeCounter.h:14
Definition UnrealString.h.inl:34
FGameThreadAudioCommandQueue CommandQueue
Definition AudioThread.cpp:222
T::FDataType GetValue(const UBlackboardComponent &Blackboard, const FName &Name, FBlackboard::FKey &InOutCachedKey, const typename T::FDataType &DefaultValue)
Definition ValueOrBBKey.h:51
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
@ Start
Definition GeoEnum.h:100
FORCEINLINE UE_STRING_CLASS RhsType && Rhs
Definition String.cpp.inl:718
U16 Index
Definition radfft.cpp:71
Definition IsArrayOrRefOfTypeByPredicate.h:13
Definition IsValidVariadicFunctionArg.h:14