Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/DerivedDataBuildJobContext.h
devin doucette bfda02d384 DDC: Replaced FRequest with FRequestGroup to handle nested and chained requests more robustly
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]
2021-08-04 18:08:50 -04:00

93 lines
2.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Compression/CompressedBuffer.h"
#include "Containers/Map.h"
#include "Containers/StringView.h"
#include "Containers/UnrealString.h"
#include "DerivedDataBuildFunction.h"
#include "DerivedDataCacheKey.h"
#include "DerivedDataRequest.h"
#include "HAL/Event.h"
#include "Memory/MemoryFwd.h"
#include "Serialization/CompactBinary.h"
#include "Templates/Function.h"
namespace UE::DerivedData { class FBuildOutputBuilder; }
namespace UE::DerivedData { class IBuildJob; }
namespace UE::DerivedData { enum class EBuildPolicy : uint8; }
namespace UE::DerivedData { enum class ECachePolicy : uint8; }
namespace UE::DerivedData::Private
{
class FBuildJobContext final : public FBuildContext, public FBuildConfigContext, public FRequestBase
{
public:
FBuildJobContext(
IBuildJob& Job,
const FCacheKey& CacheKey,
const IBuildFunction& Function,
FBuildOutputBuilder& OutputBuilder,
EBuildPolicy BuildPolicy);
void BeginBuild(IRequestOwner& Owner, TUniqueFunction<void ()>&& OnEndBuild);
FStringView GetName() const final;
inline const FCacheKey& GetCacheKey() const { return CacheKey; }
inline ECachePolicy GetCachePolicy() const final { return CachePolicy; }
inline EBuildPolicy GetBuildPolicy() const final { return BuildPolicy; }
inline bool ShouldCheckDeterministicOutput() const { return bDeterministicOutputCheck; }
void AddConstant(FStringView Key, FCbObject&& Value);
void AddInput(FStringView Key, const FCompressedBuffer& Value);
void ResetInputs();
private:
FCbObject FindConstant(FStringView Key) const final;
FSharedBuffer FindInput(FStringView Key) const final;
void AddPayload(const FPayload& Payload) final;
void AddPayload(const FPayloadId& Id, const FCompressedBuffer& Buffer) final;
void AddPayload(const FPayloadId& Id, const FCompositeBuffer& Buffer) final;
void AddPayload(const FPayloadId& Id, const FSharedBuffer& Buffer) final;
void AddPayload(const FPayloadId& Id, const FCbObject& Object) final;
void EndBuild();
void BeginAsyncBuild() final;
void EndAsyncBuild() final;
FCacheBucket CreateCacheBucket(FStringView Name) const final;
void SetCacheBucket(FCacheBucket Bucket) final;
void SetCachePolicy(ECachePolicy Policy) final;
void SetBuildPolicy(EBuildPolicy Policy) final;
void SkipDeterministicOutputCheck() { bDeterministicOutputCheck = false; }
void SetPriority(EPriority Priority) final;
void Cancel() final;
void Wait() final;
private:
IBuildJob& Job;
FCacheKey CacheKey;
const IBuildFunction& Function;
FBuildOutputBuilder& OutputBuilder;
TMap<FString, FCbObject> Constants;
TMap<FString, FCompressedBuffer> Inputs;
FEventRef BuildCompleteEvent{EEventMode::ManualReset};
TUniqueFunction<void ()> OnEndBuild;
IRequestOwner* Owner{};
ECachePolicy CachePolicy;
EBuildPolicy BuildPolicy;
bool bIsAsyncBuild{false};
bool bIsAsyncBuildComplete{false};
bool bDeterministicOutputCheck{true};
};
} // UE::DerivedData::Private