UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SavePackageUtilities.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "Containers/Set.h"
9#include "Memory/MemoryView.h"
10#include "Misc/FileHelper.h"
15#include "UObject/NameTypes.h"
16#include "UObject/Package.h"
18#include "UObject/ObjectPtr.h"
19#include "UObject/SavePackage.h"
21
22// This file contains private utilities shared by UPackage::Save and UPackage::Save2
23
24class FCbFieldView;
25class FCbWriter;
26class FPackagePath;
27class FSaveContext;
29class IPackageWriter;
30class ITargetPlatform;
31enum class ESavePackageResult;
32enum class ESaveRealm : uint32;
33struct FIoHash;
34
35// Save Time trace
36#if UE_TRACE_ENABLED && !UE_BUILD_SHIPPING
38#define SCOPED_SAVETIMER(TimerName) TRACE_CPUPROFILER_EVENT_SCOPE_ON_CHANNEL(TimerName, SaveTimeChannel)
39#define SCOPED_SAVETIMER_TEXT(TimerName) TRACE_CPUPROFILER_EVENT_SCOPE_TEXT_ON_CHANNEL(TimerName, SaveTimeChannel)
40#else
41#define SCOPED_SAVETIMER(TimerName)
42#define SCOPED_SAVETIMER_TEXT(TimerName)
43#endif
44
46{
47 void operator()(uint8* Ptr) const
48 {
49 if (Ptr)
50 {
51 FMemory::Free(Ptr);
52 }
53 }
54};
56
58{
59 None = 0
60};
62
64{
67
69
70private:
71 // The package being saved
72 UPackage* SavedPackage = nullptr;
73};
74
79
80
117
118// Currently we only expect to store up to 2 files in this, so set the inline capacity to double of this
120
126{
132 static void SortImports(FLinkerSave* Linker);
133};
134
140{
146 static void SortExports(FLinkerSave* Linker);
147};
148
149// Utility functions used by both UPackage::Save and/or UPackage::Save2
151{
152
153extern const FName NAME_World;
154extern const FName NAME_Level;
156
157void SaveThumbnails(UPackage* InOuter, FLinkerSave* Linker, FStructuredArchive::FSlot Slot);
158
170ESavePackageResult AppendAdditionalData(FLinkerSave& Linker, int64& InOutDataStartOffset, FSavePackageContext* SavePackageContext);
171
173ESavePackageResult CreatePayloadSidecarFile(FLinkerSave& Linker, const FPackagePath& PackagePath, const bool bSaveToMemory,
174 FSavePackageOutputFileArray& AdditionalPackageFiles, FSavePackageContext* SavePackageContext);
175
177void SaveWorldLevelInfo(UPackage* InOuter, FLinkerSave* Linker, FStructuredArchive::FRecord Record);
182
190
191void WriteToFile(const FString& Filename, const uint8* InDataPtr, int64 InDataSize);
194
195template <typename HashBuilderType>
196bool TryHashFile(FStringView Filename, HashBuilderType& Builder, int64 Offset = 0, int64 Size = -1);
197bool TryHashFile(FStringView Filename, FIoHash& OutHash, int64 Offset = 0, int64 Size = -1);
198
200
202{
203 None = 0,
204 CheckRecursive = 1 << 1,
206
207};
209
210#if WITH_EDITORONLY_DATA
212
215 TFunctionRef<UE::SavePackageUtilities::EEditorOnlyObjectResult(const UObject*)> LookupInCache,
216 TFunctionRef<void(const UObject*, bool)> AddToCache);
218#endif
219
221
222} // namespace UE::SavePackageUtilities
223
224#if ENABLE_COOK_STATS
226{
227 static int32 NumPackagesSaved;
228 static double SavePackageTimeSec;
230 static double TagPackageExportsTimeSec;
231 static double FullyLoadLoadersTimeSec;
232 static double ResetLoadersTimeSec;
235 static double SerializeImportsTimeSec;
237 static double SerializeExportsTimeSec;
238 static double SerializeBulkDataTimeSec;
239 static double AsyncWriteTimeSec;
240 static double MBWritten;
243 static FCookStatsManager::FAutoRegisterCallback RegisterCookStats;
244 static void AddSavePackageStats(FCookStatsManager::AddStatFuncRef AddStat);
246};
247#endif
248
249
251// Inline implementations
253
254
256{
257
258template <typename HashBuilderType>
259bool TryHashFile(FStringView Filename, HashBuilderType& Builder, int64 Offset, int64 Size)
260{
261 return FFileHelper::LoadFileInBlocks(Filename, [&Builder](FMemoryView Block)
262 {
263 Builder.Update(Block);
264 }, Offset, Size);
265}
266
267}
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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
ESavePackageResult
Definition Package.h:74
ESaveRealm
Definition SaveContext.h:82
EAsyncWriteOptions
Definition SavePackageUtilities.h:58
TUniquePtr< uint8, FLargeMemoryDelete > FLargeMemoryPtr
Definition SavePackageUtilities.h:55
#define UE_TRACE_CHANNEL_EXTERN(ChannelName,...)
Definition Trace.h:448
EObjectMark
Definition UObjectMarks.h:46
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Offset
Definition VulkanMemory.cpp:4033
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 CompactBinary.h:610
Definition CompactBinaryWriter.h:68
Definition LinkerSave.h:48
Definition NameTypes.h:617
Definition PackagePath.h:89
Definition UnrealType.h:174
Definition SaveContext.h:588
Definition SavePackage.h:226
Definition StructuredArchiveSlots.h:144
Definition StructuredArchiveSlots.h:52
Definition PackageWriter.h:41
Definition ArrayView.h:139
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
Definition Object.h:95
Definition Package.h:216
Definition Linker.cpp:38
Definition PackageHarvester.cpp:207
void HarvestCookRuntimeDependencies(FObjectSaveContextData &Data, UObject *HarvestReferencesFrom)
void AsyncWriteFile(FLargeMemoryPtr Data, const int64 DataSize, const TCHAR *Filename, EAsyncWriteOptions Options, TArrayView< const FFileRegion > InFileRegions)
Definition SavePackageUtilities.cpp:561
void GetCDOSubobjects(UObject *CDO, TArray< UObject * > &Subobjects)
Definition SavePackageUtilities.cpp:590
const FName NAME_PrestreamPackage("PrestreamPackage")
Definition SavePackageUtilities.h:155
EEditorOnlyObjectFlags
Definition SavePackageUtilities.h:202
ESavePackageResult FinalizeTempOutputFiles(const FPackagePath &PackagePath, const FSavePackageOutputFileArray &OutputFiles, const FDateTime &FinalTimeStamp)
Definition SavePackageUtilities.cpp:437
const FName NAME_Level("Level")
Definition SavePackageUtilities.h:154
void FindMostLikelyCulprit(const TArray< UObject * > &BadObjects, FSaveContext &SaveContext, ESaveRealm HarvestedRealm, UObject *&OutMostLikelyCulprit, UObject *&OutReferencer, const FProperty *&OutReferencerProperty, bool &OutIsCulpritArchetype, FString &OutDiagnosticText)
Definition SavePackageUtilities.cpp:339
void WriteToFile(const FString &Filename, const uint8 *InDataPtr, int64 InDataSize)
Definition SavePackageUtilities.cpp:534
const FName NAME_World("World")
Definition SavePackageUtilities.h:153
EObjectMark GetExcludedObjectMarksForTargetPlatform(const class ITargetPlatform *TargetPlatform)
Definition SavePackageUtilities.cpp:298
Definition SavePackageUtilities.h:76
FCanSkipEditorReferencedPackagesWhenCooking()
Definition SavePackageUtilities.cpp:1275
Definition DateTime.h:76
static CORE_API bool LoadFileInBlocks(FStringView Filename, TFunctionRef< void(FMemoryView)> BlockVisitor, int64 Offset=0, int64 Size=-1, uint32 Flags=0, int64 BlockSize=0)
Definition FileHelper.cpp:98
Definition IoHash.h:33
Definition SavePackageUtilities.h:46
void operator()(uint8 *Ptr) const
Definition SavePackageUtilities.h:47
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition SavePackageUtilities.h:140
static void SortExports(FLinkerSave *Linker)
Definition SavePackageUtilities.cpp:1133
Definition SavePackageUtilities.h:126
static void SortImports(FLinkerSave *Linker)
Definition SavePackageUtilities.cpp:1086
Definition ObjectSaveContext.h:70
Definition SavePackageUtilities.h:83
FString TempFilePath
Definition SavePackageUtilities.h:107
FSavePackageOutputFile(const FString &InTargetPath, FLargeMemoryPtr &&MemoryBuffer, const TArray< FFileRegion > &InFileRegions, int64 InDataSize)
Definition SavePackageUtilities.h:85
FSavePackageOutputFile(const FString &InTargetPath, const FString &InTempFilePath, int64 InDataSize)
Definition SavePackageUtilities.h:95
int64 DataSize
Definition SavePackageUtilities.h:115
FLargeMemoryPtr FileMemoryBuffer
Definition SavePackageUtilities.h:110
FString TargetPath
Definition SavePackageUtilities.h:104
TArray< FFileRegion > FileRegions
Definition SavePackageUtilities.h:112
Definition SavePackageUtilities.h:64
bool bSavingConcurrent
Definition SavePackageUtilities.h:68