496 lines
39 KiB
XML
496 lines
39 KiB
XML
<?xml version='1.0' ?>
|
|
<BuildGraph xmlns="http://www.epicgames.com/BuildGraph" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.epicgames.com/BuildGraph ../../../Build/Graph/Schema.xsd" >
|
|
|
|
<!-- Horde Options -->
|
|
<EnvVar Name="UE_HORDE_JOBID"/>
|
|
<EnvVar Name="UE_HORDE_STEPID"/>
|
|
<Option Name="Horde" Restrict="true|false" DefaultValue="false" Description="Whether the build is running under Horde"/>
|
|
<Option Name="PreflightChange" DefaultValue="" Description="Preflight CL number if preflight, empty otherwise"/>
|
|
<Option Name="SetPreflightFlag" DefaultValue="true" Description="Whether to set the IsPreflight flag to true for preflights. Use with caution: this will cause things like build versions to be set to their non-preflight form."/>
|
|
<Property Name="IsPreflight" Value="false"/>
|
|
<Property Name="IsPreflight" Value="true" If="'$(PreflightChange)' != '' And $(SetPreflightFlag)"/>
|
|
<Property Name="PreflightSuffix" Value=""/>
|
|
<Property Name="PreflightSuffix" Value="-PF-$(PreflightChange)-$(UE_HORDE_JOBID)" If="$(IsPreflight)"/>
|
|
<Property Name="BuildName" Value="$(EscapedBranch)-CL-$(Change)$(PreflightSuffix)"/>
|
|
<Option Name="CompileCategory" DefaultValue="Editors" Description="Category string for Compile Label"/>
|
|
<Option Name="RunCategory" DefaultValue="Test" Description="Category string for Run Label"/>
|
|
<Option Name="SingleAgentCompile" Restrict="true|false" DefaultValue="false" Description="Run all compile steps on same agent"/>
|
|
<Option Name="AdditionalEditorCompileArgs" DefaultValue="" Description="Additional Compile Arguments for the Editor"/>
|
|
|
|
<!-- Projects setup-->
|
|
<Option Name="Projects" DefaultValue="false" Restrict=".+" Description="The projects to test"/>
|
|
<Error Message="No project names specified" If="'$(Projects)' == 'false'"/>
|
|
<Option Name="ProjectsToReportToPRS" DefaultValue="false" Restrict=".+" Description="The projects to upload test results to PRS"/>
|
|
|
|
<!-- Platform Options -->
|
|
<Option Name="Platforms" DefaultValue="Win64" Description="The list of platforms to profile"/>
|
|
<Property Name="Win64CompileAgentType" Value="Win64Compile;Win64"/>
|
|
<Property Name="MacCompileAgentType" Value="TestMac"/>
|
|
<Property Name="LinuxCompileAgentType" Value="Linux"/>
|
|
<Error Message="No platforms specified" If="'$(Platforms)' == ''"/>
|
|
|
|
<!-- Build Options -->
|
|
<Option Name="NoDebugInfo" Restrict="true|false" DefaultValue="false" Description="Compile without including debug info"/>
|
|
<Option Name="WithTSAN" Restrict="true|false" DefaultValue="false" Description="Compile using TSAN"/>
|
|
<Property Name="ExtraPluginsCommaDelims" Value="EditorTests"/>
|
|
<Property Name="ExtraPluginsPlusDelims" Value=""/> <!-- populated programmatically -->
|
|
<ForEach Name="Plugin" Values="$(ExtraPluginsCommaDelims)">
|
|
<Property Name="ExtraPluginString" Value="$(Plugin)" If="'$(ExtraPluginsPlusDelims)' == ''"/>
|
|
<Property Name="ExtraPluginString" Value="$(ExtraPluginsPlusDelims)+$(Plugin)" If="'$(ExtraPluginsPlusDelims)' != ''"/>
|
|
<Property Name="ExtraPluginsPlusDelims" Value="$(ExtraPluginString)"/>
|
|
</ForEach>
|
|
<Property Name="EditorCompileArgs" Value=""/>
|
|
<Property Name="EditorCompileArgs" Value="-BuildPlugin=$(ExtraPluginsPlusDelims)" If="'$(ExtraPluginsPlusDelims)' != ''"/>
|
|
<Property Name="EditorCompileArgs" Value="$(EditorCompileArgs) -nodebuginfo" If="$(NoDebugInfo)"/>
|
|
<Property Name="TSANEditorCompileArgs" Value="-EnableTSAN -Monolithic"/>
|
|
<Property Name="EditorCompileArgs" Value="$(EditorCompileArgs) $(AdditionalEditorCompileArgs)" If="'$(AdditionalEditorCompileArgs)' != ''"/>
|
|
|
|
<!-- Get shared properties -->
|
|
<Include Script="Graph/Tasks/Inc/SharedProperties.xml" />
|
|
|
|
<!-- Automation uses its own network output directory -->
|
|
<Property Name="AutomationNetworkRootDir" Value="$(NetworkReportRoot)\EditorPerf"/>
|
|
<Property Name="AutomationNetworkRootDir" Value="$(NetworkReportRoot)/EditorPerf" If="'$(HostPlatform)' != 'Win64'"/>
|
|
<Property Name="AutomationLocalOutputDir" Value="$(RootDir)/LocalBuilds/Reports"/>
|
|
|
|
<!-- Outputs for this run -->
|
|
<Property Name="AutomationOutputDir" Value="$(AutomationLocalOutputDir)"/>
|
|
<Property Name="AutomationOutputDir" Value="$(RootDir)/Engine/Programs/AutomationTool/Saved/Logs" If="$(IsBuildMachine)"/>
|
|
<!-- We need to share logs between nodes for TSAN runs so store the logs to a share rather than Horde's Log storage -->
|
|
<Property Name="AutomationNetworkOutputDir" Value="$(AutomationNetworkRootDir)\$(BuildName)" If="$(WithTSAN)"/>
|
|
<Property Name="AutomationNetworkOutputDir" Value="$(AutomationNetworkRootDir)/$(BuildName)" If="$(WithTSAN) and '$(HostPlatform)' != 'Win64'"/>
|
|
<Property Name="AutomationOutputDir" Value="$(AutomationLocalOutputDir)" If="$(WithTSAN)"/>
|
|
<Property Name="AutomationOutputDir" Value="$(AutomationNetworkOutputDir)" If="$(WithTSAN) and $(IsBuildMachine)"/>
|
|
|
|
<!-- Options for warm+cold vs cold cache only -->
|
|
<Option Name="IncludeWarmPhase" DefaultValue="true" Description="Whether to include a warm cache phase. Default is true and will run cold and warm tests. If false, only a cold test will run."/>
|
|
<Property Name="Phases" Value="Cold;Warm"/>
|
|
<Property Name="Phases" Value="Cold" If="'$(IncludeWarmPhase)'=='false'"/>
|
|
|
|
<!-- Arguments for tracing -->
|
|
<Property Name="TraceDir" Value="$(RootDir)/Engine/Programs/AutomationTool/Saved/Logs/Traces"/>
|
|
|
|
<!-- Arguments for phases, keep in mind that these are passed to both the DDCCleanupCommandlet and RunUnreal -->
|
|
<Option Name="EnableBasePhaseTests" DefaultValue="true" Description="Enable the base phase perf tests."/>
|
|
<Property Name="EnableBasePhaseTests" Value="false" If="$(WithTSAN)"/>
|
|
<Option Name="ColdArgs" DefaultValue="-ddc=Cold -NoAssetRegistryCacheRead" Description="Arguments to unreal for the cold phase"/>
|
|
<Option Name="WarmArgs" DefaultValue="-ddc=Warm" Description="Arguments to unreal for the warm phase"/>
|
|
|
|
<!-- Iterations to run and average together -->
|
|
<Option Name="Iterations" DefaultValue="1" Description="The list of iteration numbers to run. For example '1;2;3' for three iterations"/>
|
|
|
|
<!-- Option for number of PIE iterations to run (per editor launch) -->
|
|
<Property Name="DefaultNumIterationsPie" Value="2" />
|
|
<Option Name="NumIterationsPIE" DefaultValue="$(DefaultNumIterationsPIE)" Description="Specify the number of times to start/stop PIE sessions in a single editor run."/>
|
|
<Property Name="NumIterationsPIE" Value="1" If="$(WithTSAN)"/>
|
|
<Do If="'$(NumIterationsPIE)' <= '0'">
|
|
<Warning Message="NumIterationPIE must be greater than 0. Setting to default of $(DefaultNumIterationsPIE)."/>
|
|
<Property Name="NumIterationsPIE" Value="$(DefaultNumIterationsPIE)" />
|
|
</Do>
|
|
<Property Name="ArgIterationsPIE" Value="-ini:Engine:[ConsoleVariables]:project.iteration.pie.testiterations=$(NumIterationsPIE)" />
|
|
|
|
<!-- Arguments for dumping shader compilation timing statistics to CSV files as Horde artifacts -->
|
|
<Property Name="DumpShaderTimingStatsArgs" Value="-DPCVars=r.ShaderCompiler.DumpShaderTimeStats=true" />
|
|
|
|
<!-- Used to determine if we will include internal projects -->
|
|
<Option Name="IsLicensee" Restrict="true|false" DefaultValue="false" Description="Define to true if this script is used externally."/>
|
|
|
|
<!-- Internal property to track all projects that have been declared -->
|
|
<Property Name="AllProjects" Value=""/>
|
|
|
|
<!-- A macro that can be used to easily set up a new test project. -->
|
|
<Macro Name="SetupPerfProject" Arguments="ProjectName;ProjectPath" OptionalArguments="CopyDefaultsFrom;ProjectTarget;EditorTarget;MapPath;GameSpecificArgs;UseBinariesFrom;ExtraNonCopyableArgs;GauntletTest;GauntletTestArgs">
|
|
<Property Name="$(ProjectName)__ProjectPath" Value="$(ProjectPath)" CreateInParentScope="true"/>
|
|
|
|
<Property Name="$(ProjectName)__ProjectTarget" Value="$(ProjectName)" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__ProjectTarget" Value="$($(CopyDefaultsFrom)__ProjectTarget)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__ProjectTarget" Value="$(ProjectTarget)" If="'$(ProjectTarget)' != ''"/>
|
|
|
|
<Property Name="$(ProjectName)__EditorTarget" Value="$(ProjectName)Editor" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__EditorTarget" Value="$($(CopyDefaultsFrom)__EditorTarget)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__EditorTarget" Value="$(EditorTarget)" If="'$(EditorTarget)' != ''"/>
|
|
|
|
<!-- Stash the MapPath so that we can use it later via CopyDefaultsFrom and construct new MapArgs -->
|
|
<Property Name="$(ProjectName)__BaseMapPath" Value="$(MapPath)" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__BaseMapPath" Value="$($(CopyDefaultsFrom)__BaseMapPath)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
|
|
<Property Name="$(ProjectName)__SpecificArgs" Value="" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__SpecificArgs" Value="$($(CopyDefaultsFrom)__SpecificArgs)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__SpecificArgs" Value="$(GameSpecificArgs)" If="'$(GameSpecificArgs)' != ''"/>
|
|
|
|
<Property Name="$(ProjectName)__UseBinariesFrom" Value="" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__UseBinariesFrom" Value="$(CopyDefaultsFrom)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__UseBinariesFrom" Value="$(UseBinariesFrom)" If="'$(UseBinariesFrom)' != ''"/>
|
|
|
|
<Property Name="$(ProjectName)__GauntletTest" Value="EditorTests" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__GauntletTest" Value="$($(CopyDefaultsFrom)__GauntletTest)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__GauntletTest" Value="$(GauntletTest)" If="'$(GauntletTest)' != ''"/>
|
|
|
|
<Property Name="$(ProjectName)__GauntletTestArgs" Value="" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__GauntletTestArgs" Value="$($(CopyDefaultsFrom)__GauntletTestArgs)" If="'$(CopyDefaultsFrom)' != ''"/>
|
|
<Property Name="$(ProjectName)__GauntletTestArgs" Value="$(GauntletTestArgs)" If="'$(GauntletTestArgs)' != ''"/>
|
|
|
|
<!-- MapArgs is an "indirect" parameter. We don't ever copy it around, instead we always construct it based on BaseMapPath and others parameters -->
|
|
<Property Name="$(ProjectName)__MapArgs" Value="" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__MapArgs" Value="-ini:Engine:[/Script/Engine.AutomationTestSettings]:MapsToPIETest=\"$($(ProjectName)__BaseMapPath)\"" If="'$($(ProjectName)__BaseMapPath)' != '' and '$($(ProjectName)__GauntletTest)'=='EditorTests'" />
|
|
|
|
<!-- Immediately resolve any indirections on UseBinariesFrom. We cannot support them later when we set up the actual nodes. -->
|
|
<Do If="'$($(ProjectName)__UseBinariesFrom)' != ''">
|
|
<Property Name="$(ProjectName)__UseBinariesFrom" Value="$($($(ProjectName)__UseBinariesFrom)__UseBinariesFrom)" If="'$($($(ProjectName)__UseBinariesFrom)__UseBinariesFrom)' != ''"/>
|
|
</Do>
|
|
|
|
<Property Name="$(ProjectName)__ExtraNonCopyableArgs" Value="" CreateInParentScope="true"/>
|
|
<Property Name="$(ProjectName)__ExtraNonCopyableArgs" Value="$(ExtraNonCopyableArgs)" If="'$(ExtraNonCopyableArgs)' != ''"/>
|
|
|
|
<Property Name="AllProjects" Value="$(AllProjects);$(ProjectName)" />
|
|
</Macro>
|
|
|
|
<!-- Inject internal projects default argument at the global scope -->
|
|
<Include Script="../Restricted/NotForLicensees/Build/EditorPerfInternalArgs.xml" If="!$(IsLicensee)" />
|
|
|
|
<!-- Option to retain per-branch asset registry between runs so that warm is representative of user experience -->
|
|
<Property Name="AssetRegistryCache_Folder" Value="$(RootDir)/../../EditorPerfAssetRegistryCache/$(EscapedBranch)/"/>
|
|
|
|
<!-- Options for extra runtime args -->
|
|
<Option Name="AdditionalRuntimeArgs" DefaultValue="" Description="Additional Arguments to pass to RunTest"/>
|
|
|
|
<!-- Options for extra Zen Loader tests -->
|
|
<Option Name="EnableZenLoaderTest" DefaultValue="true" Description="Enable additional test per phase that uses the Zen Loader."/>
|
|
<Option Name="EnableZenLoaderAsyncThreadTest" DefaultValue="true" Description="Enable additional test per phase that uses the Zen Loader with an async loading thread."/>
|
|
<Option Name="DisableEditorDomainForZenLoaderTests" DefaultValue="true" Description="Explicitly disables editordomain (-noeditordomain) for zen loader tests"/>
|
|
|
|
<!-- Zen Loader tests specifc arguments -->
|
|
<Property Name="ZenLoaderTestArgs" Value="-zenloader"/>
|
|
<Property Name="NoZenLoaderTestArgs" Value="-nozenloader"/>
|
|
<Property Name="ZenLoaderAsyncTestArgs" Value="$(ZenLoaderTestArgs) -asyncloadingthread" />
|
|
|
|
<Property Name="ZenLoaderTestArgs" Value="$(ZenLoaderTestArgs) -noeditordomain" If="$(DisableEditorDomainForZenLoaderTests)" />
|
|
<Property Name="ZenLoaderAsyncTestArgs" Value="$(ZenLoaderAsyncTestArgs) -noeditordomain" If="$(DisableEditorDomainForZenLoaderTests)" />
|
|
|
|
<!-- Options for extra Zen Store tests -->
|
|
<Option Name="EnableZenStoreDDCTest" DefaultValue="false" Description="Enable additional test on warm phase that uses the Zen Store DDC."/>
|
|
|
|
<!-- Zen Store tests specific arguments -->
|
|
<Property Name="ZenServerCache" Value="$(RootDir)\ZenCache" />
|
|
<Property Name="ZenStoreCommonArgs" Value="-ini:Engine:[Zen.AutoLaunch]:LimitProcessLifetime=true -ZenDataPath=$(ZenServerCache) "/>
|
|
<Property Name="ZenStoreDDCPhaseArgs" Value="-ddc=ZenDDC"/>
|
|
<Property Name="ZenStoreDDCTestArgs" Value="$(ZenStoreCommonArgs)"/>
|
|
|
|
<!-- Options for extra LazyLoad tests -->
|
|
<Option Name="EnableLazyLoadNoZenLoaderTest" DefaultValue="false" Description="Enable additional test on warm phase that uses LazyLoad with Zen Loader disabled."/>
|
|
<Option Name="EnableLazyLoadZenLoaderTest" DefaultValue="false" Description="Enable additional test on warm phase that uses LazyLoad with Zen Loader enabled."/>
|
|
|
|
<!-- LazyLoad tests specific arguments -->
|
|
<Property Name="LazyLoadTestArgs" Value="-LazyLoadImports"/>
|
|
<Property Name="LazyLoadZenTestArgs" Value="$(LazyLoadTestArgs) -zenloader" />
|
|
|
|
<!-- Gauntlet arguments for all runs -->
|
|
<Property Name="GauntletArgs" Value="-build=editor -tempdir="$(RootDir)/Tests""/>
|
|
<Property Name="GauntletArgs" Value="$(GauntletArgs) -branch=$(Branch) -ECBranch="$(Branch)" -ECChangelist="$(Change)""/>
|
|
<Property Name="GauntletArgs" Value="$(GauntletArgs) -verbose -maxduration=7200" If="!$(WithTSAN)"/>
|
|
<Property Name="GauntletArgs" Value="$(GauntletArgs) -maxduration=7200 -LogIdleTimeout=1800" If="$(WithTSAN)"/>
|
|
|
|
<!-- Gauntlet arguments for profile runs -->
|
|
<Property Name="ProfileArgs" Value="-tracefiletrunc"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -EnablePlugins=$(ExtraPluginsCommaDelims)" If="'$(ExtraPluginsCommaDelims)' != ''"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -SuppressLogWarnings -SuppressLogErrors"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -GameInstanceLostTimerSeconds=600"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -NoLoadLevelAtStartup -Benchmarking -NODDCCLEANUP"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -NoShaderDistrib -VerboseShaderLogging"/>
|
|
<Property Name="ProfileArgs" Value="$(ProfileArgs) -ResumeOnCriticalFailure"/>
|
|
|
|
<!-- options for summarize runs -->
|
|
<Option Name="RunTraceSummary" DefaultValue="false" Description="Summarize the insights trace after the run"/>
|
|
<Option Name="UploadTraceTimersToPRS" DefaultValue="true" Description="Export top timers from the utrace to PRS."/>
|
|
<Option Name="NumberOfTopTimers" DefaultValue="150" Description="The number of top (by inclusive time) timers to extract from the utrace for the PRS upload."/>
|
|
<Property Name="TimerRegionsToUpload" Value="Editor.Boot;Editor.Interact"/>
|
|
|
|
<!-- Gauntlet arguments for commandlet, summarize runs -->
|
|
<Property Name="CommandletArgs" Value="-notraceserver"/>
|
|
<Property Name="SummarizeArgs" Value=""/>
|
|
|
|
<!-- Publish telemetry options -->
|
|
<Property Name="JobURL" Value="$(HordeDashboardURL)/job/$(UE_HORDE_JOBID)?step=$(UE_HORDE_STEPID)" />
|
|
<Option Name="TelemetryConfig" DefaultValue="" Description="The configuration to use when publishing telemetry data to a database"/>
|
|
<Property Name="TelemetryConfig" Value="UETelemetryStaging" If="$(IsBuildMachine) And $(IsPreflight) And '$(TelemetryConfig)' == '' And $(RunTraceSummary)"/>
|
|
<Property Name="TelemetryConfig" Value="UETelemetry" If="$(IsBuildMachine) And '$(TelemetryConfig)' == '' And $(RunTraceSummary)"/>
|
|
<Option Name="ExtraTelemetryArgs" DefaultValue="" Description="Extra arguments passed to the publish telemetry command"/>
|
|
<Property Name="ExtraTelemetryArgs" Value="$(ExtraTelemetryArgs) -JobLink="$(JobURL)"" If="'$(HordeDashboardURL)' != ''"/>
|
|
|
|
<!-- The main test running macro logic that is expanded with platform and dependency node names -->
|
|
<Property Name="TestOutputDir" Value=""/>
|
|
<Property Name="RunTestLogPath" Value=""/>
|
|
<Property Name="TraceFilePath" Value=""/>
|
|
<Macro Name="RunTest" Arguments="TestNameSuffix;Platform;ProjectName;ProjectTarget;NodeName;Phase;Iteration;Args;EditorArgs;Async;UploadToPRS">
|
|
<Property Name="TestName" Value="EditorPerf$(Phase)$(TestNameSuffix)"/>
|
|
<Property Name="AssetRegistryCacheRootFolderArg" Value="-AssetRegistryCacheRootFolder="$(AssetRegistryCache_Folder)""/>
|
|
|
|
<!-- Don't send telemetry for TSAN jobs as the time won't be comparable -->
|
|
<Property Name="EditorTelemetryArgs" Value=""/>
|
|
<Property Name="EditorTelemetryArgs" Value="-ST_SendTelemetry=false" If="$(WithTSAN)"/>
|
|
|
|
<!-- Don't itemize timers for TSAN jobs as the time won't be comparable -->
|
|
<Property Name="UploadToPRSEffective" Value="$(UploadToPRS)"/>
|
|
<Property Name="UploadToPRSEffective" Value="false" If="$(WithTSAN)"/>
|
|
|
|
<Property Name="TestFilterArgs" Value=""/>
|
|
<Property Name="CombinedEditorArgs" Value=""/>
|
|
|
|
<Do If="'$($(ProjectName)__GauntletTest)'=='EditorTests'">
|
|
<Property Name="TestFilter" Value="Project.Iteration.PIE"/>
|
|
<Property Name="TestFilterArgs" Value="-runtest=$(TestFilter)"/>
|
|
<Property Name="CombinedEditorArgs" Value="$(EditorArgs) $(TestFilterArgs) $(AssetRegistryCacheRootFolderArg) $(ArgIterationsPIE) $(EditorTelemetryArgs) $(DumpShaderTimingStatsArgs) -NoUbaController"/>
|
|
</Do>
|
|
<Do If="'$($(ProjectName)__GauntletTest)'!='EditorTests'">
|
|
<Property Name="CombinedEditorArgs" Value="$(EditorArgs) $(AssetRegistryCacheRootFolderArg) $(EditorTelemetryArgs)"/>
|
|
</Do>
|
|
|
|
<Property Name="IterationSuffix" Value=""/>
|
|
<Property Name="IterationSuffix" Value="$(Iteration)" If="'$(Iteration)' != '1'"/>
|
|
|
|
<Property Name="TestOutputDir" Value="$(AutomationOutputDir)/$(ProjectName)$(Platform)EditorPerf"/>
|
|
|
|
<Property Name="IterationName" Value="$(ProjectName)$(Platform)$(TestName)$(IterationSuffix)"/>
|
|
<Property Name="TraceFileName" Value="$(IterationName).utrace"/>
|
|
<Property Name="TraceFilePath" Value="$(TraceDir)/$(TraceFileName)"/>
|
|
<Property Name="TelemetryFileName" Value="$(IterationName)Telemetry.csv"/>
|
|
<Property Name="TelemetryFilePath" Value="$(TraceDir)/$(TelemetryFileName)"/>
|
|
|
|
<Property Name="LogOutputParams" Value="-logdir="$(TestOutputDir)""/>
|
|
<Property Name="ReportParams" Value="-WriteTestResultsForHorde -HordeTestDataKey="$(NodeName)$(PreflightSuffix)""/>
|
|
<Property Name="ArtifactName" Value="$(Phase)$(IterationSuffix)$(TestNameSuffix)"/>
|
|
<Property Name="AllGauntletArgs" Value="-Project=$(ProjectTarget) -Platform=$(Platform) $(GauntletArgs) $($(ProjectName)__GauntletTestArgs) $(ReportParams) $(LogOutputParams) -artifactname="$(ArtifactName)""/>
|
|
<Property Name="AllGauntletArgs" Value="-Project=$(ProjectTarget) -Platform=$(Platform) $(GauntletArgs) -stdout -VeryVerbose $($(ProjectName)__GauntletTestArgs) $(ReportParams) $(LogOutputParams) -artifactname="$(ArtifactName)"" If="$(WithTSAN) and ('$(Phase)' == 'Warm')"/>
|
|
|
|
<Property Name="TestArg" Value="-test=$($(ProjectName)__GauntletTest)" />
|
|
<Property Name="RunArgs" Value="$(TestArg) $(TestFilterArgs) $(Args) -editorargs="$(CombinedEditorArgs)""/>
|
|
|
|
<!-- Do DDC cleanup outside the editor process, handles Cold cleanup without changing stats -->
|
|
<!-- <Commandlet Project="$(ProjectTarget)" Name="DDCCleanup" Arguments="$(Args) $(CommandletArgs)"/> -->
|
|
|
|
<!-- Run the Gauntlet EditorPerf Tests -->
|
|
<Command Name="RunUnreal" Arguments="$(AllGauntletArgs) $(ProfileArgs) $(RunArgs) -sessionlabel="$(TestName)" -tracefile="$(TraceFilePath)""/>
|
|
|
|
<Do If="$(UploadToPRSEffective) AND ContainsItem('$(ProjectsToReportToPRS)', '$(Project)', ';')=='true'">
|
|
<ForEach Name="TimerRegion" Values="$(TimerRegionsToUpload)">
|
|
<Property Name="TraceCSVFilePathBase" Value="$(TraceFilePath).$(TimerRegion)" />
|
|
<Property Name="TraceCSVFilePathAllThreads" Value="$(TraceCSVFilePathBase).AllThreads.csv" />
|
|
<Property Name="TraceCSVFilePathGameThread" Value="$(TraceCSVFilePathBase).GameThread.csv" />
|
|
<Command Name="ExportTimerStatisticsFromUtrace" Arguments="-TraceFile="$(TraceFilePath)" -CSVFile=$(TraceCSVFilePathAllThreads) -TimerRegion=$(TimerRegion) -MaxTimerCount=$(NumberOfTopTimers)"/>
|
|
<Command Name="UploadUnrealTimersToPRS" Arguments="-BuildVersion=$(BuildName) -Platform=Windows -Config=Development -Branch=$(Branch) -ExtraMetadata="DDCPhase=$(Phase);AsyncLoad=$(Async);TimerRegion=$(TimerRegion);Threads=All" -CL=$(Change) -DataSource=Automation.$(ProjectName).EditorPerfTests -CSVFile=$(TraceCSVFilePathAllThreads) -JobURL="$(JobURL)""/>
|
|
<Command Name="ExportTimerStatisticsFromUtrace" Arguments="-TraceFile="$(TraceFilePath)" -CSVFile=$(TraceCSVFilePathGameThread) -TimerRegion=$(TimerRegion) -MaxTimerCount=$(NumberOfTopTimers) -Threads=GameThread"/>
|
|
<Command Name="UploadUnrealTimersToPRS" Arguments="-BuildVersion=$(BuildName) -Platform=Windows -Config=Development -Branch=$(Branch) -ExtraMetadata="DDCPhase=$(Phase);AsyncLoad=$(Async);TimerRegion=$(TimerRegion);Threads=GameThread" -CL=$(Change) -DataSource=Automation.$(ProjectName).EditorPerfTests -CSVFile=$(TraceCSVFilePathGameThread) -JobURL="$(JobURL)""/>
|
|
</ForEach>
|
|
</Do>
|
|
<!-- Translate the utrace file into csv data -->
|
|
<Commandlet Project="$(ProjectTarget)" Name="SummarizeTrace" Arguments="-inputfile="$(TraceFilePath)" -testname="$(TestName)" $(SummarizeArgs) $(CommandletArgs)" If="$(RunTraceSummary)"/>
|
|
|
|
<!-- Publish telemetry to the db -->
|
|
<Command Name="PublishUnrealAutomationTelemetry" Arguments="-CSVFile="$(TelemetryFilePath)" -project=$(Project) -changelist=$(Change) -branch=$(Branch) -TelemetryConfig=$(TelemetryConfig) $(ExtraTelemetryArgs)" If="'$(TelemetryConfig)' != ''"/>
|
|
</Macro>
|
|
|
|
<Property Name="GenerateTSANReportNodeName" Value=""/>
|
|
<Property Name="GenerateTSANReportNodeList" Value=""/>
|
|
<Macro Name="GenerateTSANReport" Arguments="NodeName;TestOutputDir;Phase;TestNameSuffix;Requires;IgnoreModified">
|
|
<Property Name="LogFilePath" Value="$(TestOutputDir)/$(Phase)$(TestNameSuffix)/Editor/EditorOutput.log"/>
|
|
<Property Name="GenerateTSANReportNodeName" Value="Sanitizer Report - $(NodeName)"/>
|
|
<Node Name="$(GenerateTSANReportNodeName)" Requires="$(Requires)" IgnoreModified="$(IgnoreModified)">
|
|
<Command Name="LogSanitizerOutput" Arguments="-logfile="$(LogFilePath)"" />
|
|
</Node>
|
|
<Property Name="GenerateTSANReportNodeList" Value="$(GenerateTSANReportNodeList); $(GenerateTSANReportNodeName)"/>
|
|
</Macro>
|
|
|
|
<!-- These will be set to the names of all nodes we want to execute based on specified platforms/options -->
|
|
<Property Name="RunGraphNodes" Value=""/>
|
|
|
|
<Property Name="NeedToCopyTSanBinaries" Value="$(WithTSAN)"/>
|
|
<Macro Name="CopyTSANBinariesIfNeeded" Arguments="ProjectBinariesPath">
|
|
<!-- Perform swap of built artifacts for TSAN builds so we use a non-TSAN build for cold runs and a TSAN build for warm runs -->
|
|
<Copy From="$(ProjectBinariesPath)_TSAN/..." To="$(ProjectBinariesPath)" ErrorIfNotFound="true" Overwrite="True" If="$(NeedToCopyTSanBinaries)"/>
|
|
<Property Name="NeedToCopyTSanBinaries" Value="false"/>
|
|
</Macro>
|
|
|
|
|
|
<!-- ForEach Platform to run, generate graph nodes -->
|
|
<ForEach Name="Platform" Values="$(Platforms)">
|
|
|
|
<!-- ForEach Project that is defined, generate the graph nodes -->
|
|
<ForEach Name="Project" Values="$(AllProjects)">
|
|
|
|
<!-- Each project should be setup by invoking the SetupPerfProject macro which will set up the various variables we'll need for the tests -->
|
|
<Property Name="ProjectCombinedArgs" Value="$($(Project)__SpecificArgs) $($(Project)__MapArgs) $($(Project)__ExtraNonCopyableArgs) $(AdditionalRuntimeArgs)"/>
|
|
<Property Name="ProjectTarget" Value="$($(Project)__ProjectTarget)"/>
|
|
<Property Name="EditorTarget" Value="$($(Project)__EditorTarget)"/>
|
|
|
|
<!-- Use as base string for directories and key for node names -->
|
|
<Property Name="OutputName" Value="$(Project)$(Platform)EditorPerf"/>
|
|
|
|
<!-- Compile the Editor. Set up compilation nodes for all projects that have been defined even if we aren't going to test them. This lets the tested projects depend on non-tested ones. -->
|
|
<Property Name="SharedCompileProduces" Value="#SharedBinaries_$(Project)_$(Platform)"/>
|
|
<Property Name="CompileNodeName" Value="Compile $(Project) $(Platform)" />
|
|
<Property Name="CompileNodeNameProduces" Value="#Binaries_$(Project)_$(Platform)"/>
|
|
<Property Name="TSANCompileNodeNameProduces" Value=""/>
|
|
<Property Name="TSANCompileNodeNameProduces" Value="#TsanBinaries_$(Project)_$(Platform)" If="$(WithTSAN)"/>
|
|
<Property Name="ProjectBinariesPath" Value="$(RootDir)/$($(Project)__ProjectPath)/Binaries/$(Platform)"/>
|
|
<Property Name="AgentModifier" Value=""/>
|
|
<Property Name="AgentModifier" Value=" $(Project)" If="!$(SingleAgentCompile)"/>
|
|
<Agent Name="Compile Editor Agent $(Platform)$(AgentModifier" Type="$($(Platform)CompileAgentType)">
|
|
<!--
|
|
If running with TSAN we compile twice, once without TSAN enabled (used for cold runs) and once with TSAN enabled (used for warm runs).
|
|
TSAN adds too much overhead to enable on cold runs, but we need a cold run to execute to prime the cache for the warm run so we run both.
|
|
We need to copy out the files to unique directories or else the buildgraph will complain about two nodes using files with the same name but
|
|
having different contents resulting in unneccessary errors appearing in jobs.
|
|
-->
|
|
<Node Name="$(CompileNodeName)" Produces="$(SharedCompileProduces);$(CompileNodeNameProduces);$(TSANCompileNodeNameProduces)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<SetVersion Change="$(Change)" Branch="$(EscapedBranch)" If="$(IsBuildMachine)"/>
|
|
<Compile Target="ShaderCompileWorker" Platform="$(Platform)" Configuration="Development" Tag="$(SharedCompileProduces)"/>
|
|
<Compile Target="UnrealInsights" Platform="$(Platform)" Configuration="Development" Tag="$(SharedCompileProduces)"/>
|
|
<Compile Target="CrashReportClientEditor" Platform="$(Platform)" Project="$(ProjectTarget)" Configuration="Shipping" Tag="$(SharedCompileProduces)"/>
|
|
<Compile Target="$(EditorTarget)" Platform="$(Platform)" Project="$(ProjectTarget)" Configuration="Development" Arguments="$(EditorCompileArgs)"/>
|
|
|
|
<Copy From="$(ProjectBinariesPath)/..." To="$(ProjectBinariesPath)_NonTSAN" Tag="$(CompileNodeNameProduces)" ErrorIfNotFound="true" If="$(WithTSAN)"/>
|
|
<Compile Target="$(EditorTarget)" Platform="$(Platform)" Project="$(ProjectTarget)" Configuration="Development" Arguments="$(EditorCompileArgs) $(TSANEditorCompileArgs)" If="$(WithTSAN)"/>
|
|
<Copy From="$(ProjectBinariesPath)/..." To="$(ProjectBinariesPath)_TSAN" Tag="$(TSANCompileNodeNameProduces)" ErrorIfNotFound="true" If="$(WithTSAN)"/>
|
|
</Node>
|
|
</Agent>
|
|
<Label Category="$(CompileCategory)" Name="$(Project) Editor Compile" Requires="$(CompileNodeName)"/>
|
|
<!-- Store off the name of the compile node so that we can use look it up by Project name from UseBinariesFrom. -->
|
|
<Property Name="$(Project)__CompileNodeName" Value="$(CompileNodeName)"/>
|
|
|
|
<!-- If the project will be run, set up the test nodes -->
|
|
<Do If="ContainsItem('$(Projects)', '$(Project)', ';')=='true'">
|
|
<Property Name="RunNodeList" Value=""/>
|
|
<Property Name="UploadNodeList" Value=""/>
|
|
|
|
<Agent Name="EditorPerf Agent $(Platform) $(Project)" Type="EditorPerf$(Platform)">
|
|
<!-- TSAN Nodes -->
|
|
<Do If="$(WithTSAN)">
|
|
<!-- Force a Cold Zen Loader run to prime the DDC for our actual test case (whatever it is, zen, legacy, lazy loader etc...) -->
|
|
<Property Name="RunNodeColdZenName" Value="Run Non-TSAN $(OutputName) Cold ZenLoader"/>
|
|
<Node Name="$(RunNodeColdZenName)" Requires="$(CompileNodeName);$(SharedCompileProduces);$(CompileNodeNameProduces)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<!-- Perform swap of built artifacts for TSAN builds so we use a non-TSAN build for cold runs and a TSAN build for warm runs -->
|
|
<Copy From="$(ProjectBinariesPath)_NonTSAN/..." To="$(ProjectBinariesPath)" ErrorIfNotFound="true" Overwrite="True"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeColdZenName)" Phase="Cold" Async="false" UploadToPRS="false" Iteration="1" Args="$(ColdArgs)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeColdZenName)"/>
|
|
|
|
<!-- Zen Loader TestRun -->
|
|
<Property Name="RunTSANNodeZenName" Value="Run TSAN $(OutputName) Warm ZenLoader"/>
|
|
<Node Name="$(RunTSANNodeZenName)" Requires="$(RunNodeColdZenName)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunTSANNodeZenName)" Phase="Warm" Async="false" UploadToPRS="false" Iteration="1" Args="$(WarmArgs)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunTSANNodeZenName)"/>
|
|
<!-- Only depend on the Cold job since the node running TSAN likely will fail and we still want the report to run, even on failed jobs (e.g. it may have failed for TSAN reasons) -->
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunTSANNodeZenName)" TestOutputDir="$(TestOutputDir)" Phase="Warm" TestNameSuffix="ZenLoader" IgnoreModified="$(ProjectBinariesPath)/..." Requires="$(RunNodeColdZenName)"/>
|
|
|
|
<!-- Zen Loader Async TestRun -->
|
|
<Property Name="RunNodeTSANZenAsyncName" Value="Run TSAN $(OutputName) Warm ZenLoader Async"/>
|
|
<Node Name="$(RunNodeTSANZenAsyncName)" Requires="$(RunNodeColdZenName)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoaderAsync" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeTSANZenAsyncName)" Phase="Warm" Async="false" UploadToPRS="false" Iteration="1" Args="$(WarmArgs)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderAsyncTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeTSANZenAsyncName)"/>
|
|
<!-- Only depend on the Cold job since the node running TSAN likely will fail and we still want the report to run, even on failed jobs (e.g. it may have failed for TSAN reasons) -->
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeTSANZenAsyncName)" TestOutputDir="$(TestOutputDir)" Phase="Warm" TestNameSuffix="ZenLoaderAsync" IgnoreModified="$(ProjectBinariesPath)/..." Requires="$(RunNodeColdZenName)"/>
|
|
</Do>
|
|
|
|
<!-- Non-TSAN Nodes -->
|
|
<Do If="!$(WithTSAN)">
|
|
<!--
|
|
Note, each of the nodes has a separate ForEach for Phases (where appropriate) because we want each node type (zen, nozen, async etc...) to be paired: Cold then Warm phase nodes.
|
|
If we did not order nodes like this, since the nodes run on the same agent it's possible for a cold job to fail and prevent a warm job _from an unrelated node_ to not have
|
|
a properly populated DDC, defeating the purpose of the warm run. Thus all node type must run cold then warm, one after the other.
|
|
-->
|
|
|
|
<Property Name="RunNodeCompilationRequires" Value="$(CompileNodeName)"/>
|
|
<Property Name="RunNodeCompilationRequires" Value="$($($(Project)__UseBinariesFrom)__CompileNodeName)" If="'$($(Project)__UseBinariesFrom)'!=''"/>
|
|
<Do If="$(EnableBasePhaseTests)">
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<ForEach Name="Iteration" Values="$(Iterations)">
|
|
<Property Name="IterationSuffix" Value=""/>
|
|
<Property Name="IterationSuffix" Value="$(Iteration)" If="'$(Iteration)' != '1'"/>
|
|
<Property Name="RunNodeName" Value="Run $(OutputName) $(Phase)$(IterationSuffix)"/>
|
|
<Property Name="RunNodeRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold$(IterationSuffix)" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeName)" Requires="$(RunNodeRequires)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="RunTest" TestNameSuffix="NoZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeName)" Phase="$(Phase)" Async="false" UploadToPRS="false" Iteration="$(Iteration)" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(NoZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeName)"/>
|
|
</ForEach>
|
|
</ForEach>
|
|
</Do>
|
|
|
|
<!--Zen Loader TestRun if enabled-->
|
|
<Do If="$(EnableZenLoaderTest)">
|
|
<!-- Setup Zen Loader tests for this phase -->
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<Property Name="RunNodeZenName" Value="Run $(OutputName) $(Phase) ZenLoader"/>
|
|
<Property Name="RunNodeZenRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeZenRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold ZenLoader" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeZenName)" Requires="$(RunNodeZenRequires)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenName)" Phase="$(Phase)" Async="false" UploadToPRS="$(UploadTraceTimersToPRS)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenName)" If="$(EnableZenLoaderTest)"/>
|
|
</ForEach>
|
|
</Do>
|
|
|
|
<!--Zen Loader Async TestRun if enabled-->
|
|
<Do If="$(EnableZenLoaderAsyncThreadTest)">
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<Property Name="RunNodeZenAsyncName" Value="Run $(OutputName) $(Phase) ZenLoader Async"/>
|
|
<Property Name="RunNodeZenAsyncRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeZenAsyncRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold ZenLoader Async" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeZenAsyncName)" Requires="$(RunNodeZenAsyncRequires)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoaderAsync" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenAsyncName)" Phase="$(Phase)" Async="true" UploadToPRS="$(UploadTraceTimersToPRS)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderAsyncTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenAsyncName)" If="$(EnableZenLoaderAsyncThreadTest)"/>
|
|
</ForEach>
|
|
</Do>
|
|
|
|
<!--Zen Store DDC TestRun if enabled-->
|
|
<Do If="$(EnableZenStoreDDCTest)">
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<Property Name="RunNodeZenStoreDDCName" Value="Run $(OutputName) $(Phase) ZenLoader Store DDC"/>
|
|
<Property Name="RunNodeZenStoreDDCRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeZenStoreDDCRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold ZenLoader Store DDC" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeZenStoreDDCName)" Requires="$(RunNodeZenStoreDDCRequires)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="RunTest" TestNameSuffix="ZenStoreAsyncDDC" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenStoreDDCName)" Phase="$(Phase)" Async="false" UploadToPRS="false" Iteration="1" Args="$(ZenStoreDDCPhaseArgs)" EditorArgs="$(ProjectCombinedArgs) $(ZenStoreDDCTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenStoreDDCName)" If="$(EnableZenStoreDDCTest)"/>
|
|
</ForEach>
|
|
</Do>
|
|
|
|
<!--Warm only test runs e.g LazyLoad-->
|
|
<ForEach Name="Phase" Values="Warm">
|
|
<!--Legacy LazyLoad TestRun if enabled-->
|
|
<Property Name="RunNodeLazyLoadName" Value="Run $(OutputName) $(Phase) LazyLoad NoZenLoader"/>
|
|
<Property Name="RunNodeLazyLoadRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeLazyLoadRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold LazyLoad NoZenLoader" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeLazyLoadName)" Requires="$(RunNodeLazyLoadRequires)" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableLazyLoadNoZenLoaderTest)">
|
|
<Expand Name="RunTest" TestNameSuffix="NoZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeLazyLoadName)" Phase="$(Phase)" Async="false" UploadToPRS="false" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(LazyLoadTestArgs) $(NoZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeLazyLoadName)" If="$(EnableLazyLoadNoZenLoaderTest)"/>
|
|
|
|
<!--Zen LazyLoad TestRun if enabled-->
|
|
<Property Name="RunNodeLazyLoadZenName" Value="Run $(OutputName) $(Phase) LazyLoad ZenLoader"/>
|
|
<Property Name="RunNodeLazyLoadZenRequires" Value="$(RunNodeCompilationRequires)"/>
|
|
<Property Name="RunNodeLazyLoadZenRequires" Value="$(RunNodeCompilationRequires); Run $(OutputName) Cold LazyLoad ZenLoader" If="'$(Phase)' == 'Warm'"/>
|
|
<Node Name="$(RunNodeLazyLoadZenName)" Requires="$(RunNodeLazyLoadZenRequires);" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableLazyLoadZenLoaderTest)">
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeLazyLoadZenName)" Phase="$(Phase)" Async="false" UploadToPRS="false" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(LazyLoadZenTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeLazyLoadZenName)" If="$(EnableLazyLoadZenLoaderTest)"/>
|
|
</ForEach>
|
|
</Do>
|
|
</Agent>
|
|
<Label Category="$(RunCategory)" Name="$(Project) Editor Run" Requires="$(RunNodeList);$(UploadNodeList)" UgsBadge="$(Project) Editor Run"/>
|
|
<Property Name="RunGraphNodes" Value="$(RunGraphNodes);$(RunNodeList);$(GenerateTSANReportNodeList);$(UploadNodeList)"/>
|
|
</Do>
|
|
</ForEach> <!-- Projects -->
|
|
|
|
</ForEach> <!-- Platforms -->
|
|
|
|
<!-- These Nodes run the Editor and gather profile data -->
|
|
<Aggregate Name="Run EditorPerf Tests" Requires="$(RunGraphNodes)"/>
|
|
</BuildGraph>
|