UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetAnalytics.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
35// Includes
36#include "Containers/Map.h"
38#include "CoreMinimal.h"
39#include "HAL/Platform.h"
40#include "Templates/Atomic.h"
43#include "UObject/NameTypes.h"
44
45// Forward Declarations
49
50
51// Defines
52
54#define NET_ANALYTICS_MULTITHREADING 0
55
56
58
59
60// Forward Declarations
62
63
64// Typedefs
65template<class T=FNetAnalyticsData> using TNetAnalyticsDataRef = TSharedRef<T, NetAnalyticsThreadSafety>;
66template<class T=FNetAnalyticsData> using TNetAnalyticsDataPtr = TSharedPtr<T, NetAnalyticsThreadSafety>;
67template<class T=FNetAnalyticsData> using TNetAnalyticsDataWeakPtr = TWeakPtr<T, NetAnalyticsThreadSafety>;
68
69
70// Defines
71
83#define REGISTER_NET_ANALYTICS(Aggregator, AnalyticsDataType, InDataName) \
84 StaticCastSharedPtr<AnalyticsDataType, FNetAnalyticsData, NetAnalyticsThreadSafety>( \
85 (Aggregator->RegisterAnalyticsData_Internal(MakeShareable(new AnalyticsDataType(), FNetAnalyticsDataDeleter()), InDataName, \
86 TEXT(#AnalyticsDataType))))
87
88
89// Globals
90
93
94
104
105
109struct FNetAnalyticsData : public FVirtualDestructor, public TSharedFromThis<FNetAnalyticsData, NetAnalyticsThreadSafety>
110{
113
114protected:
117
118
119public:
125
129 virtual void SendAnalytics() = 0;
130
131
132protected:
136 NETCORE_API virtual void InternalSendAnalytics();
137
141 virtual void NotifyFinalRelease()
142 {
143 }
144};
145
154template<class TDataStruct> struct TBasicNetAnalyticsData : public FNetAnalyticsData, protected TDataStruct
155{
157
158 static_assert(THasMemberFunction_CommitAnalytics<TDataStruct>::Value, "TDataStruct must implement void CommitAnalytics(TDataStruct&)");
159
165 void CommitAnalytics(TDataStruct& AnalyticsVars)
166 {
167 AnalyticsVars.CommitAnalytics(*this);
168 }
169};
170
171#if NET_ANALYTICS_MULTITHREADING
179{
184
185
186protected:
187 NETCORE_API virtual void InternalSendAnalytics() override;
188
189 NETCORE_API virtual void NotifyFinalRelease() override;
190
191
192protected:
195};
196
209template<class TDataStruct> struct TThreadedNetAnalyticsData : public FThreadedNetAnalyticsData, protected TDataStruct
210{
211 GENERATE_MEMBER_FUNCTION_CHECK(CommitAnalytics, void,, TDataStruct&);
212
213 static_assert(THasMemberFunction_CommitAnalytics<TDataStruct>::Value, "TDataStruct must implement void CommitAnalytics(TDataStruct&)");
214 static_assert(TIsDerivedFrom<TDataStruct, FLocalNetAnalyticsStruct>::IsDerived, "TDataStruct must be derived from FLocalNetAnalyticsStruct");
215
216
222 {
223 }
224
230 TDataStruct* GetLocalData()
231 {
234
236
237 return (FoundVal != nullptr ? static_cast<TDataStruct*>(*FoundVal) : AddLocalData(LocalNetAnalyticsMap));
238 }
239
240
241protected:
249 {
250 TDataStruct* ReturnVal = new TDataStruct();
251
254
257 ThreadLocalData.Enqueue(ReturnVal);
258
259
261 thread_local uint8 LastNetAnalyticsCounter = 0;
262
264
266 {
267 for (auto It=StaleNetAnalyticsTracking.CreateIterator(); It; ++It)
268 {
269 if (!It.Key().IsValid())
270 {
271 LocalNetAnalyticsMap.Remove(It.Value());
272 It.RemoveCurrent();
273 }
274 }
275
277 }
278
279 return ReturnVal;
280 }
281
282 virtual void NotifyFinalRelease() override
283 {
284 TDataStruct* CurAnalyticsData = nullptr;
285
286 while (ThreadLocalData.Dequeue(CurAnalyticsData))
287 {
288 CurAnalyticsData->CommitAnalytics(*this);
289
290 delete CurAnalyticsData;
291 }
292
293 FThreadedNetAnalyticsData::NotifyFinalRelease();
294 }
295
296
297protected:
300};
301#endif
302
307{
308 inline void operator()(FNetAnalyticsData* Data)
309 {
310 if (Data->Aggregator != nullptr)
311 {
312 Data->NotifyFinalRelease();
313 }
314
315 delete Data;
316 }
317};
318
319
324{
325public:
330
332
336 NETCORE_API void Init();
337
341 NETCORE_API void InitConfig();
342
347
353
354
367
368
371 {
372 return AnalyticsProvider;
373 }
374
377 {
378 return NetDriverName;
379 }
380
381public:
382
385
386private:
388 TSharedPtr<IAnalyticsProvider> AnalyticsProvider;
389
391 FName NetDriverName;
392
394 TMap<FName, TNetAnalyticsDataRef<>> AnalyticsDataMap;
395
397 TMap<FName, FString> AnalyticsDataTypeMap;
398
400 TMap<FName, bool> AnalyticsDataConfigMap;
401
403 FAnalyticsAppender AnalyticsAppender;
404
406 bool bSentAnalytics;
407};
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TAtomic< uint8 > GNetAnalyticsCounter(0)
NETCORE_API TAtomic< uint8 > GNetAnalyticsCounter
constexpr const ESPMode NetAnalyticsThreadSafety
Definition NetAnalytics.h:57
ESPMode
Definition SharedPointerFwd.h:12
#define GENERATE_MEMBER_FUNCTION_CHECK(MemberName, Result, ConstModifier,...)
Definition UnrealTypeTraits.h:470
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition NetAnalytics.h:324
const TSharedPtr< IAnalyticsProvider > & GetAnalyticsProvider()
Definition NetAnalytics.h:370
NETCORE_API TNetAnalyticsDataPtr RegisterAnalyticsData_Internal(TNetAnalyticsDataRef<> InData, const FName &InDataName, FString InTypeName)
Definition NetAnalytics.cpp:106
NETCORE_API void Init()
Definition NetAnalytics.cpp:70
NETCORE_API void AppendGameInstanceAttributes(TArray< FAnalyticsEventAttribute > &OutAttributes)
Definition NetAnalytics.cpp:158
FName GetNetDriverName() const
Definition NetAnalytics.h:376
FNetAnalyticsAggregator()=delete
NETCORE_API void SendAnalytics()
Definition NetAnalytics.cpp:140
NETCORE_API void InitConfig()
Definition NetAnalytics.cpp:77
NETCORE_API void SetAnalyticsAppender(FAnalyticsAppender AppenderFunction)
Definition NetAnalytics.cpp:153
Definition IAnalyticsProvider.h:52
Definition Array.h:670
Definition Atomic.h:538
Definition UnrealString.h.inl:34
Definition Queue.h:48
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SharedPointer.h:1295
Definition AnalyticsEventAttribute.h:48
Definition NetAnalytics.h:102
Definition NetAnalytics.h:307
void operator()(FNetAnalyticsData *Data)
Definition NetAnalytics.h:308
Definition NetAnalytics.h:110
NETCORE_API FNetAnalyticsData()
Definition NetAnalytics.cpp:18
virtual void SendAnalytics()=0
FNetAnalyticsAggregator * Aggregator
Definition NetAnalytics.h:116
virtual NETCORE_API ~FNetAnalyticsData()
virtual NETCORE_API void InternalSendAnalytics()
Definition NetAnalytics.cpp:25
virtual void NotifyFinalRelease()
Definition NetAnalytics.h:141
Definition UnrealTypeTraits.h:351
Definition NetAnalytics.h:155
GENERATE_MEMBER_FUNCTION_CHECK(CommitAnalytics, void,, TDataStruct &)
void CommitAnalytics(TDataStruct &AnalyticsVars)
Definition NetAnalytics.h:165
Definition UnrealTypeTraits.h:40