UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ChunkReferenceTracker.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
6#include "IBuildManifestSet.h"
7
8namespace BuildPatchServices
9{
15 {
16 public:
17 enum class ESortDirection : uint8
18 {
19 Ascending = 0,
21 };
22
23 public:
25
31 virtual TSet<FGuid> GetReferencedChunks() const = 0;
32
38 virtual int32 GetReferenceCount(const FGuid& ChunkId) const = 0;
39
45 virtual void SortByUseOrder(TArray<FGuid>& ChunkList, ESortDirection Direction) const = 0;
46
53 virtual TArray<FGuid> GetNextReferences(int32 Count, const TFunction<bool(const FGuid&)>& SelectPredicate) const = 0;
54
62
73 virtual bool PopReference(const FGuid& ChunkId) = 0;
74
75 // Return how many chunks are left to process.
76 virtual int32 GetRemainingChunkCount() const = 0;
77
78 // Return the ordered list we are consuming.
79 // copies the _remaining_ items!
81
82 // Returns the next usage index in _advancing order_ for the chunkid, or -1 if it won't
83 // be used again.
84 virtual int32 GetNextUsageForChunk(const FGuid& ChunkId, int32& OutLastUsageIndex) const = 0;
85
86 virtual int32 GetCurrentUsageIndex() const = 0;
87 };
88
93 {
94 public:
102 static IChunkReferenceTracker* Create(const IBuildManifestSet* Manifest, const TSet<FString>& FilesToConstruct);
103
111 };
112
113
117 namespace CustomChunkReferencesHelpers
118 {
126 {
128 // Create our full list of chunks, no dupes, just one reference per chunk in the correct order.
131 InstallManifest->GetFileList(AllFiles);
132 for (const FString& File : AllFiles)
133 {
134 const FFileManifest* NewFileManifest = InstallManifest->GetFileManifest(File);
135 if (NewFileManifest != nullptr)
136 {
137 for (const FChunkPart& ChunkPart : NewFileManifest->ChunkParts)
138 {
139 bool bWasAlreadyInSet = false;
140 AllChunks.Add(ChunkPart.Guid, &bWasAlreadyInSet);
141 if (!bWasAlreadyInSet)
142 {
143 ChunkReferences.Add(ChunkPart.Guid);
144 }
145 }
146 }
147 }
148 return ChunkReferences;
149 }
150
160 {
162 // Create our list of chunks, no dupes, just one reference per chunk which appears only in InstallManifest, and in the correct order of use.
166 CurrentManifest->GetDataList(OldChunks);
167 InstallManifest->GetFileList(AllFiles);
168 for (const FString& File : AllFiles)
169 {
170 const FFileManifest* NewFileManifest = InstallManifest->GetFileManifest(File);
171 if (NewFileManifest != nullptr)
172 {
173 for (const FChunkPart& ChunkPart : NewFileManifest->ChunkParts)
174 {
175 const bool bIsNewChunk = !OldChunks.Contains(ChunkPart.Guid);
176 if (bIsNewChunk)
177 {
178 bool bWasAlreadyInSet = false;
179 NewChunks.Add(ChunkPart.Guid, &bWasAlreadyInSet);
180 if (!bWasAlreadyInSet)
181 {
182 ChunkReferences.Add(ChunkPart.Guid);
183 }
184 }
185 }
186 }
187 }
188 return ChunkReferences;
189 }
190
199 {
201 // Create our full list of chunks, no dupes, just one reference per chunk in the correct order.
202 TArray<FString> TaggedFiles;
204 InstallManifest->GetTaggedFileList(InstallTagSet, TaggedFiles);
205 for (const FString& File : TaggedFiles)
206 {
207 const FFileManifest* NewFileManifest = InstallManifest->GetFileManifest(File);
208 if (NewFileManifest != nullptr)
209 {
210 for (const FChunkPart& ChunkPart : NewFileManifest->ChunkParts)
211 {
212 bool bWasAlreadyInSet = false;
213 TaggedChunks.Add(ChunkPart.Guid, &bWasAlreadyInSet);
214 if (!bWasAlreadyInSet)
215 {
216 ChunkReferences.Add(ChunkPart.Guid);
217 }
218 }
219 }
220 }
221 return ChunkReferences;
222 }
223
236 {
237 // Enumerate what is available in the current build.
238 TSet<FString> FilesInstalled;
241 CurrentManifest->GetTaggedFileList(CurrentTagSet, FilesInstalled);
242 CurrentManifest->GetChunksRequiredForFiles(FilesInstalled, ChunksRequired);
244
246 // Create our list of chunks, no dupes, just one reference per chunk which appears only in InstallManifest, and in the correct order of use.
247 TArray<FString> TaggedFiles;
249 InstallManifest->GetTaggedFileList(InstallTagSet, TaggedFiles);
250 for (const FString& File : TaggedFiles)
251 {
252 const FFileManifest* NewFileManifest = InstallManifest->GetFileManifest(File);
253 if (NewFileManifest != nullptr)
254 {
255 for (const FChunkPart& ChunkPart : NewFileManifest->ChunkParts)
256 {
257 const bool bIsNewChunk = !ChunksInstalled.Contains(ChunkPart.Guid);
258 if (bIsNewChunk)
259 {
260 bool bWasAlreadyInSet = false;
261 TaggedNewChunks.Add(ChunkPart.Guid, &bWasAlreadyInSet);
262 if (!bWasAlreadyInSet)
263 {
264 ChunkReferences.Add(ChunkPart.Guid);
265 }
266 }
267 }
268 }
269 }
270 return ChunkReferences;
271 }
272 }
273}
#define FORCEINLINE
Definition AndroidPlatform.h:140
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
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition ChunkReferenceTracker.h:93
Definition IBuildManifestSet.h:85
Definition ChunkReferenceTracker.h:15
virtual void SortByUseOrder(TArray< FGuid > &ChunkList, ESortDirection Direction) const =0
virtual bool PopReference(const FGuid &ChunkId)=0
virtual ~IChunkReferenceTracker()
Definition ChunkReferenceTracker.h:24
virtual void CopyOutOrderedUseList(TArray< FGuid > &OutUseList) const =0
virtual TArray< FGuid > SelectFromNextReferences(int32 Count, const TFunction< bool(const FGuid &)> &SelectPredicate) const =0
virtual TArray< FGuid > GetNextReferences(int32 Count, const TFunction< bool(const FGuid &)> &SelectPredicate) const =0
virtual int32 GetNextUsageForChunk(const FGuid &ChunkId, int32 &OutLastUsageIndex) const =0
virtual int32 GetReferenceCount(const FGuid &ChunkId) const =0
ESortDirection
Definition ChunkReferenceTracker.h:18
virtual int32 GetCurrentUsageIndex() const =0
virtual TSet< FGuid > GetReferencedChunks() const =0
virtual int32 GetRemainingChunkCount() const =0
virtual const BuildPatchServices::FFileManifest * GetFileManifest(const FString &Filename) const
Definition BuildPatchManifest.cpp:1035
virtual void GetTaggedFileList(const TSet< FString > &Tags, TArray< FString > &TaggedFiles) const
Definition BuildPatchManifest.cpp:980
virtual void GetChunksRequiredForFiles(const TSet< FString > &Filenames, TSet< FGuid > &RequiredChunks) const
Definition BuildPatchManifest.cpp:746
virtual int32 EnumerateProducibleChunks(const TSet< FString > &TagSet, const TSet< FGuid > &ChunksRequired, TSet< FGuid > &ChunksAvailable) const
Definition BuildPatchManifest.cpp:1209
virtual void GetDataList(TArray< FGuid > &DataGuids) const
Definition BuildPatchManifest.cpp:1025
virtual void GetFileList(TArray< FString > &Filenames) const
Definition BuildPatchManifest.cpp:953
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
FORCEINLINE TArray< FGuid > OrderedUniquePatchReferences(const FBuildPatchAppManifestRef &InstallManifest, const FBuildPatchAppManifestRef &CurrentManifest)
Definition ChunkReferenceTracker.h:159
FORCEINLINE TArray< FGuid > OrderedUniqueReferences(const FBuildPatchAppManifestRef &InstallManifest)
Definition ChunkReferenceTracker.h:125
FORCEINLINE TArray< FGuid > OrderedUniqueReferencesTagged(const FBuildPatchAppManifestRef &InstallManifest, const TSet< FString > &InstallTagSet)
Definition ChunkReferenceTracker.h:198
FORCEINLINE TArray< FGuid > OrderedUniquePatchReferencesTagged(const FBuildPatchAppManifestRef &InstallManifest, const TSet< FString > &InstallTagSet, const FBuildPatchAppManifestRef &CurrentManifest, const TSet< FString > &CurrentTagSet)
Definition ChunkReferenceTracker.h:235
Definition BuildPatchFileConstructor.h:28
Definition ChunkData.h:188
Definition ManifestData.h:140
Definition Guid.h:109