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]
120 lines
3.3 KiB
C++
120 lines
3.3 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "DerivedDataBuildScheduler.h"
|
|
|
|
#include "DerivedDataBuildFunction.h"
|
|
#include "DerivedDataBuildFunctionFactory.h"
|
|
#include "DerivedDataBuildFunctionRegistry.h"
|
|
#include "Misc/Guid.h"
|
|
#include "Tasks/Task.h"
|
|
|
|
namespace UE::DerivedData::Private
|
|
{
|
|
|
|
class FBuildSchedulerRequest : public FRequestBase
|
|
{
|
|
public:
|
|
FBuildSchedulerRequest(IBuildJob* InJob, IRequestOwner& InOwner, const TCHAR* DebugName)
|
|
: Job(InJob)
|
|
, Owner(InOwner)
|
|
{
|
|
Tasks::FTaskEvent TaskEvent(TEXT("FBuildSchedulerRequest"));
|
|
Task = Tasks::Launch(DebugName, [this] { Schedule(); }, TaskEvent, Tasks::ETaskPriority::BackgroundNormal);
|
|
Owner.Begin(this);
|
|
TaskEvent.Trigger();
|
|
}
|
|
|
|
void Schedule()
|
|
{
|
|
Owner.End(this, [this] { Job->Schedule(); });
|
|
}
|
|
|
|
void SetPriority(EPriority Priority) final
|
|
{
|
|
}
|
|
|
|
void Cancel() final
|
|
{
|
|
Task.Wait();
|
|
}
|
|
|
|
void Wait() final
|
|
{
|
|
Task.Wait();
|
|
}
|
|
|
|
private:
|
|
IBuildJob* Job;
|
|
IRequestOwner& Owner;
|
|
Tasks::FTask Task;
|
|
};
|
|
|
|
class FBuildScheduler final : public IBuildScheduler
|
|
{
|
|
public:
|
|
void DispatchCacheQuery(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params) final;
|
|
void DispatchCacheStore(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params) final;
|
|
void DispatchResolveKey(IBuildJob* Job, IRequestOwner& Owner) final;
|
|
void DispatchResolveInputMeta(IBuildJob* Job, IRequestOwner& Owner) final;
|
|
void DispatchResolveInputData(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params) final;
|
|
void DispatchExecuteRemote(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params) final;
|
|
void DispatchExecuteLocal(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params) final;
|
|
|
|
private:
|
|
void Dispatch(IBuildJob* Job, IRequestOwner& Owner, const TCHAR* DebugName);
|
|
};
|
|
|
|
void FBuildScheduler::DispatchCacheQuery(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params)
|
|
{
|
|
Job->Schedule();
|
|
}
|
|
|
|
void FBuildScheduler::DispatchCacheStore(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params)
|
|
{
|
|
Job->Schedule();
|
|
}
|
|
|
|
void FBuildScheduler::DispatchResolveKey(IBuildJob* Job, IRequestOwner& Owner)
|
|
{
|
|
Dispatch(Job, Owner, TEXT("FBuildScheduler::DispatchResolveKey"));
|
|
}
|
|
|
|
void FBuildScheduler::DispatchResolveInputMeta(IBuildJob* Job, IRequestOwner& Owner)
|
|
{
|
|
Dispatch(Job, Owner, TEXT("FBuildScheduler::DispatchResolveInputMeta"));
|
|
}
|
|
|
|
void FBuildScheduler::DispatchResolveInputData(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params)
|
|
{
|
|
Dispatch(Job, Owner, TEXT("FBuildScheduler::DispatchResolveInputData"));
|
|
}
|
|
|
|
void FBuildScheduler::DispatchExecuteRemote(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params)
|
|
{
|
|
Dispatch(Job, Owner, TEXT("FBuildScheduler::DispatchExecuteRemote"));
|
|
}
|
|
|
|
void FBuildScheduler::DispatchExecuteLocal(IBuildJob* Job, IRequestOwner& Owner, const FBuildSchedulerParams& Params)
|
|
{
|
|
Dispatch(Job, Owner, TEXT("FBuildScheduler::DispatchExecuteLocal"));
|
|
}
|
|
|
|
void FBuildScheduler::Dispatch(IBuildJob* Job, IRequestOwner& Owner, const TCHAR* DebugName)
|
|
{
|
|
if (Owner.GetPriority() == EPriority::Blocking)
|
|
{
|
|
Job->Schedule();
|
|
}
|
|
else
|
|
{
|
|
new FBuildSchedulerRequest(Job, Owner, DebugName);
|
|
}
|
|
}
|
|
|
|
IBuildScheduler* CreateBuildScheduler()
|
|
{
|
|
return new FBuildScheduler();
|
|
}
|
|
|
|
} // UE::DerivedData::Private
|