UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnalyticsPropertyStore.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/AsyncWork.h"
6#include "Containers/Array.h"
7#include "Containers/Map.h"
9#include "CoreMinimal.h"
10#include "HAL/CriticalSection.h"
11#include "HAL/Platform.h"
13#include "Misc/DateTime.h"
14#include "Misc/EnumClassFlags.h"
15#include "Misc/Timespan.h"
20#include "Stats/Stats.h"
21#include "Templates/Function.h"
22#include "Templates/UniquePtr.h"
23
24class IFileHandle;
26
37{
38public:
42
47
54 ANALYTICS_API bool Create(const FString& Pathname, uint32 CapacityHint = 4 * 1024);
55
61 ANALYTICS_API bool Load(const FString& Pathname);
62
64 bool IsValid() const { return FileHandle != nullptr; }
65
66 //~ IAnalyticsPropertyStore interface
67 ANALYTICS_API virtual uint32 Num() const override;
68 ANALYTICS_API virtual bool Contains(const FString& Key) const override;
69 ANALYTICS_API virtual bool Remove(const FString& Key) override;
70 ANALYTICS_API virtual void RemoveAll() override;
71 ANALYTICS_API virtual EStatusCode Set(const FString& Key, int32 Value) override;
72 ANALYTICS_API virtual EStatusCode Set(const FString& Key, uint32 Value) override;
73 ANALYTICS_API virtual EStatusCode Set(const FString& Key, int64 Value) override;
74 ANALYTICS_API virtual EStatusCode Set(const FString& Key, uint64 Value) override;
75 ANALYTICS_API virtual EStatusCode Set(const FString& Key, float Value) override;
76 ANALYTICS_API virtual EStatusCode Set(const FString& Key, double Value) override;
77 ANALYTICS_API virtual EStatusCode Set(const FString& Key, bool Value) override;
78 ANALYTICS_API virtual EStatusCode Set(const FString& Key, const FString& Value, uint32 CharCountCapacityHint = 0) override;
79 ANALYTICS_API virtual EStatusCode Set(const FString& Key, const FDateTime& Value) override;
80 ANALYTICS_API virtual EStatusCode Set(const FString& Key, int32 Value, const TFunction<bool(const int32* /*Actual*/, const int32& /*Proposed*/)>& ConditionFn) override;
81 ANALYTICS_API virtual EStatusCode Set(const FString& Key, uint32 Value, const TFunction<bool(const uint32* /*Actual*/, const uint32& /*Proposed*/)>& ConditionFn) override;
82 ANALYTICS_API virtual EStatusCode Set(const FString& Key, int64 Value, const TFunction<bool(const int64* /*Actual*/, const int64& /*Proposed*/)>& ConditionFn) override;
83 ANALYTICS_API virtual EStatusCode Set(const FString& Key, uint64 Value, const TFunction<bool(const uint64* /*Actual*/, const uint64& /*Proposed*/)>& ConditionFn) override;
84 ANALYTICS_API virtual EStatusCode Set(const FString& Key, float Value, const TFunction<bool(const float* /*Actual*/, const float& /*Proposed*/)>& ConditionFn) override;
85 ANALYTICS_API virtual EStatusCode Set(const FString& Key, double Value, const TFunction<bool(const double* /*Actual*/, const double& /*Proposed*/)>& ConditionFn) override;
86 ANALYTICS_API virtual EStatusCode Set(const FString& Key, bool Value, const TFunction<bool(const bool* /*Actual*/, const bool& /*Proposed*/)>& ConditionFn) override;
87 ANALYTICS_API virtual EStatusCode Set(const FString& Key, const FString& Value, const TFunction<bool(const FString* /*Actual*/, const FString& /*Proposed*/)>& ConditionFn) override;
88 ANALYTICS_API virtual EStatusCode Set(const FString& Key, const FDateTime& Value, const TFunction<bool(const FDateTime* /*Actual*/, const FDateTime& /*Proposed*/)>& ConditionFn) override;
89 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(int32&)>& UpdateFn) override;
90 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(uint32&)>& UpdateFn) override;
91 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(int64&)>& UpdateFn) override;
92 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(uint64&)>& UpdateFn) override;
93 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(float&)>& UpdateFn) override;
94 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(double&)>& UpdateFn) override;
95 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(bool&)>& UpdateFn) override;
96 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(FString&)>& UpdateFn) override;
97 ANALYTICS_API virtual EStatusCode Update(const FString& Key, const TFunction<bool(FDateTime&)>& UpdateFn) override;
98 ANALYTICS_API virtual EStatusCode Get(const FString& Key, int32& OutValue) const override;
99 ANALYTICS_API virtual EStatusCode Get(const FString& Key, uint32& OutValue) const override;
100 ANALYTICS_API virtual EStatusCode Get(const FString& Key, int64& OutValue) const override;
101 ANALYTICS_API virtual EStatusCode Get(const FString& Key, uint64& OutValue) const override;
102 ANALYTICS_API virtual EStatusCode Get(const FString& Key, float& OutValue) const override;
103 ANALYTICS_API virtual EStatusCode Get(const FString& Key, double& OutValue) const override;
104 ANALYTICS_API virtual EStatusCode Get(const FString& Key, bool& OutValue) const override;
105 ANALYTICS_API virtual EStatusCode Get(const FString& Key, FString& OutValue) const override;
106 ANALYTICS_API virtual EStatusCode Get(const FString& Key, FDateTime& OutValue) const override;
107 ANALYTICS_API virtual void VisitAll(const TFunction<void(FAnalyticsEventAttribute&&)>& VisitFn) const override;
108
122 ANALYTICS_API virtual bool Flush(bool bAsync = false, const FTimespan& Timeout = FTimespan::MaxValue()) override;
123
124private:
125 enum class ETypeCode : uint8
126 {
127 I32 = 0x00,
128 U32 = 0x01,
129 I64 = 0x02,
130 U64 = 0x03,
131 Flt = 0x04,
132 Dbl = 0x05,
133 Bool = 0x06,
134 Date = 0x07,
135 Str = 0x08,
136 RawMask = 0x0F, // To extract the raw types above from the meta data below
137 Dead = 0x80, // Type for record that were moved or deleted.
138 };
139 FRIEND_ENUM_CLASS_FLAGS(ETypeCode)
140
141
142 class FFlushWorker : public FNonAbandonableTask
143 {
144 public:
145 FFlushWorker(FAnalyticsPropertyStore& InStore);
146 void DoWork();
147 TStatId GetStatId() const { return TStatId(); }
148 static const TCHAR* Name() { return TEXT("AnalyticsPropertyStoreWorker"); }
149 private:
152 };
153 friend class FFlushWorker;
154
155private:
156 ANALYTICS_API EStatusCode SetFixedSizeValueInternal(const FString& Key, ETypeCode TypeCode, const uint8* Value, uint32 Size);
157 ANALYTICS_API EStatusCode GetFixedSizeValueInternal(const FString& Key, ETypeCode TypeCode, uint8* OutValue, uint32 Size) const;
158 ANALYTICS_API EStatusCode SetStringValueInternal(const FString& Key, const FString& Value, uint32 CharCountCapacityHint = 0);
159 ANALYTICS_API EStatusCode GetStringValueInternal(const FString& Key, FString& OutValue) const;
160 ANALYTICS_API EStatusCode SetDateTimeValueInternal(const FString& Key, const FDateTime& Value);
161 ANALYTICS_API EStatusCode GetDateTimeValueInternal(const FString& Key, FDateTime& OutValue) const;
162 ANALYTICS_API void Defragment();
163 bool IsFixedSize(ETypeCode Type) const { return Type != ETypeCode::Str; }
164 bool IsDead(ETypeCode Type) const { return EnumHasAnyFlags(Type, ETypeCode::Dead); }
165 ETypeCode RawType(ETypeCode Type) const { return Type & ETypeCode::RawMask; }
166 ANALYTICS_API void FlushInternal(const TArray<uint8>& Data);
167 ANALYTICS_API void Reset();
168
169 template<typename T>
170 IAnalyticsPropertyStore::EStatusCode SetFixedSizeValueInternal(const FString& Key, ETypeCode TypeCode, T Value)
171 {
172 return SetFixedSizeValueInternal(Key, TypeCode, reinterpret_cast<const uint8*>(&Value), sizeof(Value));
173 }
174
175 template<typename T>
176 EStatusCode GetFixedSizeValueInternal(const FString& Key, ETypeCode TypeCode, T& OutValue) const
177 {
178 return GetFixedSizeValueInternal(Key, TypeCode, reinterpret_cast<uint8*>(&OutValue), sizeof(OutValue));
179 }
180
181private:
182 mutable FTransactionallySafeCriticalSection StoreLock;
183 TArray<uint8> StorageBuf;
184 FMemoryWriter StorageWriter;
185 mutable FMemoryReader StorageReader;
186 TMap<FString, uint32> NameOffsetMap;
187 TUniquePtr<IFileHandle> FileHandle;
188 bool bFragmented = false;
190 TArray<uint8> AsyncFlushDataCopy;
191};
192
193ENUM_CLASS_FLAGS(FAnalyticsPropertyStore::ETypeCode);
RAD_U32 U32
Definition egttypes.h:501
RAD_U64 U64
Definition egttypes.h:511
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
#define FRIEND_ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:17
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
::FCriticalSection FTransactionallySafeCriticalSection
Definition TransactionallySafeCriticalSection.h:16
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AnalyticsPropertyStore.h:37
virtual ANALYTICS_API EStatusCode Get(const FString &Key, int32 &OutValue) const override
Definition AnalyticsPropertyStore.cpp:570
virtual ANALYTICS_API ~FAnalyticsPropertyStore()
Definition AnalyticsPropertyStore.cpp:82
virtual ANALYTICS_API bool Contains(const FString &Key) const override
Definition AnalyticsPropertyStore.cpp:292
virtual ANALYTICS_API uint32 Num() const override
Definition AnalyticsPropertyStore.cpp:286
friend class FFlushWorker
Definition AnalyticsPropertyStore.h:153
FAnalyticsPropertyStore(FAnalyticsPropertyStore &&)=delete
FAnalyticsPropertyStore(const FAnalyticsPropertyStore &)=delete
bool IsValid() const
Definition AnalyticsPropertyStore.h:64
FAnalyticsPropertyStore & operator=(FAnalyticsPropertyStore &&)=delete
virtual ANALYTICS_API void VisitAll(const TFunction< void(FAnalyticsEventAttribute &&)> &VisitFn) const override
Definition AnalyticsPropertyStore.cpp:834
FAnalyticsPropertyStore & operator=(const FAnalyticsPropertyStore &)=delete
ANALYTICS_API FAnalyticsPropertyStore()
Definition AnalyticsPropertyStore.cpp:76
virtual ANALYTICS_API void RemoveAll() override
Definition AnalyticsPropertyStore.cpp:317
Definition MemoryReader.h:17
Definition MemoryWriter.h:101
Definition AsyncWork.h:663
Definition IAnalyticsPropertyStore.h:14
EStatusCode
Definition IAnalyticsPropertyStore.h:18
Definition GenericPlatformFile.h:117
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
GeometryCollection::Facades::FMuscleActivationData Data
Definition MuscleActivationConstraints.h:15
Type
Definition PawnAction_Move.h:11
const TCHAR * Name
Definition OodleDataCompression.cpp:30
FORCEINLINE void Store(const volatile T *Element, T Value)
Definition Atomic.h:89
Definition AnalyticsEventAttribute.h:48
Definition DateTime.h:76
Definition Timespan.h:76
static FTimespan MaxValue()
Definition Timespan.h:686
Definition LightweightStats.h:416