UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
PackageWriter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Async/Future.h"
6#include "Containers/Set.h"
8#include "IO/IoDispatcher.h"
9#include "IO/IoHash.h"
12#include "Misc/DateTime.h"
13#include "Misc/EnumClassFlags.h"
14#include "Misc/Optional.h"
15#include "Misc/SecureHash.h"
18#include "Templates/UniquePtr.h"
19
21class FCbObject;
22class FCbObjectView;
26class UObject;
27namespace UE::Cook { class IDeterminismHelper; }
29struct FSavePackageArgs;
31
33{
34 Success,
35 Error,
36 Timeout,
37};
38
41{
42public:
43 virtual ~IPackageWriter() = default;
44
46 {
53
58 bool bIgnoreHeaderDiffs = false;
59
64 bool bDeterminismDebug = false;
65 };
66
70 {
71 return FCapabilities();
72 }
73
74 // Events the PackageWriter receives
80
85 virtual void BeginPackage(const FBeginPackageInfo& Info) = 0;
86
92 enum class EWriteOptions
93 {
94 None = 0,
95 WritePackage = 0x01,
96 WriteSidecars = 0x02,
98 ComputeHash = 0x04,
99 SaveForDiff = 0x08,
100 };
101 enum class ECommitStatus
102 {
103 Success,
104 Canceled,
106 Error,
108 };
127
131
133 {
137 uint64 HeaderSize = 0;
139 uint16 MultiOutputIndex = 0;
140 };
141
148
167
170 virtual void WriteBulkData(const FBulkDataInfo& Info, const FIoBuffer& BulkData, const TArray<FFileRegion>& FileRegions) = 0;
171
173 {
176 FString Filename;
178 uint16 MultiOutputIndex = 0;
179 };
180
183
185 {
188 uint16 MultiOutputIndex = 0;
189 };
191 virtual void WriteLinkerAdditionalData(const FLinkerAdditionalDataInfo& Info, const FIoBuffer& Data, const TArray<FFileRegion>& FileRegions) = 0;
192
195 {
196 return 0;
197 }
198
200 {
202 uint16 MultiOutputIndex = 0;
203 };
205 virtual void WritePackageTrailer(const FPackageTrailerInfo& Info, const FIoBuffer& Data) = 0;
206
209
212
221
223 virtual bool IsPreSaveCompleted() const
224 {
225 return false;
226 }
227
230 {
231 return nullptr;
232 }
233};
234
236
253
315
318{
319public:
320 virtual ~ICookedPackageWriter() = default;
321
327
329 {
330 PackageFileSummary,
331 ZenPackageSummary
332 };
333
335 {
337 bool bDiffModeSupported = false;
338
340 bool bReadOnly = false;
341
347 bool bOverridesPackageModificationStatus = false;
348
350 bool bOplogAttachments = false;
351
353 bool bIgnorePathLengthLimits = false;
354
356 EPackageHeaderFormat HeaderFormat = EPackageHeaderFormat::PackageFileSummary;
357 };
358
362 {
363 return FCookCapabilities();
364 }
365
368 {
369 return FDateTime::MaxValue();
370 }
371
373 {
374 return this;
375 }
376
378 {
380 bool bReferencesGame = false;
381 bool bReferencesEngine = false;
382 };
383
385 {
387 {
389 CookOnTheFlyMode
390 };
391
393 ECookMode CookMode = CookByTheBookMode;
394 bool bFullBuild = true;
395 UE_DEPRECATED(5.6, "Use bLegacyIterativeSharedBuild")
396 bool bIterateSharedBuild = false;
397 bool bLegacyIterativeSharedBuild = false;
398 bool bWorkerOnSharedSandbox = false;
399 };
400
404
410 virtual void BeginCook(const FCookInfo& Info) = 0;
411
414 virtual void EndCook(const FCookInfo& Info) = 0;
415
421 virtual TUniquePtr<FAssetRegistryState> LoadPreviousAssetRegistry() = 0;
422
427 virtual FCbObject GetOplogAttachment(FName PackageName, FUtf8StringView AttachmentKey) = 0;
428
433 virtual void GetOplogAttachments(TArrayView<FName> PackageNames,
435 TUniqueFunction<void(FName PackageName, FUtf8StringView AttachmentKey, FCbObject&& Attachment)>&& Callback) = 0;
436
443 virtual void GetBaseGameOplogAttachments(TArrayView<FName> PackageNames,
445 TUniqueFunction<void(FName PackageName, FUtf8StringView AttachmentKey, FCbObject&& Attachment)>&& Callback) = 0;
446
451 virtual ECommitStatus GetCommitStatus(FName PackageName) = 0;
452
456 virtual void RemoveCookedPackages(TArrayView<const FName> PackageNamesToRemove) = 0;
457
461 virtual void RemoveCookedPackages() = 0;
462
464 {
466 bool bIncrementallyUnmodified = false;
467 bool bPreviouslyCooked = false;
468 bool bInOutShouldIncrementallySkip = false;
469 };
477 UE_DEPRECATED(5.4, "No longer called; override UpdatePackageModifiedStatus instead")
478 virtual void UpdatePackageModificationStatus(FName PackageName, bool bIncrementallyUnmodified,
479 bool& bInOutShouldIncrementallySkip)
480 {
481 }
482
484 {
485 void operator()(void* Ptr) const
486 {
487 FMemory::Free(Ptr);
488 }
489 };
490
500 {
501 // The subclass must override this method if it returns bDiffModeSupported=true in GetCookCapabilities
503 return false;
504 }
507 {
508 // The subclass must override this method if it returns bDiffModeSupported=true in GetCookCapabilities
510 }
511
513 // Helper callback type for Writers that need to send the message on to UCookOnTheFlyServer
514 UE_DEPRECATED(5.7, "Use ICookedPackageWriterCookerInterface.BeginCacheForCookedPlatformData instead.")
516 UE_DEPRECATED(5.7, "Use ICookedPackageWriterCookerInterface.RegisterDeterminismHelper instead.")
517 typedef TUniqueFunction<void(UObject* SourceObject,
519
525
527 virtual void UpdateSaveArguments(FSavePackageArgs& SaveArgs)
528 {
529 }
532 {
533 return false;
534 }
542
544 virtual bool TryReadMPCookMessageForPackage(FName PackageName, FCbObjectView Message) = 0;
545
548 {
549 return nullptr;
550 }
551
558};
559
561{
562 switch (Value)
563 {
565 return "AppendToExports";
567 return "Standard";
569 return "Mmap";
571 return "Optional";
573 return "NumTypes";
574 default:
575 checkNoEntry();
576 return "Unknown";
577 }
578
579}
#define checkNoEntry()
Definition AssertionMacros.h:316
#define unimplemented()
Definition AssertionMacros.h:321
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::ANSICHAR ANSICHAR
An ANSI character. Normally a signed type.
Definition Platform.h:1131
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
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
const TCHAR * LexToString(EAnalyticsRecordEventMode Mode)
Definition IAnalyticsProvider.cpp:5
const bool
Definition NetworkReplayStreaming.h:178
EPackageWriterResult
Definition PackageWriter.h:33
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AssetRegistryState.h:158
Definition CompactBinary.h:1025
Definition CompactBinary.h:1392
Definition CompositeBuffer.h:27
Definition IoBuffer.h:15
Definition IoChunkId.h:64
static CORE_API const FIoChunkId InvalidChunkId
Definition IoChunkId.h:66
Definition LargeMemoryWriter.h:17
!it would be cool if these were implemented as subclasses of
Definition SecureHash.h:58
Definition NameTypes.h:617
Definition UnrealType.h:3087
Definition RefCounting.h:283
Definition PackageWriter.h:318
virtual void UpdateSaveArguments(FSavePackageArgs &SaveArgs)
Definition PackageWriter.h:527
virtual void SetCooker(UE::PackageWriter::Private::ICookerInterface *CookerInterface)=0
virtual ICookedPackageWriter * AsCookedPackageWriter() override
Definition PackageWriter.h:372
virtual ~ICookedPackageWriter()=default
virtual void UpdatePackageModifiedStatus(FUpdatePackageModifiedStatusContext &Context)
Definition PackageWriter.h:474
virtual FCookCapabilities GetCookCapabilities() const
Definition PackageWriter.h:361
virtual FDateTime GetPreviousCookTime() const
Definition PackageWriter.h:367
virtual void CompleteExportsArchiveForDiff(FPackageInfo &Info, FLargeMemoryWriter &ExportsArchive)
Definition PackageWriter.h:506
virtual TFuture< FCbObject > WriteMPCookMessageForPackage(FName PackageName)=0
EPackageHeaderFormat
Definition PackageWriter.h:329
virtual TMap< FName, TRefCountPtr< FPackageHashes > > & GetPackageHashes()=0
virtual IPackageStoreWriter * AsPackageStoreWriter()
Definition PackageWriter.h:547
virtual bool IsAnotherSaveNeeded(FSavePackageResultStruct &PreviousResult, FSavePackageArgs &SaveArgs)
Definition PackageWriter.h:531
virtual bool GetPreviousCookedBytes(const FPackageInfo &Info, FPreviousCookedBytesData &OutData)
Definition PackageWriter.h:499
virtual bool TryReadMPCookMessageForPackage(FName PackageName, FCbObjectView Message)=0
Definition PackageWriter.h:41
virtual void WriteAdditionalFile(const FAdditionalFileInfo &Info, const FIoBuffer &FileData)=0
virtual int64 GetExportsFooterSize()
Definition PackageWriter.h:194
virtual ~IPackageWriter()=default
virtual bool IsPreSaveCompleted() const
Definition PackageWriter.h:223
EWriteOptions
Definition PackageWriter.h:93
virtual void WriteBulkData(const FBulkDataInfo &Info, const FIoBuffer &BulkData, const TArray< FFileRegion > &FileRegions)=0
virtual void BeginPackage(const FBeginPackageInfo &Info)=0
ECommitStatus
Definition PackageWriter.h:102
virtual void WritePackageData(const FPackageInfo &Info, FLargeMemoryWriter &ExportsArchive, const TArray< FFileRegion > &FileRegions)=0
virtual void WriteLinkerAdditionalData(const FLinkerAdditionalDataInfo &Info, const FIoBuffer &Data, const TArray< FFileRegion > &FileRegions)=0
virtual void WritePackageTrailer(const FPackageTrailerInfo &Info, const FIoBuffer &Data)=0
virtual FCapabilities GetCapabilities() const
Definition PackageWriter.h:69
virtual TUniquePtr< FLargeMemoryWriter > CreateLinkerArchive(FName PackageName, UObject *Asset, uint16 MultiOutputIndex)=0
virtual ICookedPackageWriter * AsCookedPackageWriter()
Definition PackageWriter.h:229
virtual void RegisterDeterminismHelper(UObject *SourceObject, const TRefCountPtr< UE::Cook::IDeterminismHelper > &DeterminismHelper)
Definition PackageWriter.h:217
virtual void CommitPackage(FCommitPackageInfo &&Info)=0
virtual TUniquePtr< FLargeMemoryWriter > CreateLinkerExportsArchive(FName PackageName, UObject *Asset, uint16 MultiOutputIndex)=0
Definition ArrayView.h:139
Definition Array.h:670
Definition Future.h:393
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition FunctionFwd.h:19
Definition UniquePtr.h:107
Definition PackageWriter.h:301
virtual void WriteFileOnCookDirector(const FWriteFileData &FileData, FMD5 &AccumulatedHash, const TRefCountPtr< FPackageHashes > &PackageHashes, IPackageWriter::EWriteOptions WriteOptions)=0
virtual void RegisterDeterminismHelper(ICookedPackageWriter *PackageWriter, UObject *SourceObject, const TRefCountPtr< UE::Cook::IDeterminismHelper > &DeterminismHelper)=0
virtual EPackageWriterResult CookerBeginCacheForCookedPlatformData(FBeginCacheForCookedPlatformDataInfo &Info)=0
Definition Object.h:95
Definition CookOnTheFly.h:19
Definition PackageWriter.h:255
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition DateTime.h:76
static FDateTime MaxValue()
Definition DateTime.h:656
Definition Guid.h:109
Definition IoHash.h:33
Definition SecureHash.h:133
static FORCENOINLINE CORE_API void Free(void *Original)
Definition UnrealMemory.cpp:685
Definition PackageWriter.h:239
FMD5Hash PackageHash
Definition PackageWriter.h:244
TFuture< int > CompletionFuture
Definition PackageWriter.h:251
TMap< FIoChunkId, FIoHash > ChunkHashes
Definition PackageWriter.h:241
Definition PackageStore.h:121
Definition SavePackage.h:63
Definition Package.h:130
Definition PackageWriter.h:335
Definition PackageWriter.h:385
ECookMode
Definition PackageWriter.h:387
@ CookByTheBookMode
Definition PackageWriter.h:388
TOptional< FReferencedPluginsInfo > ReferencedPlugins
Definition PackageWriter.h:392
Definition PackageWriter.h:484
void operator()(void *Ptr) const
Definition PackageWriter.h:485
int64 Size
Definition PackageWriter.h:494
int64 HeaderSize
Definition PackageWriter.h:495
TUniquePtr< uint8, FDeleteByFree > Data
Definition PackageWriter.h:493
int64 StartOffset
Definition PackageWriter.h:496
Definition PackageWriter.h:378
TSet< FString > ReferencedPlugins
Definition PackageWriter.h:379
FName PackageName
Definition PackageWriter.h:465
Definition PackageWriter.h:173
FString Filename
Definition PackageWriter.h:176
FName PackageName
Definition PackageWriter.h:175
Definition PackageWriter.h:76
FString LooseFilePath
Definition PackageWriter.h:78
FName PackageName
Definition PackageWriter.h:77
Definition PackageWriter.h:150
FName PackageName
Definition PackageWriter.h:161
EType
Definition PackageWriter.h:152
@ AppendToExports
Definition PackageWriter.h:153
@ Mmap
Definition PackageWriter.h:155
@ Optional
Definition PackageWriter.h:156
@ BulkSegment
Definition PackageWriter.h:154
@ NumTypes
Definition PackageWriter.h:157
FString LooseFilePath
Definition PackageWriter.h:163
Definition PackageWriter.h:46
bool bDeterminismDebug
Definition PackageWriter.h:64
bool bIgnoreHeaderDiffs
Definition PackageWriter.h:58
bool bDeclareRegionForEachAdditionalFile
Definition PackageWriter.h:52
Definition PackageWriter.h:88
FCbObject Value
Definition PackageWriter.h:90
FUtf8StringView Key
Definition PackageWriter.h:89
Definition PackageWriter.h:110
FName PackageName
Definition PackageWriter.h:111
PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition PackageWriter.h:125
EWriteOptions WriteOptions
Definition PackageWriter.h:117
FIoHash PackageHash
Definition PackageWriter.h:112
ECommitStatus Status
Definition PackageWriter.h:116
FGuid PackageGuid
Definition PackageWriter.h:114
TArray< FCommitAttachmentInfo > Attachments
Definition PackageWriter.h:115
PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition PackageWriter.h:119
Definition PackageWriter.h:185
FName PackageName
Definition PackageWriter.h:187
Definition PackageWriter.h:133
FName PackageName
Definition PackageWriter.h:135
FString LooseFilePath
Definition PackageWriter.h:136
Definition PackageWriter.h:200
FName PackageName
Definition PackageWriter.h:201
Definition Optional.h:131
TConstArrayView< UObject * > SaveableObjects
Definition PackageWriter.h:266
const ITargetPlatform * TargetPlatform
Definition PackageWriter.h:265
Definition PackageWriter.h:276
TArray< FFileRegion > Regions
Definition PackageWriter.h:279
FCompositeBuffer Buffer
Definition PackageWriter.h:278
FString Filename
Definition PackageWriter.h:277