UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StatsCollector.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
5
6namespace BuildPatchServices
7{
8 enum class EStatFormat : uint8
9 {
10 // Using the AccumulateTimeBegin and End functions, measured in cycles
11 Timer,
12 // Value measured in Bytes
14 // Value measured in Bytes per second
15 DataSpeed,
16 // Uses percentage printing, the returned stat should only be used with the percentage helpers
18 // Generic int64 output
19 Value
20 };
21
23 {
24 public:
26
27 public:
28 virtual ~FStatsCollector() {}
29 virtual volatile FAtomicValue* CreateStat(const FString& Name, EStatFormat Type, FAtomicValue InitialValue = 0) = 0;
30 virtual void LogStats(float TimeBetweenLogs = 0.0f) = 0;
31
32 public:
33 static uint64 GetCycles();
34 static double GetSeconds();
35 static double CyclesToSeconds(uint64 Cycles);
36 static uint64 SecondsToCycles(double Seconds);
38 static void AccumulateTimeEnd(volatile FAtomicValue* Stat, uint64& TempValue);
39 static void Accumulate(volatile FAtomicValue* Stat, int64 Amount);
40 static void Set(volatile FAtomicValue* Stat, int64 Value);
41 static void SetAsPercentage(volatile FAtomicValue* Stat, double Value);
42 static double GetAsPercentage(volatile FAtomicValue* Stat);
43 };
44
46 {
47 public:
48 static FStatsCollector* Create();
49 };
50
52 {
53 public:
63
64 private:
65 uint64 TempTime;
66 volatile FStatsCollector::FAtomicValue* Stat;
67 };
68
70 {
71 public:
73 : TempTime(InStaticTempValue)
74 , TimerStat(InTimerStat)
75 , CounterStat(InCounterStat)
76 {
77 FStatsCollector::FAtomicValue OldValue = FPlatformAtomics::InterlockedAdd(CounterStat, 1);
78 if (OldValue == 0)
79 {
80 FPlatformAtomics::InterlockedExchange(TempTime, FStatsCollector::FAtomicValue(FStatsCollector::GetCycles()));
81 }
82 }
84 {
86 FStatsCollector::FAtomicValue OldValue = FPlatformAtomics::InterlockedAdd(CounterStat, -1);
87 if (OldValue == 1)
88 {
89 FPlatformAtomics::InterlockedAdd(TimerStat, FStatsCollector::FAtomicValue(FStatsCollector::GetCycles() - CurrTempTime));
90 }
91 }
93 {
94 return (*TimerStat) + ((*CounterStat) > 0 ? FStatsCollector::FAtomicValue(FStatsCollector::GetCycles() - (*TempTime)) : 0);
95 }
96
97 private:
98 volatile FStatsCollector::FAtomicValue* TempTime;
99 volatile FStatsCollector::FAtomicValue* TimerStat;
100 volatile FStatsCollector::FAtomicValue* CounterStat;
101 };
102}
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
@ Percentage
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition StatsCollector.h:46
static FStatsCollector * Create()
Definition StatsCollector.cpp:167
Definition StatsCollector.h:23
virtual ~FStatsCollector()
Definition StatsCollector.h:28
static uint64 SecondsToCycles(double Seconds)
Definition StatsCollector.cpp:28
static double GetAsPercentage(volatile FAtomicValue *Stat)
Definition StatsCollector.cpp:67
virtual volatile FAtomicValue * CreateStat(const FString &Name, EStatFormat Type, FAtomicValue InitialValue=0)=0
static uint64 GetCycles()
Definition StatsCollector.cpp:13
static void SetAsPercentage(volatile FAtomicValue *Stat, double Value)
Definition StatsCollector.cpp:62
static void AccumulateTimeEnd(volatile FAtomicValue *Stat, uint64 &TempValue)
Definition StatsCollector.cpp:47
static void AccumulateTimeBegin(uint64 &TempValue)
Definition StatsCollector.cpp:42
int64 FAtomicValue
Definition StatsCollector.h:25
static double CyclesToSeconds(uint64 Cycles)
Definition StatsCollector.cpp:23
static double GetSeconds()
Definition StatsCollector.cpp:18
virtual void LogStats(float TimeBetweenLogs=0.0f)=0
Definition StatsCollector.h:70
FStatsCollector::FAtomicValue GetCurrentTime() const
Definition StatsCollector.h:92
FStatsParallelScopeTimer(volatile FStatsCollector::FAtomicValue *InStaticTempValue, volatile FStatsCollector::FAtomicValue *InTimerStat, volatile FStatsCollector::FAtomicValue *InCounterStat)
Definition StatsCollector.h:72
~FStatsParallelScopeTimer()
Definition StatsCollector.h:83
Definition StatsCollector.h:52
FStatsScopedTimer(volatile FStatsCollector::FAtomicValue *InStat)
Definition StatsCollector.h:54
~FStatsScopedTimer()
Definition StatsCollector.h:59
EStatFormat
Definition StatsCollector.h:9
Definition BuildPatchFileConstructor.h:28