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

111 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "OnDemandBackendStatus.h"
#include "IO/IoStoreOnDemand.h"
#include "Logging/StructuredLog.h"
namespace UE::IoStore
{
extern bool GIasHttpEnabled;
extern bool GIasHttpOptionalBulkDataEnabled;
bool FBackendStatus::IsHttpEnabled(EIoChunkType ChunkType) const
{
const uint8 CurrentFlags = Flags.load(std::memory_order_relaxed);
return IsHttpEnabled(CurrentFlags) &&
(ChunkType != EIoChunkType::OptionalBulkData ||
((CurrentFlags & uint8(EFlags::HttpBulkOptionalDisabled)) == 0 && GIasHttpOptionalBulkDataEnabled));
}
void FBackendStatus::ToString(FStringBuilderBase& Builder) const
{
if (IsCacheEnabled())
{
Builder << TEXT("Caching - Enabled");
}
else
{
Builder << TEXT("Caching - Disabled");
}
Builder << TEXT(" | ");
if (IsHttpEnabled())
{
Builder << TEXT("Http - Enabled");
}
else
{
Builder << TEXT("Http - Disabled");
}
Builder << TEXT(" | ");
if (IsHttpEnabled(EIoChunkType::OptionalBulkData))
{
Builder << TEXT("Optional Mips Enabled");
}
else
{
Builder << TEXT("Optional Mips Disabled");
}
}
bool FBackendStatus::IsHttpEnabled(uint8 FlagsToTest)
{
constexpr uint8 HttpFlags = uint8(EFlags::HttpEnabled);
return ((FlagsToTest & HttpFlags) == uint8(EFlags::HttpEnabled)) && GIasHttpEnabled;
}
void FBackendStatus::AddOrRemoveFlags(EFlags FlagsToAddOrRemove, bool bValue, const TCHAR* DebugText)
{
const uint8 PrevFlags = AddOrRemoveFlags(FlagsToAddOrRemove, bValue);
TStringBuilder<128> Sb;
Sb.Append(DebugText)
<< TEXT(" '");
Sb.Append(bValue ? TEXT("true") : TEXT("false"))
<< TEXT("', backend status '(")
<< EFlags(PrevFlags)
<< TEXT(") -> (")
<< EFlags(Flags.load(std::memory_order_relaxed))
<< TEXT(")'");
UE_LOGFMT(LogIas, Log, "{Message}", Sb);
}
FStringBuilderBase& operator<<(FStringBuilderBase& Sb, FBackendStatus::EFlags StatusFlags)
{
if (StatusFlags == FBackendStatus::EFlags::None)
{
Sb.Append(TEXT("None"));
return Sb;
}
bool bFirst = true;
auto AppendIf = [StatusFlags, &Sb, &bFirst](FBackendStatus::EFlags Contains, const TCHAR* Str)
{
if (uint8(StatusFlags) & uint8(Contains))
{
if (!bFirst)
{
Sb.AppendChar(TEXT('|'));
}
Sb.Append(Str);
bFirst = false;
}
};
AppendIf(FBackendStatus::EFlags::CacheEnabled, TEXT("CacheEnabled"));
AppendIf(FBackendStatus::EFlags::HttpEnabled, TEXT("HttpEnabled"));
AppendIf(FBackendStatus::EFlags::HttpBulkOptionalDisabled, TEXT("HttpBulkOptionalDisabled"));
AppendIf(FBackendStatus::EFlags::AbandonCache, TEXT("AbandonCache"));
return Sb;
}
} // namespace UE::IoStore