Files
UnrealEngineUWP/Engine/Plugins/Runtime/Metasound/Source/MetasoundFrontend/Private/MetasoundFrontendQuerySteps.cpp
phil popp d4af456a9c Metasound Frontend Perf Tuneup
- Added frontend search engine to cache frontend queries
- Allowing frontend queries to be updated in place.
- Tracking node registration transactions to allow incremental runtime checks of newly registered nodes.
- Create public RegistryContainer interface and hide implementation to allow for further optimizations without changing public headers
#jira UEAU-749
#rb Max.Hayes, Jimmy.Smith
#preflight 606399a6e05c4e0001a0d173

#ROBOMERGE-SOURCE: CL 15868737 in //UE5/Release-5.0-EarlyAccess/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-EarlyAccess -> Main) (v786-15839533)

[CL 15868744 by phil popp in ue5-main branch]
2021-03-30 18:22:10 -04:00

90 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "MetasoundFrontendQuerySteps.h"
#include "CoreMinimal.h"
#include "MetasoundFrontend.h"
#include "MetasoundFrontendDocument.h"
#include "MetasoundFrontendRegistryTransaction.h"
namespace Metasound
{
void FGenerateAllAvailableNodeClasses::Generate(TArray<FFrontendQueryEntry>& OutEntries) const
{
const TArray<Frontend::FNodeClassInfo> ClassInfos = Frontend::GetAllAvailableNodeClasses();
for (const Frontend::FNodeClassInfo& ClassInfo : ClassInfos)
{
OutEntries.Emplace(TInPlaceType<FMetasoundFrontendClass>(), Frontend::GenerateClassDescription(ClassInfo));
}
}
FGenerateNewlyAvailableNodeClasses::FGenerateNewlyAvailableNodeClasses()
: CurrentTransactionID(Frontend::GetOriginRegistryTransactionID())
{
}
void FGenerateNewlyAvailableNodeClasses::Generate(TArray<FFrontendQueryEntry>& OutEntries) const
{
const TArray<Frontend::FNodeClassInfo> ClassInfos = Frontend::GetNodeClassesRegisteredSince(CurrentTransactionID, &CurrentTransactionID);
for (const Frontend::FNodeClassInfo& ClassInfo : ClassInfos)
{
OutEntries.Emplace(TInPlaceType<FMetasoundFrontendClass>(), Frontend::GenerateClassDescription(ClassInfo));
}
}
FFilterClassesByInputVertexDataType::FFilterClassesByInputVertexDataType(const FName& InTypeName)
: InputVertexTypeName(InTypeName)
{
}
bool FFilterClassesByInputVertexDataType::Filter(const FFrontendQueryEntry& InEntry) const
{
check(InEntry.Value.IsType<FMetasoundFrontendClass>());
return InEntry.Value.Get<FMetasoundFrontendClass>().Interface.Inputs.ContainsByPredicate(
[this](const FMetasoundFrontendClassInput& InDesc)
{
return InDesc.TypeName == InputVertexTypeName;
}
);
}
FFilterClassesByOutputVertexDataType::FFilterClassesByOutputVertexDataType(const FName& InTypeName)
: OutputVertexTypeName(InTypeName)
{
}
bool FFilterClassesByOutputVertexDataType::Filter(const FFrontendQueryEntry& InEntry) const
{
return InEntry.Value.Get<FMetasoundFrontendClass>().Interface.Outputs.ContainsByPredicate(
[this](const FMetasoundFrontendClassOutput& InDesc)
{
return InDesc.TypeName == OutputVertexTypeName;
}
);
}
FFilterClassesByClassName::FFilterClassesByClassName(const FMetasoundFrontendClassName& InClassName)
: ClassName(InClassName)
{
}
bool FFilterClassesByClassName::Filter(const FFrontendQueryEntry& InEntry) const
{
return InEntry.Value.Get<FMetasoundFrontendClass>().Metadata.ClassName == ClassName;
}
FFilterClassesByClassID::FFilterClassesByClassID(const FGuid InClassID)
: ClassID(InClassID)
{
}
bool FFilterClassesByClassID::Filter(const FFrontendQueryEntry& InEntry) const
{
return InEntry.Value.Get<FMetasoundFrontendClass>().ID == ClassID;
}
}