UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Histogram.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
9#pragma once
10
11#include "Containers/Array.h"
13#include "Containers/Map.h"
15#include "CoreTypes.h"
16#include "HAL/PlatformCrt.h"
17#include "Logging/LogMacros.h"
21
22#include <initializer_list>
23
26template <typename FuncType> class TFunctionRef;
27
29
30 struct FHistogramBuilder;
31
34{
36 CORE_API void InitLinear(double MinTime, double MaxTime, double BinSize);
37
40
43
45 UE_FORCEINLINE_HINT void InitFromArray(std::initializer_list<double> Thresholds)
46 {
47 InitFromArray(MakeArrayView(Thresholds));
48 }
49
51 CORE_API void Reset();
52
54 inline void AddMeasurement(double Value)
55 {
57 }
58
61
63 CORE_API void DumpToLog(const FString& HistogramName);
64
70 CORE_API FString DumpToJsonString(TFunctionRef<FString (double, double)> ConvertBinToLabel) const;
71
73 CORE_API FString DumpToJsonString() const;
74
80 CORE_API FString DumpToJsonString2(TFunctionRef<FString (double, double)> ConvertBinToLabel) const;
81
83 CORE_API FString DumpToJsonString2() const;
84
86 static CORE_API FString DefaultConvertBinToLabel(double MinValue, double UpperBound);
87
89 inline int32 GetNumBins() const
90 {
91 return Bins.Num();
92 }
93
95 inline double GetBinLowerBound(int IdxBin) const
96 {
97 return Bins[IdxBin].MinValue;
98 }
99
101 inline double GetBinUpperBound(int IdxBin) const
102 {
103 return Bins[IdxBin].UpperBound;
104 }
105
108 {
109 return Bins[IdxBin].Count;
110 }
111
113 inline double GetBinObservationsSum(int IdxBin) const
114 {
115 return Bins[IdxBin].Sum;
116 }
117
120 {
121 return CountOfAllMeasures;
122 }
123
125 inline double GetSumOfAllMeasures() const
126 {
127 return SumOfAllMeasures;
128 }
129
131 inline double GetAverageOfAllMeasures() const
132 {
134 }
135
137 inline double GetMinOfAllMeasures() const
138 {
139 return MinimalMeasurement;
140 }
141
143 inline double GetMaxOfAllMeasures() const
144 {
145 return MaximalMeasurement;
146 }
147
149 {
150 // Logic below expects the bins to be of equal size
151 check(GetNumBins() == Other.GetNumBins());
152
153 FHistogram Tmp;
154 for (int32 BinIndex = 0, NumBins = Bins.Num(); BinIndex < NumBins; BinIndex++)
155 {
156 Tmp.Bins.Add(Bins[BinIndex] - Other.Bins[BinIndex]);
157 }
158 return Tmp;
159 }
160
162 {
163 // Logic below expects the bins to be of equal size
164 check(GetNumBins() == Other.GetNumBins());
165
166 FHistogram Tmp;
167 for (int32 BinIndex = 0, NumBins = Bins.Num(); BinIndex < NumBins; BinIndex++)
168 {
169 Tmp.Bins.Add(Bins[BinIndex] + Other.Bins[BinIndex]);
170 }
171 return Tmp;
172 }
173
175 {
176 // Logic below expects the bins to be of equal size
177 check(GetNumBins() == Other.GetNumBins());
178
179 for (int32 BinIndex = 0, NumBins = Bins.Num(); BinIndex < NumBins; BinIndex++)
180 {
181 Bins[BinIndex] += Other.Bins[BinIndex];
182 }
183
184 SumOfAllMeasures += Other.SumOfAllMeasures;
185 CountOfAllMeasures += Other.CountOfAllMeasures;
186 MinimalMeasurement = FMath::Min(MinimalMeasurement, Other.MinimalMeasurement);
187 MaximalMeasurement = FMath::Max(MaximalMeasurement, Other.MaximalMeasurement);
188
189 return *this;
190 }
191
192protected:
193
195 struct FBin
196 {
198 double MinValue;
199
202
204 double Sum;
205
208
210 {
211 }
212
214 FBin(double MinInclusive, double MaxExclusive, double InSum, int32 InCount) //@TODO: FLOATPRECISION: THIS CHANGES BEHAVIOR
217 , Sum(InSum)
218 , Count(InCount)
219 {
220 }
221
226 , Sum(0)
227 , Count(0)
228 {
229 }
230
235 , Sum(0)
236 , Count(0)
237 {
238 }
239
241 {
242 return FBin(MinValue, UpperBound, Sum - Other.Sum, Count - Other.Count);
243 }
245 {
246 return FBin(MinValue, UpperBound, Sum + Other.Sum, Count + Other.Count);
247 }
248 inline FBin& operator+=(const FBin& Other)
249 {
250 Sum += Other.Sum;
251 Count += Other.Count;
252 return *this;
253 }
254 };
255
258
264
267};
268
271{
272 FHistogramBuilder(FHistogram& InHistogram, double StartingValue = 0.0)
273 : MyHistogram(&InHistogram)
274 , LastValue(StartingValue)
275 {
276 MyHistogram->SumOfAllMeasures = 0.0;
277 MyHistogram->CountOfAllMeasures = 0;
278 MyHistogram->MinimalMeasurement = DBL_MAX;
279 MyHistogram->MaximalMeasurement = -DBL_MAX;
280 MyHistogram->Bins.Reset();
281 }
282
284 void AddBin(double MaxValue)
285 {
286 // Can't add to a closed builder
287 check(MyHistogram);
288 MyHistogram->Bins.Emplace(LastValue, MaxValue);
289 LastValue = MaxValue;
290 }
291
294 {
295 MyHistogram->Bins.Emplace(LastValue);
296 MyHistogram = nullptr;
297 }
298
300 {
301 // Close it out if the user hasn't already
302 if (MyHistogram != nullptr)
303 {
304 FinishBins();
305 }
306 }
307private:
308 FHistogram* MyHistogram;
309 double LastValue;
310};
311
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
#define UE_FORCEINLINE_HINT
Definition Platform.h:723
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition AssetRegistryState.h:50
Definition AnalyticsEventAttribute.h:48
Definition Histogram.h:271
~FHistogramBuilder()
Definition Histogram.h:299
FHistogramBuilder(FHistogram &InHistogram, double StartingValue=0.0)
Definition Histogram.h:272
void FinishBins()
Definition Histogram.h:293
void AddBin(double MaxValue)
Definition Histogram.h:284
Definition Histogram.h:196
FBin & operator+=(const FBin &Other)
Definition Histogram.h:248
FBin()
Definition Histogram.h:209
double Sum
Definition Histogram.h:204
FBin(double MinInclusive, double MaxExclusive)
Definition Histogram.h:223
int32 Count
Definition Histogram.h:207
FBin(double MinInclusive, double MaxExclusive, double InSum, int32 InCount)
Definition Histogram.h:214
UE_FORCEINLINE_HINT FBin operator-(const FBin &Other) const
Definition Histogram.h:240
double MinValue
Definition Histogram.h:198
double UpperBound
Definition Histogram.h:201
UE_FORCEINLINE_HINT FBin operator+(const FBin &Other) const
Definition Histogram.h:244
FBin(double MinInclusive)
Definition Histogram.h:232
Definition Histogram.h:34
CORE_API FString DumpToJsonString2() const
Definition Histogram.cpp:177
CORE_API void InitHitchTracking()
Definition Histogram.cpp:32
FHistogram & operator+=(const FHistogram &Other)
Definition Histogram.h:174
double MaximalMeasurement
Definition Histogram.h:263
double GetMaxOfAllMeasures() const
Definition Histogram.h:143
double GetSumOfAllMeasures() const
Definition Histogram.h:125
double GetMinOfAllMeasures() const
Definition Histogram.h:137
friend FHistogramBuilder
Definition Histogram.h:266
CORE_API void InitLinear(double MinTime, double MaxTime, double BinSize)
Definition Histogram.cpp:14
UE_FORCEINLINE_HINT void InitFromArray(std::initializer_list< double > Thresholds)
Definition Histogram.h:45
void AddMeasurement(double Value)
Definition Histogram.h:54
CORE_API void InitFromArray(TArrayView< const double > Thresholds)
Definition Histogram.cpp:59
double GetBinUpperBound(int IdxBin) const
Definition Histogram.h:101
FHistogram operator-(const FHistogram &Other) const
Definition Histogram.h:148
int64 CountOfAllMeasures
Definition Histogram.h:261
double GetBinObservationsSum(int IdxBin) const
Definition Histogram.h:113
TArray< FBin > Bins
Definition Histogram.h:257
static CORE_API FString DefaultConvertBinToLabel(double MinValue, double UpperBound)
Definition Histogram.cpp:182
int32 GetNumBins() const
Definition Histogram.h:89
FHistogram operator+(const FHistogram &Other) const
Definition Histogram.h:161
double SumOfAllMeasures
Definition Histogram.h:260
double GetAverageOfAllMeasures() const
Definition Histogram.h:131
int64 GetNumMeasurements() const
Definition Histogram.h:119
CORE_API void Reset()
Definition Histogram.cpp:81
CORE_API FString DumpToJsonString() const
Definition Histogram.cpp:151
double MinimalMeasurement
Definition Histogram.h:262
int32 GetBinObservationsCount(int IdxBin) const
Definition Histogram.h:107
double GetBinLowerBound(int IdxBin) const
Definition Histogram.h:95