Files
paul chipchase 5388a344ec [UVT] Add a log line showing when engine pre init ends and the tool begins.
#rb Juan.Legaz
#jira UE-224646
#rnx

[CL 36385338 by paul chipchase in 5.5 branch]
2024-09-18 07:11:21 -04:00

95 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "UnrealVirtualizationTool.h"
#include "Modules/ModuleManager.h"
#include "ProjectUtilities.h"
#include "RequiredProgramMainCPPInclude.h"
#include "UnrealVirtualizationToolApp.h"
IMPLEMENT_APPLICATION(UnrealVirtualizationTool, "UnrealVirtualizationTool");
DEFINE_LOG_CATEGORY(LogVirtualizationTool);
int32 UnrealVirtualizationToolMain(int32 ArgC, TCHAR* ArgV[])
{
TRACE_CPUPROFILER_EVENT_SCOPE(UnrealVirtualizationToolMain);
using namespace UE::Virtualization;
// Allows this program to accept a project argument on the commandline and use project-specific config
UE::ProjectUtilities::ParseProjectDirFromCommandline(ArgC, ArgV);
GEngineLoop.PreInit(ArgC, ArgV);
check(GConfig && GConfig->IsReadyForUse());
const bool bReportFailures = FParse::Param(FCommandLine::Get(), TEXT("ReportFailures"));
#if 0
while (!FPlatformMisc::IsDebuggerPresent())
{
FPlatformProcess::SleepNoStats(0.0f);
}
PLATFORM_BREAK();
#endif
FModuleManager::Get().StartProcessingNewlyLoadedObjects();
UE_LOG(LogVirtualizationTool, Display, TEXT("Running UnrealVirtualization Tool"));
EProcessResult ProcessResult = EProcessResult::Success;
FUnrealVirtualizationToolApp App;
EInitResult InitResult = App.Initialize();
if (InitResult == EInitResult::Success)
{
ProcessResult = App.Run();
if (ProcessResult != EProcessResult::Success)
{
UE_LOG(LogVirtualizationTool, Error, TEXT("UnrealVirtualizationTool ran with errors"));
}
}
else if(InitResult == EInitResult::Error)
{
UE_LOG(LogVirtualizationTool, Error, TEXT("UnrealVirtualizationTool failed to initialize"));
ProcessResult = EProcessResult::Error;
}
UE_CLOG(ProcessResult == EProcessResult::Success, LogVirtualizationTool, Display, TEXT("UnrealVirtualizationTool ran successfully"));
// Don't report if the error was in a child process, they will raise their own ensures
if (bReportFailures && ProcessResult == EProcessResult::Error)
{
ensure(false);
}
const uint8 ReturnCode = ProcessResult == EProcessResult::Success ? 0 : 1;
if (FParse::Param(FCommandLine::Get(), TEXT("fastexit")))
{
FPlatformMisc::RequestExitWithStatus(true, ReturnCode);
}
else
{
TRACE_CPUPROFILER_EVENT_SCOPE(Shutdown);
GConfig->DisableFileOperations(); // We don't want to write out any config file changes!
// Even though we are exiting anyway we need to request an engine exit in order to get a clean shutdown
RequestEngineExit(TEXT("The process has finished"));
FEngineLoop::AppPreExit();
FModuleManager::Get().UnloadModulesAtShutdown();
FEngineLoop::AppExit();
}
return ReturnCode;
}
INT32_MAIN_INT32_ARGC_TCHAR_ARGV()
{
FTaskTagScope Scope(ETaskTag::EGameThread);
return UnrealVirtualizationToolMain(ArgC, ArgV);
}