9#include "Containers/Array.h"
101 return StatIdPtr->Name.Load(MemoryOrder);
121 return StatIdPtr->StatDescriptionAnsi.Get();
131 return StatIdPtr->StatDescriptionWide.Get();
255 Shift = EStatDataType::Shift + EStatDataType::NumBits,
285 Shift = EStatOperation::Shift + EStatOperation::NumBits,
302 Shift = EStatMetaFlags::Shift + EStatMetaFlags::NumBits,
333 NumBits = EMemoryRegion::Shift + EMemoryRegion::NumBits,
338static_assert(EStatAllFields::StartShift > 0,
"Too many stat fields.");
384 Number |= EStatMetaFlags::DummyAlwaysOne << (EStatMetaFlags::Shift + EStatAllFields::StartShift);
400 Number |= EStatMetaFlags::DummyAlwaysOne << (EStatMetaFlags::Shift + EStatAllFields::StartShift);
407 SetFlag(EStatMetaFlags::IsMemory,
true);
413 SetFlag(EStatMetaFlags::IsGPU,
true);
445 LocalNumber &= ~((1 << EStatAllFields::StartShift) - 1);
473 inline FName GetShortName()
const
482 inline FName GetGroupName()
const
520 checkStats((
Number & (EStatMetaFlags::DummyAlwaysOne << (EStatAllFields::StartShift + EStatMetaFlags::Shift)))
528 template<
typename TField>
529 typename TField::Type
GetField()
const
542 template<
typename TField>
548 LocalNumber &= ~(TField::Mask << (EStatAllFields::StartShift + TField::Shift));
558 bool GetFlag(EStatMetaFlags::Type Bit)
const
562 checkStats(Bit < EStatMetaFlags::Num && Bit != EStatMetaFlags::Invalid);
563 return !!((
LocalNumber >> (EStatAllFields::StartShift + EStatMetaFlags::Shift)) & Bit);
571 void SetFlag(EStatMetaFlags::Type Bit,
bool Value)
575 checkStats(Bit < EStatMetaFlags::Num && Bit != EStatMetaFlags::Invalid);
578 LocalNumber |= (Bit << (EStatAllFields::StartShift + EStatMetaFlags::Shift));
582 LocalNumber &= ~(Bit << (EStatAllFields::StartShift + EStatMetaFlags::Shift));
779 if (
NameAndInfo.GetFlag(EStatMetaFlags::IsPackedCCAndDuration))
831template<
typename TEnum >
884 void FixStatData(
const EStatDataType::Type NewType)
887 if (OldType != NewType)
890 if (OldType == EStatDataType::ST_int64 && NewType == EStatDataType::ST_double)
906 else if (OldType == EStatDataType::ST_double && NewType == EStatDataType::ST_int64)
961 if (
NameAndInfo.GetFlag(EStatMetaFlags::IsPackedCCAndDuration))
1065 EThreadType::Type ThreadType;
1082 , ThreadId(
Other.ThreadId)
1083 , ThreadType(
Other.ThreadType)
1096 ThreadType = EThreadType::Game;
1100 ThreadType = EThreadType::Renderer;
1104 ThreadType = EThreadType::Other;
1186 int32 ScopeCount = 0;
1199 bool bReentranceGuard =
false;
1217 Stats = FThreadStatsPool::Get().GetFromPool();
1265 template <
typename TValue>
1270 if constexpr (std::is_same_v<std::decay_t<TValue>,
double> || std::is_same_v<std::decay_t<TValue>,
int64>)
1334 Stats->Flush(
false,
true);
1336 FThreadStatsPool::Get().ReturnToPool(Stats);
1350 template<
typename TValue>
1464 static CORE_API void WaitForStats();
1485 template<
typename TValue>
1496 FThreadStats::Flush(
false,
true);
1537#if PLATFORM_USES_ANSI_STRING_FOR_EXTERNAL_PROFILING
1544#if CPUPROFILERTRACE_ENABLED
1548 FCpuProfilerTrace::OutputBeginDynamicEventWithId(StatName,
InStatId.GetStatDescriptionWIDE(), SourceLocation.GetFileName(), SourceLocation.GetLine());
1554 if ((
bAlways && FThreadStats::WillEverCollectData()) || FThreadStats::IsCollectingData())
1558 FThreadStats::AddMessage(StatName, EStatOperation::CycleScopeStart);
1570 inline void StartTrace(
const FName Name)
1572#if CPUPROFILERTRACE_ENABLED
1575 FCpuProfilerTrace::OutputBeginDynamicEvent(
Name);
1584#if CPUPROFILERTRACE_ENABLED
1587 FCpuProfilerTrace::OutputBeginDynamicEventWithId(
Name, Desc);
1604#if CPUPROFILERTRACE_ENABLED
1607 FCpuProfilerTrace::OutputEndEvent();
1613 FThreadStats::AddMessage(StatId, EStatOperation::CycleScopeEnd);
1645 AutoRTFM::PushOnAbortHandler(
this, [
this]() { this->
Stop(); });
1658 AutoRTFM::PopOnAbortHandler(
this);
1666 FThreadStats::PrimaryEnableAdd(
Value);
1670 FThreadStats::PrimaryEnableSubtract(
Value);
1688 FThreadStats::AddMessage(StatId.GetName(), EStatOperation::Add, TotalTime);
1781 AUTORTFM_OPEN CORE_API const TStatIdData*
DoSetup(
FName InStatName,
const TCHAR*
InStatDesc,
const char*
InGroupName,
const char*
InGroupCategory,
const TCHAR*
InGroupDesc,
bool bDefaultEnable,
bool bShouldClearEveryFrame, EStatDataType::Type
InStatType,
bool bCycleStat,
bool bSortByName,
FPlatformMemory::EMemoryCounterRegion InMemoryRegion)
const;
1784template<
class TStatData,
bool TCompiledIn>
1787 inline TStatId GetStatId()
const
1793 FName(TStatData::GetStatName()),
1794 TStatData::GetDescription(),
1795 TStatData::TGroup::GetGroupName(),
1796 TStatData::TGroup::GetGroupCategory(),
1797 TStatData::TGroup::GetDescription(),
1798 TStatData::TGroup::IsDefaultEnabled(),
1799 TStatData::IsClearEveryFrame(),
1800 TStatData::GetStatType(),
1801 TStatData::IsCycleStat(),
1802 TStatData::TGroup::GetSortByName(),
1803 TStatData::GetMemoryRegion()
1811 return GetStatId().GetName();
1853 return GetStatId().GetName();
1857template<
class TStatData>
1870template<
class TStatData>
1880 FThreadSafeStaticStatInner<TStatData, TStatData::TGroup::CompileTimeEnable>::GetStatId();
#define AUTORTFM_DISABLE
Definition AutoRTFMDefines.h:116
#define AUTORTFM_OPEN
Definition AutoRTFMDefines.h:122
#define UE_AUTORTFM_ALWAYS_OPEN
Definition AutoRTFMDefines.h:114
uint32 GRenderThreadId
Definition CoreGlobals.cpp:438
int32 GCycleStatsShouldEmitNamedEvents
Definition CoreGlobals.cpp:462
bool GShouldEmitVerboseNamedEvents
Definition CoreGlobals.cpp:468
uint32 GGameThreadId
Definition CoreGlobals.cpp:437
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TSAN_SAFE
Definition CoreMiscDefines.h:144
EMemoryOrder
Definition Atomic.h:32
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
return true
Definition ExternalRpcRegistry.cpp:601
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
#define LLM_SCOPE(...)
Definition LowLevelMemTracker.h:1095
FORCEINLINE FMinimalName NameToMinimalName(FName InName)
Definition NameTypes.h:1602
FORCEINLINE FName MinimalNameToName(FMinimalName InName)
Definition NameTypes.h:1592
#define MAX_uint32
Definition NumericLimits.h:21
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
EStatFlags
Definition StatsCommon.h:34
#define checkStats(x)
Definition StatsCommon.h:11
void StatsPrimaryEnableAdd(int32 Value=1)
Definition StatsSystemTypes.h:1886
void StatsPrimaryEnableSubtract(int32 Value=1)
Definition StatsSystemTypes.h:1889
#define TRACE_STAT_SET(...)
Definition StatsTrace.h:49
#define TRACE_STAT_ADD(...)
Definition StatsTrace.h:48
#define UE_TRACE_CHANNELEXPR_IS_ENABLED(ChannelsExpr)
Definition Trace.h:452
Definition NameTypes.h:617
static CORE_API FString SafeString(FNameEntryId InDisplayIndex, int32 InstanceNumber=NAME_NO_NUMBER_INTERNAL)
Definition UnrealNames.cpp:3822
Definition UnrealTemplate.h:321
Definition LightweightStats.h:424
Definition ThreadSafeCounter.h:14
Definition Renderer.Build.cs:6
Definition ChunkedArray.h:56
Definition LockFreeList.h:904
Definition UniquePtr.h:107
Definition SourceLocation.h:21
static UE_CONSTEVAL FSourceLocation Current(FSourceLocationImpl Impl=FSourceLocationImpl::current()) noexcept
Definition SourceLocation.h:107
FText GetDescription(EHttpResponseCodes::Type StatusCode)
Definition IHttpResponse.h:52
const Type Shift
Definition GenericApplication.h:43
Type
Definition PawnAction_Move.h:11
uint32 GetTypeHash(const FKey &Key)
Definition BlackboardKey.h:35
FORCEINLINE T * Get(const FObjectPtr &ObjectPtr)
Definition ObjectPtr.h:426
bool operator==(const FCachedAssetKey &A, const FCachedAssetKey &B)
Definition AssetDataMap.h:501
@ Start
Definition GeoEnum.h:100
Type * GetRawPointer(const TWeakObjectPtr< Type > Object)
Definition TypedElementDataStorageCompatibilityInterface.h:106
@ Packet
Definition Transport.h:15
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
static UE_FORCEINLINE_HINT void MemoryBarrier()
Definition AndroidPlatformMisc.h:249
static uint32 GetCurrentThreadId(void)
Definition AndroidPlatformTLS.h:20
static UE_FORCEINLINE_HINT void * GetTlsValue(uint32 SlotIndex)
Definition AndroidPlatformTLS.h:57
static UE_FORCEINLINE_HINT void SetTlsValue(uint32 SlotIndex, void *Value)
Definition AndroidPlatformTLS.h:47
Definition AndroidPlatformTime.h:18
static uint32 Cycles()
Definition AndroidPlatformTime.h:27
static double Seconds()
Definition AndroidPlatformTime.h:20
Definition NameTypes.h:439
FORCEINLINE bool IsNone() const
Definition NameTypes.h:1564
Definition NameTypes.h:69
static FNameEntryId FromUnstableInt(uint32 UnstableInt)
Definition NameTypes.h:114
Definition TypeCompatibleBytes.h:17
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition LightweightStats.h:416
static void AutoRTFMAssignFromOpenToClosed(TStatId &Closed, const TStatId &Open)
Definition LightweightStats.h:417