Files
UnrealEngine/Engine/Source/Runtime/Online/BuildPatchServices/Private/Installer/BuildStatistics.cpp
2025-05-18 13:04:45 +08:00

158 lines
4.9 KiB
C++

// 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<FDownload> 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<FFileOperation>& 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<EVerifyError, int32> 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<FDownload> 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<FFileOperation>& 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<EVerifyError, int32> FBuildStatistics::GetVerifyErrorCounts() const
{
return Installer->GetVerifierStatistics()->GetVerifyErrorCounts();
}
IBuildStatistics* FBuildStatisticsFactory::Create(FBuildPatchInstallerRef Installer)
{
return new FBuildStatistics(MoveTemp(Installer));
}
}