Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/DerivedDataBuildScheduler.cpp
devin doucette 5299622734 DDC: Schedule non-blocking builds using tasks
#rb Zousar.Shaker
#rnx

#ROBOMERGE-SOURCE: CL 16870688 in //UE5/Main/...
#ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v836-16769935)

[CL 16870691 by devin doucette in ue5-release-engine-test branch]
2021-07-16 01:25:15 -04:00

112 lines
2.9 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 FBuildScheduler final : public IBuildScheduler
{
public:
void DispatchCacheQuery(IBuildJob* Job, const FBuildSchedulerParams& Params) final;
void DispatchCacheStore(IBuildJob* Job, const FBuildSchedulerParams& Params) final;
void DispatchResolveKey(IBuildJob* Job) final;
void DispatchResolveInputMeta(IBuildJob* Job) final;
void DispatchResolveInputData(IBuildJob* Job, const FBuildSchedulerParams& Params) final;
void DispatchExecuteRemote(IBuildJob* Job, const FBuildSchedulerParams& Params) final;
void DispatchExecuteLocal(IBuildJob* Job, const FBuildSchedulerParams& Params) final;
};
void FBuildScheduler::DispatchCacheQuery(IBuildJob* Job, const FBuildSchedulerParams& Params)
{
Job->Schedule();
}
void FBuildScheduler::DispatchCacheStore(IBuildJob* Job, const FBuildSchedulerParams& Params)
{
Job->Schedule();
}
void FBuildScheduler::DispatchResolveKey(IBuildJob* Job)
{
if (Job->GetPriority() == EPriority::Blocking)
{
Job->Schedule();
}
else
{
Tasks::Launch(TEXT("FBuildScheduler::DispatchResolveKey"),
[Job = TRequest(Job)] { Job->Schedule(); },
LowLevelTasks::ETaskPriority::BackgroundNormal);
}
}
void FBuildScheduler::DispatchResolveInputMeta(IBuildJob* Job)
{
if (Job->GetPriority() == EPriority::Blocking)
{
Job->Schedule();
}
else
{
Tasks::Launch(TEXT("FBuildScheduler::DispatchResolveInputMeta"),
[Job = TRequest(Job)] { Job->Schedule(); },
LowLevelTasks::ETaskPriority::BackgroundNormal);
}
}
void FBuildScheduler::DispatchResolveInputData(IBuildJob* Job, const FBuildSchedulerParams& Params)
{
if (Job->GetPriority() == EPriority::Blocking)
{
Job->Schedule();
}
else
{
Tasks::Launch(TEXT("FBuildScheduler::DispatchResolveInputData"),
[Job = TRequest(Job)] { Job->Schedule(); },
LowLevelTasks::ETaskPriority::BackgroundNormal);
}
}
void FBuildScheduler::DispatchExecuteRemote(IBuildJob* Job, const FBuildSchedulerParams& Params)
{
if (Job->GetPriority() == EPriority::Blocking)
{
Job->Schedule();
}
else
{
Tasks::Launch(TEXT("FBuildScheduler::DispatchExecuteRemote"),
[Job = TRequest(Job)] { Job->Schedule(); },
LowLevelTasks::ETaskPriority::BackgroundNormal);
}
}
void FBuildScheduler::DispatchExecuteLocal(IBuildJob* Job, const FBuildSchedulerParams& Params)
{
if (Job->GetPriority() == EPriority::Blocking)
{
Job->Schedule();
}
else
{
Tasks::Launch(TEXT("FBuildScheduler::DispatchExecuteLocal"),
[Job = TRequest(Job)] { Job->Schedule(); },
LowLevelTasks::ETaskPriority::BackgroundNormal);
}
}
IBuildScheduler* CreateBuildScheduler()
{
return new FBuildScheduler();
}
} // UE::DerivedData::Private