Files
UnrealEngine/Engine/Source/Runtime/Experimental/IoStore/OnDemand/Private/Statistics.h
2025-05-18 13:04:45 +08:00

133 lines
4.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "HAL/LowLevelMemTracker.h"
#include "OnDemandBackendStatus.h"
#include "ProfilingDebugging/CountersTrace.h"
#include "ProfilingDebugging/CsvProfiler.h"
#if COUNTERSTRACE_ENABLED || CSV_PROFILER_STATS
# define IAS_WITH_STATISTICS 1
#else
# define IAS_WITH_STATISTICS 0
#endif
struct FAnalyticsEventAttribute;
enum class EIoErrorCode;
LLM_DECLARE_TAG(Ias);
namespace UE::IoStore
{
class IAnalyticsRecording;
enum class EHttpRequestType : uint8;
struct FAvailableEndPoints;
#if IAS_WITH_STATISTICS
# define IAS_STATISTICS_IMPL(...) ;
#else
# define IAS_STATISTICS_IMPL(...) { return __VA_ARGS__; }
#endif
////////////////////////////////////////////////////////////////////////////////
class FOnDemandIoBackendStats
{
public:
static FOnDemandIoBackendStats* Get() IAS_STATISTICS_IMPL(nullptr)
FOnDemandIoBackendStats(FBackendStatus& InBackendStatus) IAS_STATISTICS_IMPL()
~FOnDemandIoBackendStats() IAS_STATISTICS_IMPL()
/** Report analytics not directly associated with a specific endpoint */
void ReportGeneralAnalytics(TArray<FAnalyticsEventAttribute>& OutAnalyticsArray) const IAS_STATISTICS_IMPL()
/** Report analytics for the current endpoint */
void ReportEndPointAnalytics(TArray<FAnalyticsEventAttribute>& OutAnalyticsArray) const IAS_STATISTICS_IMPL()
TUniquePtr<IAnalyticsRecording> StartAnalyticsRecording() const IAS_STATISTICS_IMPL(TUniquePtr<IAnalyticsRecording>())
void OnIoRequestEnqueue() IAS_STATISTICS_IMPL()
void OnIoRequestComplete(uint64 Size, uint64 DurationMs) IAS_STATISTICS_IMPL()
void OnIoRequestCancel() IAS_STATISTICS_IMPL()
void OnIoRequestError() IAS_STATISTICS_IMPL()
void OnCacheError() IAS_STATISTICS_IMPL()
void OnCacheDecodeError() IAS_STATISTICS_IMPL()
void OnCacheGet(uint64 DataSize) IAS_STATISTICS_IMPL()
void OnCachePut() IAS_STATISTICS_IMPL()
void OnCachePutExisting(uint64 DataSize) IAS_STATISTICS_IMPL()
void OnCachePutReject(uint64 DataSize) IAS_STATISTICS_IMPL()
void OnCachePendingBytes(uint64 TotalSize) IAS_STATISTICS_IMPL()
void OnCachePersistedBytes(uint64 TotalSize) IAS_STATISTICS_IMPL()
void OnCacheWriteBytes(uint64 WriteSize) IAS_STATISTICS_IMPL()
void OnCacheSetMaxBytes(uint64 TotalSize) IAS_STATISTICS_IMPL()
// Per session
void OnHttpDistributedEndpointResolved() IAS_STATISTICS_IMPL()
// Per hostgroup
void OnHttpConnected() IAS_STATISTICS_IMPL()
void OnHttpDisconnected() IAS_STATISTICS_IMPL()
// From FOnDemandHttpThread
void OnHttpEnqueue(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpCancel(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpDequeue(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpGet(EHttpRequestType Type, uint64 SizeBytes, uint64 DurationMs) IAS_STATISTICS_IMPL()
void OnHttpRetry(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpError(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpDecodeError(EHttpRequestType Type) IAS_STATISTICS_IMPL()
void OnHttpCdnCacheReply(EHttpRequestType Type,int32 Reply) IAS_STATISTICS_IMPL()
private:
#if IAS_WITH_STATISTICS
const FBackendStatus& BackendStatus;
#endif //IAS_WITH_STATISTICS
};
////////////////////////////////////////////////////////////////////////////////
class FOnDemandContentInstallerStats
{
public:
static void OnRequestEnqueued() IAS_STATISTICS_IMPL()
static void OnRequestCompleted(
uint64 RequestedChunkCount,
uint64 RequestedBytes,
uint64 DownloadedChunkCount,
uint64 DownloadedBytes,
double CacheHitRatio,
uint64 DurationCycles,
EIoErrorCode ErrorCode) IAS_STATISTICS_IMPL()
static void ReportAnalytics(TArray<FAnalyticsEventAttribute>& OutAnalyticsArray) IAS_STATISTICS_IMPL()
};
////////////////////////////////////////////////////////////////////////////////
class FOnDemandInstallCacheStats
{
public:
static void OnStartupError(EIoErrorCode ErrorCode) IAS_STATISTICS_IMPL()
static void OnFlush(EIoErrorCode ErrorCode, int64 ByteCount) IAS_STATISTICS_IMPL()
static void OnJournalCommit(EIoErrorCode ErrorCode, int64 ByteCount) IAS_STATISTICS_IMPL()
static void OnCasVerificationError(int32 RemoveChunks) IAS_STATISTICS_IMPL()
static void OnPurge(
EIoErrorCode ErrorCode,
uint64 MaxCacheSize,
uint64 NewCacheSize,
uint64 BytesToPurge,
uint64 PurgedBytes) IAS_STATISTICS_IMPL()
static void OnDefrag(EIoErrorCode ErrorCode, uint64 FragmentedBytes) IAS_STATISTICS_IMPL()
static void OnCacheUsage(
uint64 MaxCacheSize,
uint64 CacheSize,
uint64 ReferencedBlockSize,
uint64 ReferencedSize,
uint64 FragmentedSize,
int64 OldestBlockAccess) IAS_STATISTICS_IMPL()
};
#undef IAS_STATISTICS_IMPL
} // namespace UE::IoStore