UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AsyncLoadingTests_Shared.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "UObject/Object.h"
8#include "UObject/ObjectPtr.h"
10#include "AsyncLoadingTests_Shared.generated.h"
11
12UCLASS()
14{
16
17public:
18 UPROPERTY()
19 TSoftObjectPtr<UObject> SoftReference;
20
21 UPROPERTY()
22 TObjectPtr<UObject> HardReference;
23
24 // Those delegates allow to easily change behavior between tests
25 // Avoid using thread-safe delegates since calling them currently is an exclusive lock and can cause deadlocks in the test when serialize is multithreaded.
26 // Registration to these delegates happens safely when the test begins before threads are involved.
29
32
34 static FOnIsReadyForAsyncPostLoadDelegate OnIsReadyForAsyncPostLoad;
35
38
39 virtual void PostLoad() override
40 {
41 Super::PostLoad();
42
43 OnPostLoad.ExecuteIfBound(this);
44 }
45
46 virtual void Serialize(FArchive& Ar) override
47 {
48 Super::Serialize(Ar);
49
50 OnSerialize.ExecuteIfBound(Ar, this);
51 }
52
53 virtual bool IsReadyForAsyncPostLoad() const override
54 {
55 if (OnIsReadyForAsyncPostLoad.IsBound())
56 {
57 return OnIsReadyForAsyncPostLoad.Execute(this);
58 }
59
60 return Super::IsReadyForAsyncPostLoad();
61 }
62
63 virtual bool IsPostLoadThreadSafe() const override
64 {
65 if (OnIsPostLoadThreadSafe.IsBound())
66 {
67 return OnIsPostLoadThreadSafe.Execute(this);
68 }
69
70 return Super::IsPostLoadThreadSafe();
71 }
72};
73
74#if WITH_DEV_AUTOMATION_TESTS
75
77{
78private:
80
81 TArray<FString> PackageNames;
82 std::atomic<uint32> PackageIndex;
83public:
84 static constexpr const TCHAR* ObjectName = TEXT("TestObject");
85 static constexpr const TCHAR* PackagePath1 = TEXT("/Engine/LoadingTestsScope_Package1");
86 static constexpr const TCHAR* ObjectPath1 = TEXT("/Engine/LoadingTestsScope_Package1.TestObject");
87 static constexpr const TCHAR* PackagePath2 = TEXT("/Engine/LoadingTestsScope_Package2");
88 static constexpr const TCHAR* ObjectPath2 = TEXT("/Engine/LoadingTestsScope_Package2.TestObject");
89 static constexpr const TCHAR* PackagePath3 = TEXT("/Engine/LoadingTestsScope_Package3");
90 static constexpr const TCHAR* ObjectPath3 = TEXT("/Engine/LoadingTestsScope_Package3.TestObject");
91
92 UPackage* Package1 = nullptr;
93 UPackage* Package2 = nullptr;
94 UPackage* Package3 = nullptr;
95
96 UAsyncLoadingTests_Shared* Object1 = nullptr;
97 UAsyncLoadingTests_Shared* Object2 = nullptr;
99
101 {
102 FString PackageName = FString::Printf(TEXT("/Engine/LoadingTestsScope_Package%u"), ++PackageIndex);
103 UPackage* Package = ::CreatePackage(*PackageName);
104 PackageNames.Add(PackageName);
105 return Package;
106 }
107
108 void CreateObjects();
110 void SavePackages();
111 void LoadObjects();
112 void CleanupObjects();
113 void GarbageCollect();
114 static void GarbageCollect(const TArray<FString>& PackageNames, FAutomationTestBase& AutomationTest);
115
118 {
119 // Just make sure the async loading queue is empty before beginning.
121
123
124 if (InMutateObjects)
125 {
126 InMutateObjects(*this);
127 }
128 else
129 {
131 }
132
133 SavePackages();
134
135 GarbageCollect();
136 }
137
138 virtual ~FLoadingTestsScope()
139 {
140 // Just to be sure in case the test fails, don't leave some pending loads behind
142
144 }
145};
146
148{
149public:
151protected:
152 bool CanRunInEnvironment(const FString& TestParams, FString* OutReason, bool* OutWarn) const override
153 {
154 ELoaderType LoaderType = GetLoaderType();
155 if (LoaderType != ELoaderType::ZenLoader)
156 {
157 if (OutReason)
158 {
159 *OutReason = FString::Printf(TEXT("Test %s is for ZenLoader only. Cannot run on non-compliant loader currently active: %s"), *GetTestName(), LexToString(LoaderType));
160 }
161 return false;
162 }
163
164 return true;
165 }
166};
167
168#endif // WITH_DEV_AUTOMATION_TESTS
169
170namespace LoadingTestsUtils
171{
172 extern bool IsAssetSuitableForTests(const FAssetData& AssetData);
173}
void FlushAsyncLoading(int32 RequestId)
Definition AsyncPackageLoader.cpp:313
ELoaderType(* GetLoaderType)()
Definition CoreGlobals.cpp:376
ELoaderType
Definition CoreGlobals.h:485
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const TCHAR * LexToString(EAnalyticsRecordEventMode Mode)
Definition IAnalyticsProvider.cpp:5
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
UPackage * CreatePackage(const TCHAR *PackageName)
Definition UObjectGlobals.cpp:1002
Definition Archive.h:1208
Definition AutomationTest.h:1594
virtual bool CanRunInEnvironment(const FString &TestParams, FString *OutReason, bool *OutWarn) const
Definition AutomationTest.h:1995
FString GetTestName() const
Definition AutomationTest.h:1620
CORE_API FAutomationTestBase(const FString &InName, const bool bInComplexTask)
Definition AutomationTest.cpp:154
Definition Array.h:670
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition DelegateSignatureImpl.inl:310
Definition AndroidPlatformMisc.h:14
Definition AsyncLoadingTests_Shared.h:14
virtual bool IsPostLoadThreadSafe() const override
Definition AsyncLoadingTests_Shared.h:63
virtual bool IsReadyForAsyncPostLoad() const override
Definition AsyncLoadingTests_Shared.h:53
virtual void Serialize(FArchive &Ar) override
Definition AsyncLoadingTests_Shared.h:46
Definition Object.h:95
Definition Package.h:216
Definition AutomationTest.cpp:34
Definition AsyncLoadingTests_Shared.cpp:131
bool IsAssetSuitableForTests(const FAssetData &AssetData)
Definition AsyncLoadingTests_Shared.cpp:132
Definition AssetData.h:162
Definition DelegateBase.h:179
Definition ObjectPtr.h:488
Definition SoftObjectPtr.h:174