// Copyright Epic Games, Inc. All Rights Reserved. #include "Installer/BuildStatistics.h" #include "Installer/Statistics/FileOperationTracker.h" #include "Installer/Statistics/ChunkDbChunkSourceStatistics.h" #include "Installer/Statistics/CloudChunkSourceStatistics.h" #include "Installer/Statistics/FileConstructorStatistics.h" #include "Installer/Statistics/MemoryChunkStoreStatistics.h" #include "Installer/Statistics/DownloadServiceStatistics.h" #include "Installer/Statistics/InstallChunkSourceStatistics.h" #include "Installer/Statistics/VerifierStatistics.h" namespace BuildPatchServices { FFileOperation::FFileOperation(FString InFilename, const FGuid& InDataId, uint64 InOffest, uint64 InSize, EFileOperationState InCurrentState) : Filename(MoveTemp(InFilename)) , DataId(InDataId) , Offest(InOffest) , Size(InSize) , CurrentState(InCurrentState) { } FFileOperation::~FFileOperation() { } class FBuildStatistics : public IBuildStatistics { public: FBuildStatistics(FBuildPatchInstallerRef Installer); ~FBuildStatistics() {} public: // IBuildStatistics interface begin. virtual const FBuildInstallerConfiguration& GetConfiguration() const override; virtual int64 GetDownloadSize() const override; virtual int64 GetBuildSize() const override; virtual FString GetCurrentWorkingFileName() const override; virtual float GetCurrentWorkingFileProgress() const override; virtual FGuid GetCurrentWorkingData() const override; virtual TArray GetCurrentDownloads() const override; virtual bool IsDownloadActive() const override; virtual bool IsHardDiskActiveAdministering() const override; virtual bool IsHardDiskActiveWrite() const override; virtual bool IsHardDiskActiveRead() const override; virtual const TArray& GetFileOperationStates() const override; virtual double GetDownloadByteSpeed() const override; virtual double GetDiskReadByteSpeed() const override; virtual double GetDiskWriteByteSpeed() const override; virtual int32 GetNumVerifyErrors() const override; virtual TMap GetVerifyErrorCounts() const override; // IBuildStatistics interface end. private: FBuildPatchInstallerRef Installer; }; FBuildStatistics::FBuildStatistics(FBuildPatchInstallerRef InInstaller) : Installer(MoveTemp(InInstaller)) { } const FBuildInstallerConfiguration& FBuildStatistics::GetConfiguration() const { return Installer->GetConfiguration(); } int64 FBuildStatistics::GetDownloadSize() const { return Installer->GetTotalDownloadRequired(); } int64 FBuildStatistics::GetBuildSize() const { return Installer->GetFileConstructorStatistics()->GetRequiredConstructSize(); } FString FBuildStatistics::GetCurrentWorkingFileName() const { return Installer->GetFileConstructorStatistics()->GetCurrentFile(); } float FBuildStatistics::GetCurrentWorkingFileProgress() const { return Installer->GetFileConstructorStatistics()->GetCurrentFileProgress(); } FGuid FBuildStatistics::GetCurrentWorkingData() const { return Installer->GetFileConstructorStatistics()->GetCurrentChunk(); } TArray FBuildStatistics::GetCurrentDownloads() const { return Installer->GetDownloadServiceStatistics()->GetCurrentDownloads(); } bool FBuildStatistics::IsDownloadActive() const { return Installer->GetDownloadServiceStatistics()->GetNumCurrentDownloads() > 0; } bool FBuildStatistics::IsHardDiskActiveAdministering() const { return Installer->GetFileConstructorStatistics()->IsCurrentlyAdministering(); } bool FBuildStatistics::IsHardDiskActiveWrite() const { return Installer->GetFileConstructorStatistics()->IsCurrentlyWriting(); } bool FBuildStatistics::IsHardDiskActiveRead() const { return Installer->GetFileConstructorStatistics()->IsCurrentlyReading() || Installer->GetInstallChunkSourceStatistics()->IsCurrentlyReading() || Installer->GetVerifierStatistics()->IsCurrentlyReading() || Installer->GetChunkDbChunkSourceStatistics()->IsCurrentlyReading(); } const TArray& FBuildStatistics::GetFileOperationStates() const { return Installer->GetFileOperationTracker()->GetStates(); } double FBuildStatistics::GetDownloadByteSpeed() const { return Installer->GetDownloadSpeedRecorder()->GetAverageSpeed(10.0f); } double FBuildStatistics::GetDiskReadByteSpeed() const { return Installer->GetDiskReadSpeedRecorder()->GetAverageSpeed(10.0f); } double FBuildStatistics::GetDiskWriteByteSpeed() const { return Installer->GetDiskWriteSpeedRecorder()->GetAverageSpeed(10.0f); } int32 FBuildStatistics::GetNumVerifyErrors() const { return Installer->GetVerifierStatistics()->GetNumFailedFilesVerified(); } TMap FBuildStatistics::GetVerifyErrorCounts() const { return Installer->GetVerifierStatistics()->GetVerifyErrorCounts(); } IBuildStatistics* FBuildStatisticsFactory::Create(FBuildPatchInstallerRef Installer) { return new FBuildStatistics(MoveTemp(Installer)); } }