UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
VirtualizationSystem.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Array.h"
11#include "CoreTypes.h"
12#include "Delegates/Delegate.h"
15#include "IO/IoHash.h"
16#include "Misc/ConfigCacheIni.h"
17#include "Templates/Function.h"
18#include "Templates/UniquePtr.h"
20#include "UObject/NameTypes.h"
22
23class FPackagePath;
24class FText;
25class UObject;
27
28namespace UE::Virtualization
29{
30
48
63
74
89{
90public:
91 IPayloadProvider() = default;
92 virtual ~IPayloadProvider() = default;
93
99
102};
103
106{
112 enum class EStatus : int8
113 {
115 Error = -5,
117 ProcessDisabled = -4,
119 NoBackend = -3,
121 Invalid = -2,
123 Filtered = -1,
125 Pending = 0,
127 AlreadyExisted = 1,
129 Pushed = 2
130 };
131
132 FPushResult() = default;
133 ~FPushResult() = default;
134
136 {
138 }
139
144
146 {
148 }
149
151 {
153 }
154
156 {
157 return FPushResult(EStatus::Filtered, Reason);
158 }
159
164
166 {
168 }
169
171 bool WasPushed() const
172 {
173 return Status == EStatus::Pushed;
174 }
175
177 bool WasError() const
178 {
179 return Status < EStatus::Pending;
180 }
181
183 bool IsVirtualized() const
184 {
185 return Status > EStatus::Pending;
186 }
187
189 bool IsFiltered() const
190 {
191 if (Status == EStatus::Filtered)
192 {
193 // Quick sanity check, if the payload was filtered there must be a reason
194 check(FilterReason != EPayloadFilterReason::None);
195 return true;
196 }
197 else
198 {
199 return false;
200 }
201 }
202
205 {
206 return FilterReason;
207 }
208
209private:
210
212 : Status(InStatus)
213 {
214 check(Status != EStatus::Pending);
215 }
216
218 : Status(InStatus)
219 , FilterReason(InReason)
220 {
221 check(Status != EStatus::Pending);
222 check(FilterReason != EPayloadFilterReason::None);
223 }
224
225 EStatus Status = EStatus::Pending;
227};
228
236{
237 FPushRequest() = delete;
238 ~FPushRequest() = default;
239
248 : Identifier(InIdentifier)
249 , Payload(InPayload)
250 , Context(InContext)
251 {
252
253 }
254
263 : Identifier(InIdentifier)
264 , Payload(InPayload)
265 , Context(InContext)
266 {
267
268 }
269
278 : Identifier(InIdentifier)
279 , Provider(&InProvider)
280 , Context(InContext)
281 {
282
283 }
284
286 const FIoHash& GetIdentifier() const
287 {
288 return Identifier;
289 }
290
293 {
294 if (Provider != nullptr)
295 {
296 return Provider->GetPayloadSize(Identifier);
297 }
298 else
299 {
300 return Payload.GetCompressedSize();
301 }
302 }
303
306 {
307 if (Provider != nullptr)
308 {
309 return Provider->RequestPayload(Identifier);
310 }
311 else
312 {
313 return Payload;
314 }
315 }
316
318 const FString& GetContext() const
319 {
320 return Context;
321 }
322
324 {
325 Result = FPushResult();
326 }
327
329 {
330 Result = InResult;
331 }
332
333 const FPushResult& GetResult() const
334 {
335 return Result;
336 }
337
338private:
340 FIoHash Identifier;
341
343 FCompressedBuffer Payload;
344
346 IPayloadProvider* Provider = nullptr;
347
349 FString Context;
350
351 FPushResult Result;
352};
353
356{
357private:
358 enum class EStatus : int8
359 {
360 Error = -1,
361 Pending = 0,
362 Success = 1
363 };
364
365public:
367 : Identifier(InIdentifier)
368 {
369
370 }
371
372 const FIoHash& GetIdentifier() const
373 {
374 return Identifier;
375 }
376
378 {
379 return Payload;
380 }
381
382 bool IsSuccess() const
383 {
384 return Status == EStatus::Success;
385 }
386
387 void SetError()
388 {
389 Status = EStatus::Error;
390 Payload.Reset();
391 }
392
394 {
395 Payload = InPayload;
396 Status = Payload ? EStatus::Success : EStatus::Error;
397 }
398
400 {
401 Payload = MoveTemp(InPayload);
402 Status = Payload ? EStatus::Success : EStatus::Error;
403 }
404
405private:
406 FIoHash Identifier;
407 FCompressedBuffer Payload;
408 EStatus Status = EStatus::Pending;
409};
410
413{
416
419
424
426 double TimeTaken = 0.0;
427
432
433 /* Returns if the virtualization process succeeded or not */
434 bool WasSuccessful() const
435 {
436 return Errors.IsEmpty();
437 }
438
440 void AddError(const FText& ErrorMsg)
441 {
442 Errors.Add(ErrorMsg);
443 }
444
446 void AddError(FText&& ErrorMsg)
447 {
448 Errors.Add(MoveTemp(ErrorMsg));
449 }
450
453 {
454 return Errors.Num();
455 }
456
457};
458
461{
464
469
471 double TimeTaken = 0.0;
472
477
478 /* Returns if the rehydration process succeeded or not */
479 bool WasSuccessful() const
480 {
481 return Errors.IsEmpty();
482 }
483
485 void AddError(const FText& ErrorMsg)
486 {
487 Errors.Add(ErrorMsg);
488 }
489
491 void AddError(FText&& ErrorMsg)
492 {
493 Errors.Add(MoveTemp(ErrorMsg));
494 }
495
498 {
499 return Errors.Num();
500 }
501};
502
524
533
538
556
561CORE_API void Shutdown();
562
565{
566 None = 0,
569 Flush = 1 << 0
570};
571
573
579
595{
596public:
598 virtual ~IVirtualizationSystem() = default;
599
613 virtual bool Initialize(const FInitParams& InitParams) = 0;
614
616 CORE_API static bool IsInitialized();
617
620
626
628 virtual bool IsEnabled() const = 0;
629
631 virtual bool IsPushingEnabled(EStorageType StorageType) const = 0;
632
642
654 virtual bool AllowSubmitIfVirtualizationFailed() const = 0;
655
669 virtual bool PushData(TArrayView<FPushRequest> Requests, EStorageType StorageType) = 0;
670
684 bool PushData(FPushRequest Request, EStorageType StorageType)
685 {
686 return PushData(MakeArrayView(&Request, 1), StorageType);
687 }
688
705 bool PushData(const FIoHash& Id, const FCompressedBuffer& Payload, const FString& Context, EStorageType StorageType)
706 {
707 FPushRequest Request(Id, Payload, Context);
708 return PushData(MakeArrayView(&Request, 1), StorageType);
709 }
710
717 virtual bool PullData(TArrayView<FPullRequest> Requests) = 0;
718
727 {
728 FPullRequest Request(Id);
729
730 if (PullData(MakeArrayView(&Request, 1)))
731 {
732 return Request.GetPayload();
733 }
734 else
735 {
736 return FCompressedBuffer();
737 }
738 }
739
747 bool PullData(FPullRequest Request)
748 {
749 return PullData(MakeArrayView(&Request, 1));
750 }
751
764
783
796
814
816 virtual void DumpStats() const = 0;
817
818 using GetPayloadActivityInfoFuncRef = TFunctionRef<void(const FString& DebugName, const FString& ConfigName, const FPayloadActivityInfo& PayloadInfo)>;
819
822
825
827 virtual void GatherAnalytics(TArray<FAnalyticsEventAttribute>& Attributes) const =0;
828
829 //* Notification messages
840
843
845};
846
847namespace Private
848{
849
855{
856public:
859
861 virtual FName GetName() = 0;
862};
863
864} // namespace Private
865
873#define UE_REGISTER_VIRTUALIZATION_SYSTEM(SystemClass, SystemName) \
874 class FVirtualizationSystem##Factory : public Private::IVirtualizationSystemFactory \
875 { \
876 public: \
877 FVirtualizationSystem##Factory() { IModularFeatures::Get().RegisterModularFeature(FName("VirtualizationSystem"), this); }\
878 virtual ~FVirtualizationSystem##Factory() { IModularFeatures::Get().UnregisterModularFeature(FName("VirtualizationSystem"), this); } \
879 private: \
880 virtual TUniquePtr<IVirtualizationSystem> Create() override { return MakeUnique<SystemClass>(); } \
881 virtual FName GetName() override { return FName(#SystemName); } \
882 }; \
883 static FVirtualizationSystem##Factory FVirtualizationSystem##Factory##Instance;
884
886{
887
889{
890public:
907 virtual bool SyncPayloadSidecarFile(const FPackagePath& PackagePath) = 0;
908};
909
910} // namespace Experimental
911
912} // namespace UE::Virtualization
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition CompressedBuffer.h:50
CORE_API uint64 GetCompressedSize() const
Definition CompressedBuffer.cpp:1114
void Reset()
Definition CompressedBuffer.h:109
Definition ConfigCacheIni.h:566
Definition NameTypes.h:617
Definition PackagePath.h:89
Definition Text.h:385
Definition IModularFeature.h:12
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition AssetRegistryState.h:50
Definition DelegateSignatureImpl.inl:1029
Definition UniquePtr.h:107
virtual bool SyncPayloadSidecarFile(const FPackagePath &PackagePath)=0
Definition VirtualizationSystem.h:89
virtual FCompressedBuffer RequestPayload(const FIoHash &Identifier)=0
virtual uint64 GetPayloadSize(const FIoHash &Identifier)=0
Definition VirtualizationSystem.h:595
virtual EPayloadFilterReason FilterPayload(const UObject *Owner) const =0
virtual FOnNotification & GetNotificationEvent()=0
static CORE_API IVirtualizationSystem & Get()
Definition VirtualizationSystem.cpp:387
virtual ERehydrationResult TryRehydratePackages(TConstArrayView< FString > PackagePaths, uint64 PaddingAlignment, TArray< FText > &OutErrors, TArray< FSharedBuffer > &OutPackages, TArray< FRehydrationInfo > *OutInfo)=0
bool PushData(FPushRequest Request, EStorageType StorageType)
Definition VirtualizationSystem.h:684
FCompressedBuffer PullData(const FIoHash &Id)
Definition VirtualizationSystem.h:726
virtual FPayloadActivityInfo GetSystemStatistics() const =0
virtual bool IsPushingEnabled(EStorageType StorageType) const =0
virtual TArray< FBackendStats > GetBackendStatistics() const =0
virtual bool AllowSubmitIfVirtualizationFailed() const =0
virtual bool PullData(TArrayView< FPullRequest > Requests)=0
virtual EQueryResult QueryPayloadStatuses(TArrayView< const FIoHash > Ids, EStorageType StorageType, TArray< EPayloadStatus > &OutStatuses)=0
bool PushData(const FIoHash &Id, const FCompressedBuffer &Payload, const FString &Context, EStorageType StorageType)
Definition VirtualizationSystem.h:705
static CORE_API FName GetSystemName()
Definition VirtualizationSystem.cpp:382
virtual FRehydrationResult TryRehydratePackages(TConstArrayView< FString > PackagePaths, ERehydrationOptions Options)=0
virtual bool Initialize(const FInitParams &InitParams)=0
virtual bool PushData(TArrayView< FPushRequest > Requests, EStorageType StorageType)=0
virtual void GatherAnalytics(TArray< FAnalyticsEventAttribute > &Attributes) const =0
ENotification
Definition VirtualizationSystem.h:831
@ PushEndedNotification
Definition VirtualizationSystem.h:833
@ PullFailedNotification
Definition VirtualizationSystem.h:838
@ PullEndedNotification
Definition VirtualizationSystem.h:837
@ PushBegunNotification
Definition VirtualizationSystem.h:832
@ PullBegunNotification
Definition VirtualizationSystem.h:836
@ PushFailedNotification
Definition VirtualizationSystem.h:834
bool PullData(FPullRequest Request)
Definition VirtualizationSystem.h:747
virtual FVirtualizationResult TryVirtualizePackages(TConstArrayView< FString > PackagePaths, EVirtualizationOptions Options)=0
static CORE_API bool IsInitialized()
Definition VirtualizationSystem.cpp:377
virtual TUniquePtr< IVirtualizationSystem > Create()=0
Definition Object.h:95
Definition RobinHoodHashTable.h:18
Definition OverriddenPropertySet.cpp:45
Definition VirtualizationSystem.cpp:40
ERehydrationOptions
Definition VirtualizationTypes.h:99
EStorageType
Definition VirtualizationTypes.h:14
FAnalyticsRecordEvent & GetAnalyticsRecordEvent()
Definition VirtualizationSystem.cpp:371
EPayloadFilterReason
Definition VirtualizationTypes.h:69
EAnalyticsFlags
Definition VirtualizationSystem.h:565
EInitializationFlags
Definition VirtualizationTypes.h:109
void Shutdown()
Definition VirtualizationSystem.cpp:365
EQueryResult
Definition VirtualizationTypes.h:27
EVirtualizationOptions
Definition VirtualizationTypes.h:89
bool ShouldInitializePreSlate()
Definition VirtualizationSystem.cpp:357
ERehydrationResult
Definition VirtualizationTypes.h:60
Definition AnalyticsEventAttribute.h:48
Definition IoHash.h:33
Definition VirtualizationSystem.h:51
FString DebugName
Definition VirtualizationSystem.h:55
FString ConfigName
Definition VirtualizationSystem.h:53
FPayloadActivityInfo PayloadActivity
Definition VirtualizationSystem.h:61
EStorageType Type
Definition VirtualizationSystem.h:58
Definition VirtualizationSystem.h:510
FStringView ProjectName
Definition VirtualizationSystem.h:519
const FConfigFile & ConfigFile
Definition VirtualizationSystem.h:522
FInitParams(FStringView InProjectName, const FConfigFile &InConfigFile)
Definition VirtualizationSystem.h:511
Definition VirtualizationSystem.h:35
int64 PayloadCount
Definition VirtualizationSystem.h:37
int64 TotalBytes
Definition VirtualizationSystem.h:39
int64 CyclesSpent
Definition VirtualizationSystem.h:41
Definition VirtualizationSystem.h:33
FActivity Cache
Definition VirtualizationSystem.h:46
FActivity Pull
Definition VirtualizationSystem.h:44
FActivity Push
Definition VirtualizationSystem.h:45
Definition VirtualizationSystem.h:356
void SetPayload(FCompressedBuffer &&InPayload)
Definition VirtualizationSystem.h:399
void SetPayload(const FCompressedBuffer &InPayload)
Definition VirtualizationSystem.h:393
FPullRequest(const FIoHash &InIdentifier)
Definition VirtualizationSystem.h:366
const FIoHash & GetIdentifier() const
Definition VirtualizationSystem.h:372
const FCompressedBuffer & GetPayload() const
Definition VirtualizationSystem.h:377
bool IsSuccess() const
Definition VirtualizationSystem.h:382
void SetError()
Definition VirtualizationSystem.h:387
Definition VirtualizationSystem.h:236
void ResetResult()
Definition VirtualizationSystem.h:323
const FString & GetContext() const
Definition VirtualizationSystem.h:318
FPushRequest(const FIoHash &InIdentifier, IPayloadProvider &InProvider, FString &&InContext)
Definition VirtualizationSystem.h:277
const FIoHash & GetIdentifier() const
Definition VirtualizationSystem.h:286
const FPushResult & GetResult() const
Definition VirtualizationSystem.h:333
FCompressedBuffer GetPayload() const
Definition VirtualizationSystem.h:305
FPushRequest(const FIoHash &InIdentifier, const FCompressedBuffer &InPayload, const FString &InContext)
Definition VirtualizationSystem.h:247
FPushRequest(const FIoHash &InIdentifier, FCompressedBuffer &&InPayload, FString &&InContext)
Definition VirtualizationSystem.h:262
void SetResult(FPushResult InResult)
Definition VirtualizationSystem.h:328
uint64 GetPayloadSize() const
Definition VirtualizationSystem.h:292
Definition VirtualizationSystem.h:106
EPayloadFilterReason GetFilterReason() const
Definition VirtualizationSystem.h:204
static FPushResult GetAsError()
Definition VirtualizationSystem.h:135
static FPushResult GetAsProcessDisabled()
Definition VirtualizationSystem.h:140
static FPushResult GetAsNoBackend()
Definition VirtualizationSystem.h:145
bool IsFiltered() const
Definition VirtualizationSystem.h:189
bool IsVirtualized() const
Definition VirtualizationSystem.h:183
static FPushResult GetAsPushed()
Definition VirtualizationSystem.h:165
bool WasPushed() const
Definition VirtualizationSystem.h:171
EStatus
Definition VirtualizationSystem.h:113
bool WasError() const
Definition VirtualizationSystem.h:177
static FPushResult GetAsInvalid()
Definition VirtualizationSystem.h:150
static FPushResult GetAsFiltered(EPayloadFilterReason Reason)
Definition VirtualizationSystem.h:155
static FPushResult GetAsAlreadyExists()
Definition VirtualizationSystem.h:160
Definition VirtualizationSystem.h:66
uint64 RehydratedSize
Definition VirtualizationSystem.h:70
int32 NumPayloadsRehydrated
Definition VirtualizationSystem.h:72
uint64 OriginalSize
Definition VirtualizationSystem.h:68
Definition VirtualizationSystem.h:461
uint64 PostOperationSize
Definition VirtualizationSystem.h:476
uint64 PreOperationSize
Definition VirtualizationSystem.h:474
bool WasSuccessful() const
Definition VirtualizationSystem.h:479
void AddError(FText &&ErrorMsg)
Definition VirtualizationSystem.h:491
void AddError(const FText &ErrorMsg)
Definition VirtualizationSystem.h:485
TArray< FText > Errors
Definition VirtualizationSystem.h:463
int32 GetNumErrors() const
Definition VirtualizationSystem.h:497
TArray< FString > RehydratedPackages
Definition VirtualizationSystem.h:466
TArray< FString > CheckedOutPackages
Definition VirtualizationSystem.h:468
double TimeTaken
Definition VirtualizationSystem.h:471
Definition VirtualizationSystem.h:413
TArray< FText > DescriptionTags
Definition VirtualizationSystem.h:418
void AddError(const FText &ErrorMsg)
Definition VirtualizationSystem.h:440
uint64 PreOperationSize
Definition VirtualizationSystem.h:429
void AddError(FText &&ErrorMsg)
Definition VirtualizationSystem.h:446
double TimeTaken
Definition VirtualizationSystem.h:426
TArray< FString > VirtualizedPackages
Definition VirtualizationSystem.h:421
bool WasSuccessful() const
Definition VirtualizationSystem.h:434
TArray< FString > CheckedOutPackages
Definition VirtualizationSystem.h:423
TArray< FText > Errors
Definition VirtualizationSystem.h:415
uint64 PostOperationSize
Definition VirtualizationSystem.h:431
int32 GetNumErrors() const
Definition VirtualizationSystem.h:452