2022-09-16 11:35:57 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
2023-01-13 04:29:19 -05:00
|
|
|
#include "PrecachePayloadsCommandlet.h"
|
2022-09-16 11:35:57 -04:00
|
|
|
|
2023-01-13 03:31:00 -05:00
|
|
|
#include "CommandletUtils.h"
|
2022-10-28 08:34:16 -04:00
|
|
|
#include "UObject/PackageTrailer.h"
|
|
|
|
|
#include "Virtualization/VirtualizationSystem.h"
|
2022-09-16 11:35:57 -04:00
|
|
|
|
|
|
|
|
UPrecachePayloadsCommandlet::UPrecachePayloadsCommandlet(const FObjectInitializer& ObjectInitializer)
|
|
|
|
|
: Super(ObjectInitializer)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int32 UPrecachePayloadsCommandlet::Main(const FString& Params)
|
|
|
|
|
{
|
|
|
|
|
TRACE_CPUPROFILER_EVENT_SCOPE(UPrecachePayloadsCommandlet);
|
|
|
|
|
|
2023-03-01 03:47:24 -05:00
|
|
|
TArray<FString> PackageNames = UE::Virtualization::FindPackages(UE::Virtualization::EFindPackageFlags::ExcludeEngineContent);
|
2022-09-16 11:35:57 -04:00
|
|
|
|
|
|
|
|
UE_LOG(LogVirtualization, Display, TEXT("Found %d packages"), PackageNames.Num());
|
|
|
|
|
|
2023-01-13 03:31:00 -05:00
|
|
|
TArray<FIoHash> PayloadIds = UE::Virtualization::FindVirtualizedPayloads(PackageNames);
|
2022-09-16 11:35:57 -04:00
|
|
|
|
|
|
|
|
if (PayloadIds.IsEmpty())
|
|
|
|
|
{
|
|
|
|
|
UE_LOG(LogVirtualization, Display, TEXT("No virtualized payloads found"));
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2022-10-21 22:28:45 -04:00
|
|
|
|
2022-09-16 11:35:57 -04:00
|
|
|
UE_LOG(LogVirtualization, Display, TEXT("Found %d virtualized payloads to precache"), PayloadIds.Num());
|
|
|
|
|
UE_LOG(LogVirtualization, Display, TEXT("Precaching payloads..."));
|
2023-04-04 09:16:58 -04:00
|
|
|
|
|
|
|
|
const int32 BatchSize = 64;
|
|
|
|
|
UE::Virtualization::PullPayloadsThreaded(PayloadIds, BatchSize, TEXT("Cached"), [](const UE::Virtualization::FPullRequest& Request)
|
2022-09-16 11:35:57 -04:00
|
|
|
{
|
2023-04-04 09:16:58 -04:00
|
|
|
if (!Request.IsSuccess())
|
2022-10-21 22:28:45 -04:00
|
|
|
{
|
2023-04-04 09:16:58 -04:00
|
|
|
UE_LOG(LogVirtualization, Error, TEXT("%s: Failed to precache payload"), *LexToString(Request.GetIdentifier()));
|
2023-03-23 07:02:27 -04:00
|
|
|
}
|
2023-04-04 09:16:58 -04:00
|
|
|
});
|
2022-09-16 11:35:57 -04:00
|
|
|
|
|
|
|
|
UE_LOG(LogVirtualization, Display, TEXT("Precaching complete!"));
|
|
|
|
|
|
|
|
|
|
UE::Virtualization::IVirtualizationSystem::Get().DumpStats();
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|