Files
UnrealEngineUWP/Engine/Source/Developer/DerivedDataCache/Private/DerivedDataBuildJobContext.h
devin doucette 01c33e6702 DDC: Reworked FBuildSession to allow filtering of payloads
- Build now takes optional inputs for consistency with BuildAction.
- BuildAction has been renamed to Build and works the same as Build except it starts from an action.
- Build now takes a FBuildPolicy, which is implicitly constructible from EBuildPolicy, and allows setting the policy by payload.
- FBuildContext and FBuildConfigContext now have policy masks that allow clearing flags across every payload in the build.
- EBuildPolicy has CacheStore split into CacheStoreOnQuery and CacheStoreOnBuild for more control of cache behavior.
- Builds now use consistent completion callback parameters, FBuildCompleteParams.
- Build types now have debugger visualization.

#rb Zousar.Shaker
#rnx

#ROBOMERGE-AUTHOR: devin.doucette
#ROBOMERGE-SOURCE: CL 17874670 in //UE5/Release-5.0/... via CL 17874724
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v883-17842818)
#ROBOMERGE[STARSHIP]: UE5-Main

[CL 17874740 by devin doucette in ue5-release-engine-test branch]
2021-10-20 12:38:01 -04:00

96 lines
3.2 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 "Experimental/Async/LazyEvent.h"
#include "Memory/MemoryFwd.h"
#include "Serialization/CompactBinary.h"
#include "Templates/Function.h"
namespace UE::DerivedData { class FBuildOutputBuilder; }
namespace UE::DerivedData { class FPayload; }
namespace UE::DerivedData { class IBuildJob; }
namespace UE::DerivedData { class IRequestOwner; }
namespace UE::DerivedData { enum class EBuildPolicy : uint32; }
namespace UE::DerivedData { enum class ECachePolicy : uint32; }
namespace UE::DerivedData { enum class EPriority : 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);
void BeginBuild(IRequestOwner& Owner, TUniqueFunction<void ()>&& OnEndBuild);
FStringView GetName() const final;
inline const FCacheKey& GetCacheKey() const { return CacheKey; }
inline ECachePolicy GetCachePolicyMask() const final { return CachePolicyMask; }
inline EBuildPolicy GetBuildPolicyMask() const final { return BuildPolicyMask; }
inline uint64 GetRequiredMemory() const { return RequiredMemory; }
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;
void SetCacheBucket(FCacheBucket Bucket) final;
void SetCachePolicyMask(ECachePolicy Policy) final;
void SetBuildPolicyMask(EBuildPolicy Policy) final;
void SetRequiredMemory(uint64 InRequiredMemory) final { RequiredMemory = InRequiredMemory; }
void SkipDeterministicOutputCheck() final { 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;
UE::FLazyEvent BuildCompleteEvent{EEventMode::ManualReset};
TUniqueFunction<void ()> OnEndBuild;
IRequestOwner* Owner{};
uint64 RequiredMemory{};
ECachePolicy CachePolicyMask;
EBuildPolicy BuildPolicyMask;
bool bIsAsyncBuild{false};
bool bIsAsyncBuildComplete{false};
bool bDeterministicOutputCheck{true};
};
} // UE::DerivedData::Private