2021-05-25 15:47:38 -04:00
|
|
|
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "Compression/CompressedBuffer.h"
|
|
|
|
|
#include "Containers/Map.h"
|
|
|
|
|
#include "Containers/StringView.h"
|
|
|
|
|
#include "DerivedDataBuildFunction.h"
|
|
|
|
|
#include "DerivedDataCacheKey.h"
|
2021-08-04 18:08:50 -04:00
|
|
|
#include "DerivedDataRequest.h"
|
2022-01-19 00:27:48 -05:00
|
|
|
#include "DerivedDataSharedString.h"
|
2021-09-27 09:36:23 -04:00
|
|
|
#include "Experimental/Async/LazyEvent.h"
|
2021-05-25 15:47:38 -04:00
|
|
|
#include "Memory/MemoryFwd.h"
|
|
|
|
|
#include "Serialization/CompactBinary.h"
|
|
|
|
|
#include "Templates/Function.h"
|
|
|
|
|
|
|
|
|
|
namespace UE::DerivedData { class FBuildOutputBuilder; }
|
|
|
|
|
namespace UE::DerivedData { class IBuildJob; }
|
2021-08-06 15:50:00 -04:00
|
|
|
namespace UE::DerivedData { class IRequestOwner; }
|
2021-09-21 01:10:55 -04:00
|
|
|
namespace UE::DerivedData { enum class EBuildPolicy : uint32; }
|
|
|
|
|
namespace UE::DerivedData { enum class ECachePolicy : uint32; }
|
2021-08-06 15:50:00 -04:00
|
|
|
namespace UE::DerivedData { enum class EPriority : uint8; }
|
2021-05-25 15:47:38 -04:00
|
|
|
|
|
|
|
|
namespace UE::DerivedData::Private
|
|
|
|
|
{
|
|
|
|
|
|
2021-08-04 18:08:50 -04:00
|
|
|
class FBuildJobContext final : public FBuildContext, public FBuildConfigContext, public FRequestBase
|
2021-05-25 15:47:38 -04:00
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
FBuildJobContext(
|
2021-08-04 18:08:50 -04:00
|
|
|
IBuildJob& Job,
|
|
|
|
|
const FCacheKey& CacheKey,
|
|
|
|
|
const IBuildFunction& Function,
|
2021-10-20 12:38:01 -04:00
|
|
|
FBuildOutputBuilder& OutputBuilder);
|
2021-08-04 18:08:50 -04:00
|
|
|
|
|
|
|
|
void BeginBuild(IRequestOwner& Owner, TUniqueFunction<void ()>&& OnEndBuild);
|
2021-05-25 15:47:38 -04:00
|
|
|
|
2022-01-19 00:27:48 -05:00
|
|
|
const FSharedString& GetName() const final;
|
2021-06-22 11:27:03 -04:00
|
|
|
|
2021-05-25 15:47:38 -04:00
|
|
|
inline const FCacheKey& GetCacheKey() const { return CacheKey; }
|
|
|
|
|
|
2021-10-20 12:38:01 -04:00
|
|
|
inline ECachePolicy GetCachePolicyMask() const final { return CachePolicyMask; }
|
|
|
|
|
inline EBuildPolicy GetBuildPolicyMask() const final { return BuildPolicyMask; }
|
2021-08-06 17:53:47 -04:00
|
|
|
inline uint64 GetRequiredMemory() const { return RequiredMemory; }
|
2021-05-25 15:47:38 -04:00
|
|
|
inline bool ShouldCheckDeterministicOutput() const { return bDeterministicOutputCheck; }
|
|
|
|
|
|
2022-01-19 00:27:48 -05:00
|
|
|
void AddConstant(FUtf8StringView Key, FCbObject&& Value);
|
|
|
|
|
void AddInput(FUtf8StringView Key, const FCompressedBuffer& Value);
|
2021-05-25 15:47:38 -04:00
|
|
|
|
2021-11-24 13:25:25 -05:00
|
|
|
void AddError(FStringView Message) final;
|
|
|
|
|
void AddWarning(FStringView Message) final;
|
|
|
|
|
void AddMessage(FStringView Message) final;
|
|
|
|
|
|
2021-05-25 15:47:38 -04:00
|
|
|
void ResetInputs();
|
|
|
|
|
|
|
|
|
|
private:
|
2022-01-19 00:27:48 -05:00
|
|
|
FCbObject FindConstant(FUtf8StringView Key) const final;
|
|
|
|
|
FSharedBuffer FindInput(FUtf8StringView Key) const final;
|
2021-05-25 15:47:38 -04:00
|
|
|
|
2022-01-06 11:05:57 -05:00
|
|
|
void AddValue(const FValueId& Id, const FValue& Value) final;
|
|
|
|
|
void AddValue(const FValueId& Id, const FCompressedBuffer& Buffer) final;
|
|
|
|
|
void AddValue(const FValueId& Id, const FCompositeBuffer& Buffer, uint64 BlockSize) final;
|
|
|
|
|
void AddValue(const FValueId& Id, const FSharedBuffer& Buffer, uint64 BlockSize) final;
|
|
|
|
|
void AddValue(const FValueId& Id, const FCbObject& Object) final;
|
2021-05-25 15:47:38 -04:00
|
|
|
|
2021-08-04 18:08:50 -04:00
|
|
|
void EndBuild();
|
2021-05-25 15:47:38 -04:00
|
|
|
void BeginAsyncBuild() final;
|
|
|
|
|
void EndAsyncBuild() final;
|
|
|
|
|
|
|
|
|
|
void SetCacheBucket(FCacheBucket Bucket) final;
|
2021-10-20 12:38:01 -04:00
|
|
|
void SetCachePolicyMask(ECachePolicy Policy) final;
|
|
|
|
|
void SetBuildPolicyMask(EBuildPolicy Policy) final;
|
2021-08-06 17:53:47 -04:00
|
|
|
void SetRequiredMemory(uint64 InRequiredMemory) final { RequiredMemory = InRequiredMemory; }
|
|
|
|
|
void SkipDeterministicOutputCheck() final { bDeterministicOutputCheck = false; }
|
2021-05-25 15:47:38 -04:00
|
|
|
|
2021-08-04 18:08:50 -04:00
|
|
|
void SetPriority(EPriority Priority) final;
|
|
|
|
|
void Cancel() final;
|
|
|
|
|
void Wait() final;
|
2021-05-25 15:47:38 -04:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
IBuildJob& Job;
|
|
|
|
|
FCacheKey CacheKey;
|
|
|
|
|
const IBuildFunction& Function;
|
|
|
|
|
FBuildOutputBuilder& OutputBuilder;
|
2022-01-19 00:27:48 -05:00
|
|
|
TMap<FUtf8SharedString, FCbObject> Constants;
|
|
|
|
|
TMap<FUtf8SharedString, FCompressedBuffer> Inputs;
|
2021-09-27 09:36:23 -04:00
|
|
|
UE::FLazyEvent BuildCompleteEvent{EEventMode::ManualReset};
|
2021-08-04 18:08:50 -04:00
|
|
|
TUniqueFunction<void ()> OnEndBuild;
|
|
|
|
|
IRequestOwner* Owner{};
|
2021-08-06 17:53:47 -04:00
|
|
|
uint64 RequiredMemory{};
|
2021-10-20 12:38:01 -04:00
|
|
|
ECachePolicy CachePolicyMask;
|
|
|
|
|
EBuildPolicy BuildPolicyMask;
|
2021-05-25 15:47:38 -04:00
|
|
|
bool bIsAsyncBuild{false};
|
|
|
|
|
bool bIsAsyncBuildComplete{false};
|
|
|
|
|
bool bDeterministicOutputCheck{true};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // UE::DerivedData::Private
|