You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Any function that may create a request now has a IRequestOwner& parameter, and uses the Begin and End functions on the owner to manage the lifetime of any requests that it creates, as well as using End to invoke the completion callback for any request which has one. The new FRequestBarrier may be used to block a group from being considered complete in a scope where more requests may be added to it. #rb Matt.Peters #rnx #preflight 6109b5c403d303000144cce5 #preflight 610acf7103d30300016fda94 #ROBOMERGE-SOURCE: CL 17060470 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v850-17047176) [CL 17060649 by devin doucette in ue5-release-engine-test branch]
157 lines
4.5 KiB
C++
157 lines
4.5 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "DerivedDataBuild.h"
|
|
|
|
#include "DerivedDataBuildAction.h"
|
|
#include "DerivedDataBuildDefinition.h"
|
|
#include "DerivedDataBuildFunctionRegistry.h"
|
|
#include "DerivedDataBuildInputs.h"
|
|
#include "DerivedDataBuildOutput.h"
|
|
#include "DerivedDataBuildPrivate.h"
|
|
#include "DerivedDataBuildScheduler.h"
|
|
#include "DerivedDataBuildSession.h"
|
|
#include "DerivedDataBuildWorkerRegistry.h"
|
|
#include "DerivedDataCache.h"
|
|
#include "DerivedDataRequest.h"
|
|
#include "Misc/Guid.h"
|
|
|
|
namespace UE::DerivedData::Private
|
|
{
|
|
|
|
DEFINE_LOG_CATEGORY(LogDerivedDataBuild);
|
|
|
|
/**
|
|
* Derived Data Build System
|
|
*
|
|
* Public Data Types:
|
|
*
|
|
* FBuildDefinition:
|
|
* - Function, Constants, Key->InputId
|
|
* - From FBuildDefinitionBuilder via IBuild::CreateDefinition()
|
|
* - Serializes to/from FCbObject
|
|
* FBuildAction:
|
|
* - Function+Version, BuildSystemVersion, Constants, Key->InputHash+InputSize
|
|
* - From FBuildActionBuilder via IBuild::CreateAction()
|
|
* - Serializes to/from FCbObject
|
|
* FBuildInputs:
|
|
* - Key->InputBuffer
|
|
* - From FBuildInputsBuilder via IBuild::CreateInputs()
|
|
* FBuildOutput:
|
|
* - Metadata, Payloads[], Diagnostics[] (Level, Category, Message)
|
|
* - From FBuildOutputBuilder via IBuild::CreateOutput()
|
|
* - Serializes to/from FCbObject and FCacheRecord
|
|
* FBuildKey:
|
|
* - Unique ID for FBuildDefinition
|
|
* FBuildActionKey:
|
|
* - Unique ID for FBuildAction
|
|
* - Combined with FCacheBucket to create a FCacheKey
|
|
*
|
|
* Public Interface Types:
|
|
*
|
|
* IBuildFunction:
|
|
* - Name (Unique), Version
|
|
* - Represents the steps necessary to convert inputs to the output
|
|
* IBuildFunctionRegistry:
|
|
* - Registry of IBuildFunction used by IBuild
|
|
* IBuildInputResolver:
|
|
* - Resolves FBuildKey to FBuildDefinition
|
|
* - Resolves FBuildDefinition to Key->(RawHash, RawSize, OptionalBuffer)
|
|
* IBuildJob:
|
|
* - From FBuildKey or FBuildDefinition or FBuildAction+FBuildInputs via FBuildSession
|
|
* - Represents an executing build request and implements IRequest
|
|
* IBuildScheduler:
|
|
* - Schedules execution of the operations on IBuildJob
|
|
* FBuildSession:
|
|
* - From ICache+IBuild+IBuildScheduler+IBuildInputResolver via IBuild::CreateSession()
|
|
* - Interface for scheduling builds from a key, definition, or action+inputs
|
|
*/
|
|
class FBuild final : public IBuild
|
|
{
|
|
public:
|
|
explicit FBuild(ICache& InCache)
|
|
: Cache(InCache)
|
|
{
|
|
}
|
|
|
|
FRequestGroup CreateGroup(EPriority Priority) final
|
|
{
|
|
return CreateRequestGroup(Priority);
|
|
}
|
|
|
|
FBuildDefinitionBuilder CreateDefinition(FStringView Name, FStringView Function) final
|
|
{
|
|
return CreateBuildDefinition(Name, Function);
|
|
}
|
|
|
|
FOptionalBuildDefinition LoadDefinition(FStringView Name, FCbObject&& Definition) final
|
|
{
|
|
return LoadBuildDefinition(Name, MoveTemp(Definition));
|
|
}
|
|
|
|
FBuildActionBuilder CreateAction(FStringView Name, FStringView Function) final
|
|
{
|
|
return CreateBuildAction(Name, Function, FunctionRegistry->FindFunctionVersion(Function), Version);
|
|
}
|
|
|
|
FOptionalBuildAction LoadAction(FStringView Name, FCbObject&& Action) final
|
|
{
|
|
return LoadBuildAction(Name, MoveTemp(Action));
|
|
}
|
|
|
|
FBuildInputsBuilder CreateInputs(FStringView Name) final
|
|
{
|
|
return CreateBuildInputs(Name);
|
|
}
|
|
|
|
FBuildOutputBuilder CreateOutput(FStringView Name, FStringView Function) final
|
|
{
|
|
return CreateBuildOutput(Name, Function);
|
|
}
|
|
|
|
FOptionalBuildOutput LoadOutput(FStringView Name, FStringView Function, const FCbObject& Output) final
|
|
{
|
|
return LoadBuildOutput(Name, Function, Output);
|
|
}
|
|
|
|
FOptionalBuildOutput LoadOutput(FStringView Name, FStringView Function, const FCacheRecord& Output) final
|
|
{
|
|
return LoadBuildOutput(Name, Function, Output);
|
|
}
|
|
|
|
FBuildSession CreateSession(FStringView Name, IBuildInputResolver* InputResolver, IBuildScheduler* Scheduler) final
|
|
{
|
|
return CreateBuildSession(Name, Cache, *this, Scheduler ? *Scheduler : *DefaultScheduler, InputResolver);
|
|
}
|
|
|
|
const FGuid& GetVersion() const final
|
|
{
|
|
return Version;
|
|
}
|
|
|
|
IBuildFunctionRegistry& GetFunctionRegistry() const final
|
|
{
|
|
return *FunctionRegistry;
|
|
}
|
|
|
|
IBuildWorkerRegistry& GetWorkerRegistry() const final
|
|
{
|
|
return *WorkerRegistry;
|
|
}
|
|
|
|
private:
|
|
ICache& Cache;
|
|
TUniquePtr<IBuildFunctionRegistry> FunctionRegistry{CreateBuildFunctionRegistry()};
|
|
TUniquePtr<IBuildWorkerRegistry> WorkerRegistry{CreateBuildWorkerRegistry()};
|
|
TUniquePtr<IBuildScheduler> DefaultScheduler{CreateBuildScheduler()};
|
|
const FGuid Version{TEXT("ed89db6a-335d-45d3-8599-39d3b09f7ad7")};
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
IBuild* CreateBuild(ICache& Cache)
|
|
{
|
|
return new FBuild(Cache);
|
|
}
|
|
|
|
} // UE::DerivedData::Private
|