UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BuildPatchInstaller.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 BuildPatchInstaller.h: Declares the FBuildPatchInstaller class which
5 controls the process of installing a build described by a build manifest.
6=============================================================================*/
7
8#pragma once
9
10#include "HAL/Runnable.h"
11#include "HAL/ThreadSafeBool.h"
13#include "CoreMinimal.h"
14
17#include "BuildPatchSettings.h"
18
19#include "Common/HttpManager.h"
20#include "Core/AsyncHelpers.h"
21#include "Core/Platform.h"
22#include "Core/ProcessTimer.h"
23#include "BuildPatchManifest.h"
24#include "BuildPatchProgress.h"
25#include "IBuildManifestSet.h"
26
28
29namespace BuildPatchServices
30{
31 struct FChunkDbSourceConfig;
32 struct FCloudSourceConfig;
33 struct FDownloadConnectionCountConfig;
35 class IInstallerError;
36 class IFileOperationTracker;
37 class IMemoryChunkStoreStatistics;
39 class ISpeedRecorder;
40 class IChunkDataSizeProvider;
41 class IDownloadServiceStatistics;
42 class IChunkDbChunkSourceStatistics;
43 class ICloudChunkSourceStatistics;
44 class IInstallChunkSourceStatistics;
45 class IFileConstructorStatistics;
46 class IVerifierStatistics;
47 class IInstallerAnalytics;
48 class IDownloadService;
49 class IOptimisedDelta;
50 class IMessagePump;
51 class IVerifier;
52 class IBuildManifestSet;
53
59 : public IBuildInstaller
60 , public FRunnable
61 , public TSharedFromThis<FBuildPatchInstaller, ESPMode::ThreadSafe>
62 {
63 private:
64 // Simple unique installer guid to help logging functions have context.
65 FGuid SessionId;
66
67 // Hold a pointer to my thread for easier deleting.
69
70 // The delegates that we will be calling when started.
71 const FBuildPatchInstallerDelegate StartDelegate;
72
73 // The delegates that we will be calling on complete.
74 const FBuildPatchInstallerDelegate CompleteDelegate;
75
76 // The installer configuration.
77 FBuildInstallerConfiguration Configuration;
78
79 // The Configuration.InstallerActions array converted into private class type.
81
82 // The directory created in staging, to store local patch data.
83 FString DataStagingDir;
84
85 // The directory created in staging to construct install files to.
86 FString InstallStagingDir;
87
88 // The directory created in staging to store any required meta, such as resume info.
89 FString MetaStagingDir;
90
91 // The filename used to mark a previous install that did not complete but moved staged files into the install directory.
92 FString PreviousMoveMarker;
93
94 // A critical section to protect variables.
95 mutable FCriticalSection ThreadLock;
96
97 // A flag storing whether the process was a success.
98 FThreadSafeBool bSuccess;
99
100 // A flag marking that we a running.
101 FThreadSafeBool bIsRunning;
102
103 // A flag marking that we initialized correctly.
104 FThreadSafeBool bIsInited;
105
106 // A flag that stores whether we are on the first install iteration.
107 FThreadSafeBool bFirstInstallIteration;
108
109 // Tracks required download data between install retries.
110 FThreadSafeInt64 PreviousTotalDownloadRequired;
111
112 // Keep track of build stats.
113 FBuildInstallStats BuildStats;
114
115 // Keep track of install progress.
116 FBuildPatchProgress BuildProgress;
117
118 // Whether we are currently paused.
119 bool bIsPaused;
120
121 // Whether we are needing to abort.
122 bool bShouldAbort;
123
124 // Holds a list of files that have been placed into the install directory.
125 TArray<FString> FilesInstalled;
126
127 // Holds the files which are all required.
128 TSet<FString> TaggedFiles;
129
130 // Holds the files which are outdated.
131 TSet<FString> OutdatedFiles;
132
133 // The files to be constructed in the current install attempt.
134 TSet<FString> FilesToConstruct;
135
136 // The files that were removed during installation due to destructive patch behavior.
137 TSet<FString> OldFilesRemovedBySystem;
138
139 // With bInstallToMemory, files end up here after construction.
140 TMap<FString, TArray64<uint8>> FilesInstalledToMemory;
141
142 // Map of registered installations.
144
145 // The file which contains per machine configuration information.
146 FString LocalMachineConfigFile;
147
148 // HTTP manager used to make requests for download data.
149 TUniquePtr<IHttpManager> HttpManager;
150
151 // File systems for classes requiring disk access.
152 TUniquePtr<IFileSystem> FileSystem;
153
154 // Platform abstraction.
155 TUniquePtr<IPlatform> Platform;
156
157 // Installer error tracking system.
158 TUniquePtr<IInstallerError> InstallerError;
159
160 // The analytics provider interface.
162
163 // Installer analytics handler.
164 TUniquePtr<IInstallerAnalytics> InstallerAnalytics;
165
166 // Installer statistics tracking.
167 TUniquePtr<IFileOperationTracker> FileOperationTracker;
168 TUniquePtr<ISpeedRecorder> DownloadSpeedRecorder;
169 TUniquePtr<ISpeedRecorder> DiskReadSpeedRecorder;
170 TUniquePtr<ISpeedRecorder> DiskWriteSpeedRecorder;
171 TUniquePtr<IChunkDataSizeProvider> ChunkDataSizeProvider;
172 TUniquePtr<IDownloadServiceStatistics> DownloadServiceStatistics;
173 TUniquePtr<IChunkDbChunkSourceStatistics> ChunkDbChunkSourceStatistics;
174 TUniquePtr<IInstallChunkSourceStatistics> InstallChunkSourceStatistics;
175 TUniquePtr<ICloudChunkSourceStatistics> CloudChunkSourceStatistics;
176 TUniquePtr<IFileConstructorStatistics> FileConstructorStatistics;
177 TUniquePtr<IVerifierStatistics> VerifierStatistics;
178
179 // Download service.
180 TUniquePtr<IDownloadService> DownloadService;
181
182 // The message pump controller.
183 TUniquePtr<IMessagePump> MessagePump;
184
185 // The interface for manifest data aggregation.
187
188 // The interface for verification of files built.
189 TUniquePtr<IVerifier> Verifier;
190
191 // List of controllable classes that have been constructed.
192 TArray<IControllable*> Controllables;
193
194 // Stage timers for build stats.
195 FProcessTimer InitializeTimer;
196 FProcessTimer ConstructTimer;
197 FProcessTimer MoveFromStageTimer;
198 FProcessTimer FileAttributesTimer;
199 FProcessTimer VerifyTimer;
200 FProcessTimer CleanUpTimer;
201 FProcessTimer PrereqTimer;
202 FProcessTimer ProcessPausedTimer;
203 FProcessTimer ProcessActiveTimer;
204 FProcessTimer ProcessExecuteTimer;
205
206 // Caches verification errors encountered each run.
207 TMap<BuildPatchServices::EVerifyError, int32> CachedVerifyErrorCounts;
208
209 public:
219 FBuildPatchInstaller(FBuildInstallerConfiguration Configuration, TMultiMap<FString, FBuildPatchAppManifestRef> InstallationInfo, const FString& LocalMachineConfigFile, TSharedPtr<IAnalyticsProvider> Analytics, FBuildPatchInstallerDelegate StartDelegate, FBuildPatchInstallerDelegate CompleteDelegate);
220
225
226 // FRunnable interface begin.
227 uint32 Run() override;
228 // FRunnable interface end.
229
230 // IBuildInstaller interface begin.
231 virtual bool StartInstallation() override;
232 virtual bool IsComplete() const override;
233 virtual bool IsCanceled() const override;
234 virtual bool IsPaused() const override;
235 virtual bool IsResumable() const override;
236 virtual bool IsUpdate() const override;
237 virtual bool CompletedSuccessfully() const override;
238 virtual bool HasError() const override;
239 virtual EBuildPatchInstallError GetErrorType() const override;
240 virtual FString GetErrorCode() const override;
241 //@todo this is deprecated and shouldn't be used anymore [6/4/2014 justin.sargent]
242 virtual FText GetPercentageText() const override;
243 //@todo this is deprecated and shouldn't be used anymore [6/4/2014 justin.sargent]
244 virtual FText GetDownloadSpeedText() const override;
245 virtual double GetDownloadSpeed() const override;
246 virtual int64 GetTotalDownloadRequired() const override;
247 virtual int64 GetTotalDownloaded() const override;
248 virtual EBuildPatchState GetState() const override;
249 virtual FText GetStatusText() const override;
250 virtual float GetUpdateProgress() const override;
251 virtual FBuildInstallStats GetBuildStatistics() const override;
252 virtual EBuildPatchDownloadHealth GetDownloadHealth() const override;
253 virtual FText GetErrorText() const override;
254 virtual void CancelInstall() override;
255 virtual bool TogglePauseInstall() override;
256 virtual void RegisterMessageHandler(FMessageHandler* MessageHandler) override;
257 virtual void UnregisterMessageHandler(FMessageHandler* MessageHandler) override;
258 virtual const FBuildInstallerConfiguration& GetConfiguration() const override;
259#if !UE_BUILD_SHIPPING
260 virtual void GetDebugText(TArray<FString>& Output) override;
261#endif
263 // IBuildInstaller interface end.
264
268 bool Tick();
269
273 void PreExit();
274
279
284
289
294
299
304
309
314
316
321
322
323 private:
324
329 bool Initialize();
330
335 void ExecuteCompleteDelegate();
336
340 void PumpMessages();
341
349 bool CheckForExternallyInstalledFiles(const TSet<FString>& FilesToCheck);
350
356 bool RunInstallation(TArray<FString>& CorruptFiles);
357
361 bool RunPrerequisites();
362
367 bool RunBackupAndMove();
368
373 bool RunFileAttributes();
374
380 bool RunVerification(TArray<FString>& CorruptFiles);
381
388 bool BackupFileIfNecessary(const FString& Filename, bool bDiscoveredByVerification = false);
389
394 void CleanupEmptyDirectories(const FString& RootDirectory);
395
401 void FilterToExistingFiles(const FString& RootDirectory, TSet<FString>& Files);
402
409 bool RemoveFileWithRetries(const FString& FullFilename, uint32& ErrorCode);
410
419 bool RelocateFileWithRetries(const FString& ToFullFilename, const FString& FromFullFilename, uint32& RenameErrorCode, uint32& CopyErrorCode);
420
424 FDownloadConnectionCountConfig BuildConnectionCountConfig();
425
429 void CleanupThread();
430 };
431}
432
434
TWeakPtr< BuildPatchServices::FBuildPatchInstaller, ESPMode::ThreadSafe > FBuildPatchInstallerWeakPtr
Definition BuildPatchInstaller.h:437
PRAGMA_ENABLE_DEPRECATION_WARNINGS typedef TSharedPtr< BuildPatchServices::FBuildPatchInstaller, ESPMode::ThreadSafe > FBuildPatchInstallerPtr
Definition BuildPatchInstaller.h:435
TSharedRef< BuildPatchServices::FBuildPatchInstaller, ESPMode::ThreadSafe > FBuildPatchInstallerRef
Definition BuildPatchInstaller.h:436
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
EBuildPatchInstallError
Definition IBuildInstaller.h:23
EBuildPatchDownloadHealth
Definition IBuildInstaller.h:88
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition BuildPatchInstaller.h:62
virtual FText GetErrorText() const override
Definition BuildPatchInstaller.cpp:2178
virtual FText GetDownloadSpeedText() const override
Definition BuildPatchInstaller.cpp:2124
virtual FString GetErrorCode() const override
Definition BuildPatchInstaller.cpp:2092
uint32 Run() override
Definition BuildPatchInstaller.cpp:810
virtual bool IsPaused() const override
Definition BuildPatchInstaller.cpp:2043
virtual EBuildPatchInstallError GetErrorType() const override
Definition BuildPatchInstaller.cpp:2086
~FBuildPatchInstaller()
Definition BuildPatchInstaller.cpp:503
virtual void UnregisterMessageHandler(FMessageHandler *MessageHandler) override
Definition BuildPatchInstaller.cpp:2241
virtual FText GetPercentageText() const override
Definition BuildPatchInstaller.cpp:2104
virtual EBuildPatchDownloadHealth GetDownloadHealth() const override
Definition BuildPatchInstaller.cpp:2173
virtual bool StartInstallation() override
Definition BuildPatchInstaller.cpp:612
virtual EBuildPatchState GetState() const override
Definition BuildPatchInstaller.cpp:2150
virtual bool HasError() const override
Definition BuildPatchInstaller.cpp:2076
const ISpeedRecorder * GetDiskWriteSpeedRecorder() const
Definition BuildPatchInstaller.cpp:552
virtual bool IsResumable() const override
Definition BuildPatchInstaller.cpp:2049
virtual bool IsCanceled() const override
Definition BuildPatchInstaller.cpp:2037
virtual FBuildInstallStats GetBuildStatistics() const override
Definition BuildPatchInstaller.cpp:2167
const IDownloadServiceStatistics * GetDownloadServiceStatistics() const
Definition BuildPatchInstaller.cpp:557
const IInstallChunkSourceStatistics * GetInstallChunkSourceStatistics() const
Definition BuildPatchInstaller.cpp:562
const ICloudChunkSourceStatistics * GetCloudChunkSourceStatistics() const
Definition BuildPatchInstaller.cpp:567
virtual int64 GetTotalDownloaded() const override
Definition BuildPatchInstaller.cpp:2027
const IVerifierStatistics * GetVerifierStatistics() const
Definition BuildPatchInstaller.cpp:582
const ISpeedRecorder * GetDiskReadSpeedRecorder() const
Definition BuildPatchInstaller.cpp:547
virtual bool TogglePauseInstall() override
Definition BuildPatchInstaller.cpp:2203
const IFileOperationTracker * GetFileOperationTracker() const
Definition BuildPatchInstaller.cpp:537
const IFileConstructorStatistics * GetFileConstructorStatistics() const
Definition BuildPatchInstaller.cpp:572
virtual double GetDownloadSpeed() const override
Definition BuildPatchInstaller.cpp:2017
virtual void RegisterMessageHandler(FMessageHandler *MessageHandler) override
Definition BuildPatchInstaller.cpp:2234
const IChunkDbChunkSourceStatistics * GetChunkDbChunkSourceStatistics() const
Definition BuildPatchInstaller.cpp:577
virtual const FBuildInstallerConfiguration & GetConfiguration() const override
Definition BuildPatchInstaller.cpp:587
virtual bool CompletedSuccessfully() const override
Definition BuildPatchInstaller.cpp:2071
virtual void GetDebugText(TArray< FString > &Output) override
Definition BuildPatchInstaller.cpp:593
virtual bool IsUpdate() const override
Definition BuildPatchInstaller.cpp:2059
virtual float GetUpdateProgress() const override
Definition BuildPatchInstaller.cpp:2162
bool Tick()
Definition BuildPatchInstaller.cpp:524
const ISpeedRecorder * GetDownloadSpeedRecorder() const
Definition BuildPatchInstaller.cpp:542
virtual FText GetStatusText() const override
Definition BuildPatchInstaller.cpp:2156
virtual TMap< FString, TArray64< uint8 > > & GetFilesInstalledToMemory() override
Definition BuildPatchInstaller.cpp:2098
void PreExit()
Definition BuildPatchInstaller.cpp:508
virtual int64 GetTotalDownloadRequired() const override
Definition BuildPatchInstaller.cpp:2022
virtual bool IsComplete() const override
Definition BuildPatchInstaller.cpp:2032
virtual void CancelInstall() override
Definition BuildPatchInstaller.cpp:2183
Definition BuildPatchMessage.h:116
Definition IBuildInstallerSharedContext.h:14
Definition ChunkDbChunkSourceStatistics.h:16
Definition CloudChunkSourceStatistics.h:17
Definition DownloadServiceStatistics.h:21
Definition FileConstructorStatistics.h:17
Definition FileOperationTracker.h:19
Definition InstallChunkSourceStatistics.h:17
Definition SpeedRecorder.h:12
Definition VerifierStatistics.h:18
Definition Runnable.h:20
Definition Text.h:385
Definition ThreadSafeBool.h:17
Definition IBuildInstaller.h:305
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition SharedPointer.h:1295
Definition BuildPatchFileConstructor.h:28
Definition BuildPatchSettings.h:253
Definition BuildPatchProgress.h:22
Definition DownloadConnectionCount.h:31
Definition IBuildInstaller.h:108
Definition Guid.h:109