You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
514 lines
39 KiB
XML
514 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="BaselineCategory" DefaultValue="Test" Description="Category string for Baseline 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'"/>
|
|
|
|
<!-- 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 keeping slashes flipped the right way because it shows up on the webapp this way -->
|
|
<Property Name="AutomationNetworkOutputDir" Value="$(AutomationNetworkRootDir)\$(BuildName)"/>
|
|
<Property Name="AutomationNetworkOutputDir" Value="$(AutomationNetworkRootDir)/$(BuildName)" If="'$(HostPlatform)' != 'Win64'"/>
|
|
<Property Name="AutomationOutputDir" Value="$(AutomationLocalOutputDir)"/>
|
|
<Property Name="AutomationOutputDir" Value="$(AutomationNetworkOutputDir)" If="$(IsBuildMachine)"/>
|
|
|
|
<!-- Options for baselining -->
|
|
<Option Name="RunAndBaseline" DefaultValue="false" Description="Enable graph dependencies for running and setting the baseline in a single build."/>
|
|
<Option Name="BaselineDir" DefaultValue="$(RootDir)/Engine/Build/Baseline" Description="The revision controlled location of the baseline telemetry files."/>
|
|
<Option Name="BaselineBuildName" DefaultValue="$(BuildName)" Description="The BuildName of the build to set as the new baseline to compare against."/>
|
|
<Property Name="BaselineAutomationNetworkOutputDir" Value="$(AutomationNetworkRootDir)/$(BaselineBuildName)"/>
|
|
<Property Name="BaselineAutomationNetworkOutputDir" Value="$(AutomationOutputDir)" If="$(RunAndBaseline)"/>
|
|
|
|
<!-- 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/UnrealInsights/Saved/TraceSessions"/>
|
|
|
|
<!-- 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)" />
|
|
|
|
<!-- 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) -verbose -maxduration=18000 -LogIdleTimeout=14400" 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"/>
|
|
|
|
<!-- Gauntlet arguments for commandlet, summarize runs -->
|
|
<Property Name="CommandletArgs" Value="-notraceserver"/>
|
|
<Property Name="SummarizeArgs" Value=""/>
|
|
<Property Name="SummarizeArgs" Value="-skipbaseline" If="$(RunAndBaseline)"/>
|
|
|
|
<!-- Publish telemetry options -->
|
|
<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="$(HordeDashboardURL)/job/$(UE_HORDE_JOBID)?step=$(UE_HORDE_STEPID)"" 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=""/>
|
|
<Macro Name="RunTest" Arguments="TestNameSuffix;Platform;ProjectName;ProjectTarget;NodeName;Phase;Iteration;Args;EditorArgs">
|
|
<Property Name="TestName" Value="EditorPerf$(Phase)$(TestNameSuffix)"/>
|
|
<Property Name="AssetRegistryCacheRootFolderArg" Value="-AssetRegistryCacheRootFolder="$(AssetRegistryCache_Folder)""/>
|
|
|
|
<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)"/>
|
|
</Do>
|
|
<Do If="'$($(ProjectName)__GauntletTest)'!='EditorTests'">
|
|
<Property Name="CombinedEditorArgs" Value="$(EditorArgs) $(AssetRegistryCacheRootFolderArg)"/>
|
|
</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="TraceFilePath" Value="$(TraceDir)/$(IterationName).utrace"/>
|
|
<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="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)""/>
|
|
|
|
<!-- Translate the utrace file into csv data -->
|
|
<Do If="$(RunTraceSummary)">
|
|
<Commandlet Project="$(ProjectTarget)" Name="SummarizeTrace" Arguments="-inputfile="$(TraceFilePath)" -testname="$(TestName)" $(SummarizeArgs) $(CommandletArgs)"/>
|
|
</Do>
|
|
|
|
<Do If="'$(TelemetryConfig)' != ''">
|
|
<!-- Publish telemetry to the db -->
|
|
<Command Name="PublishUnrealAutomationTelemetry" Arguments="-CSVFile="$(TelemetryFilePath)" -project=$(Project) -changelist=$(Change) -branch=$(Branch) -TelemetryConfig=$(TelemetryConfig) $(ExtraTelemetryArgs)"/>
|
|
</Do>
|
|
</Macro>
|
|
|
|
<Property Name="GenerateTSANReportNodeName" Value=""/>
|
|
<Property Name="GenerateTSANReportNodeList" Value=""/>
|
|
<Macro Name="GenerateTSANReport" Arguments="NodeName;TestOutputDir;Phase;TestNameSuffix;Requires">
|
|
<Property Name="LogFilePath" Value="$(TestOutputDir)/$(Phase)$(TestNameSuffix)/Editor/EditorOutput.log"/>
|
|
<Property Name="GenerateTSANReportNodeName" Value="Sanitizer Report - $(NodeName)"/>
|
|
<Node Name="$(GenerateTSANReportNodeName)" Requires="$(Requires)">
|
|
<Command Name="LogSanitizerOutput" Arguments="-logfile="$(LogFilePath)"" />
|
|
</Node>
|
|
<Property Name="GenerateTSANReportNodeList" Value="$(GenerateTSANReportNodeList); $(GenerateTSANReportNodeName)"/>
|
|
</Macro>
|
|
|
|
<Macro Name="UploadTestTraces" Arguments="Platform;ProjectName">
|
|
<!-- Save all files named for this project in the trace directory -->
|
|
<Property Name="TestOutputDir" Value="$(AutomationOutputDir)/$(ProjectName)$(Platform)EditorPerf"/>
|
|
<Copy From="$(TraceDir)/$(ProjectName)$(Platform)EditorPerf*.*" To="$(TestOutputDir)"/>
|
|
</Macro>
|
|
|
|
<!-- These will be set to the names of all nodes we want to execute based on specified platforms/options -->
|
|
<Property Name="RunGraphNodes" Value=""/>
|
|
|
|
<!-- Mimic of the Runner that retrieves the stashed telemetry file and copies it to the depot location -->
|
|
<Macro Name="BaselineResult" Arguments="Platform;Project;Phase">
|
|
<Property Name="TestName" Value="EditorPerf$(Phase)"/>
|
|
<Property Name="IterationName" Value="$(Project)$(Platform)$(TestName)1"/> <!-- Note the 1! We use Iteration 1 for baselines for now -->
|
|
<Property Name="TelemetryFileName" Value="$(IterationName)Telemetry.csv"/>
|
|
<Property Name="LocalTelemetryFilePath" Value="$(BaselineDir)/$(TelemetryFileName)"/>
|
|
<Property Name="NetworkTelemetryFilePath" Value="$(BaselineAutomationNetworkOutputDir)/$(TelemetryFileName)"/>
|
|
<Copy From="$(NetworkTelemetryFilePath)" To="$(LocalTelemetryFilePath)" Overwrite="true"/>
|
|
<Do If="!$(IsBuildMachine)">
|
|
<Spawn Exe="p4" Arguments="reconcile -ea $(LocalTelemetryFilePath)"/>
|
|
</Do>
|
|
</Macro>
|
|
|
|
<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>
|
|
|
|
<!-- This will be set to the names of all nodes we want to execute based on specified platforms/options -->
|
|
<Property Name="BaselineGraphNodes" Value=""/>
|
|
|
|
<!-- 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="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'">
|
|
<!--Each 'Warm' node in this the nested loops below depend on their 'Cold' predecessors. The nodes themselves are otherwise distinct from one another -->
|
|
<Property Name="RunNodeList" Value=""/>
|
|
<Property Name="UploadNodeList" Value=""/>
|
|
<Agent Name="EditorPerf Agent $(Platform) $(Project)" Type="EditorPerf$(Platform)">
|
|
<Property Name="WarmTSANNodeRequires" Value="" />
|
|
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<Property Name="RunNodeCompilationRequires" Value="$(CompileNodeName)"/>
|
|
<Property Name="RunNodeCompilationRequires" Value="$($($(Project)__UseBinariesFrom)__CompileNodeName)" If="'$($(Project)__UseBinariesFrom)'!=''"/>
|
|
<Property Name="IsWarmTSAN" Value="(('$(Phase)' == 'Warm') and $(WithTSAN))"/>
|
|
<Property Name="IsColdTSAN" Value="(('$(Phase)' == 'Cold') and $(WithTSAN))"/>
|
|
|
|
<!-- Cold TSAN case -->
|
|
<Do If="$(IsColdTSAN)">
|
|
<!-- 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="RunNodeZenName" Value="Run Non-TSAN $(OutputName) $(Phase) ZenLoader"/>
|
|
<Node Name="$(RunNodeZenName)" 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="$(RunNodeZenName)" Phase="$(Phase)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenName)"/>
|
|
<Property Name="WarmTSANNodeRequires" Value="$(RunNodeZenName)"/>
|
|
</Do>
|
|
|
|
<!-- Cold and Warm Non-TSAN case, and Warm TSAN cases -->
|
|
<Do If="!$(IsColdTSAN)">
|
|
<Property Name="RunNodeCompilationRequires" Value="$(WarmTSANNodeRequires);$(SharedCompileProduces);$(TSANCompileNodeNameProduces)" If="$(IsWarmTSAN)"/>
|
|
|
|
<Do If="$(EnableBasePhaseTests)">
|
|
<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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeName)" Requires="$(RunNodeRequires)" IgnoreModified="$(ProjectBinariesPath)/...">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="NoZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeName)" Phase="$(Phase)" Iteration="$(Iteration)" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(NoZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeName)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="NoZenLoader" Requires="$(WarmTSANNodeRequires)" If="$(IsWarmTSAN)"/>
|
|
</ForEach>
|
|
</Do>
|
|
|
|
<!-- Setup Zen Loader tests for this phase -->
|
|
<Do>
|
|
<!--Zen Loader TestRun if enabled-->
|
|
<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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeZenName)" Requires="$(RunNodeZenRequires)" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableZenLoaderTest)">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenName)" Phase="$(Phase)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenName)" If="$(EnableZenLoaderTest)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeZenName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="ZenLoader" Requires="$(WarmTSANNodeRequires)" If="$(EnableZenLoaderTest) And $(IsWarmTSAN)"/>
|
|
|
|
<!--Zen Loader Async TestRun if enabled-->
|
|
<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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeZenAsyncName)" Requires="$(RunNodeZenAsyncRequires)" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableZenLoaderAsyncThreadTest)">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoaderAsync" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenAsyncName)" Phase="$(Phase)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(ZenLoaderAsyncTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenAsyncName)" If="$(EnableZenLoaderAsyncThreadTest)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeZenAsyncName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="ZenLoaderAsync" Requires="$(WarmTSANNodeRequires)" If="$(EnableZenLoaderAsyncThreadTest) And $(IsWarmTSAN)"/>
|
|
|
|
<!--Zen Store DDC TestRun if enabled-->
|
|
<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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeZenStoreDDCName)" Requires="$(RunNodeZenStoreDDCRequires)" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableZenStoreDDCTest)">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenStoreAsyncDDC" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeZenStoreDDCName)" Phase="$(Phase)" Iteration="1" Args="$(ZenStoreDDCPhaseArgs)" EditorArgs="$(ProjectCombinedArgs) $(ZenStoreDDCTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeZenStoreDDCName)" If="$(EnableZenStoreDDCTest)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeZenStoreDDCName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="ZenStoreAsyncDDC" Requires="$(WarmTSANNodeRequires)" If="$(EnableZenStoreDDCTest) And $(IsWarmTSAN)"/>
|
|
</Do>
|
|
|
|
<!--Warm only test runs e.g LazyLoad-->
|
|
<Do If="'$(Phase)' == '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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeLazyLoadName)" Requires="$(RunNodeLazyLoadRequires)" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableLazyLoadNoZenLoaderTest)">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="NoZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeLazyLoadName)" Phase="$(Phase)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(LazyLoadTestArgs) $(NoZenLoaderTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeLazyLoadName)" If="$(EnableLazyLoadNoZenLoaderTest)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeLazyLoadName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="NoZenLoader" Requires="$(WarmTSANNodeRequires)" If="$(EnableLazyLoadNoZenLoaderTest) And $(IsWarmTSAN)"/>
|
|
|
|
<!--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') and !$(WithTSAN)"/>
|
|
<Node Name="$(RunNodeLazyLoadZenName)" Requires="$(RunNodeLazyLoadZenRequires);" IgnoreModified="$(ProjectBinariesPath)/..." If="$(EnableLazyLoadZenLoaderTest)">
|
|
<Expand Name="CopyTSANBinariesIfNeeded" ProjectBinariesPath="$(ProjectBinariesPath)"/>
|
|
<Expand Name="RunTest" TestNameSuffix="ZenLoader" Platform="$(Platform)" ProjectName="$(Project)" ProjectTarget="$(ProjectTarget)" NodeName="$(RunNodeLazyLoadZenName)" Phase="$(Phase)" Iteration="1" Args="$($(Phase)Args)" EditorArgs="$(ProjectCombinedArgs) $(LazyLoadZenTestArgs)"/>
|
|
</Node>
|
|
<Property Name="RunNodeList" Value="$(RunNodeList);$(RunNodeLazyLoadZenName)" If="$(EnableLazyLoadZenLoaderTest)"/>
|
|
<Expand Name="GenerateTSANReport" NodeName="$(RunNodeLazyLoadZenName)" TestOutputDir="$(TestOutputDir)" Phase="$(Phase)" TestNameSuffix="ZenLoader" Requires="$(WarmTSANNodeRequires)" If="$(EnableLazyLoadZenLoaderTest) And $(IsWarmTSAN)"/>
|
|
</Do>
|
|
</Do>
|
|
</ForEach>
|
|
|
|
<Do If="!$(WithTSAN)">
|
|
<Property Name="RunNodeUploadPhaseTraces" Value="Upload $(OutputName) Traces"/>
|
|
<Node Name="$(RunNodeUploadPhaseTraces)">
|
|
<Expand Name="UploadTestTraces" Platform="$(Platform)" ProjectName="$(Project)"/>
|
|
</Node>
|
|
<Property Name="UploadNodeList" Value="$(RunNodeUploadPhaseTraces)"/>
|
|
</Do>
|
|
</Agent>
|
|
<Label Category="$(RunCategory)" Name="$(Project) Editor Run" Requires="$(RunNodeList);$(UploadNodeList)" UgsBadge="$(Project) Editor Run"/>
|
|
<Property Name="RunGraphNodes" Value="$(RunGraphNodes);$(RunNodeList);$(GenerateTSANReportNodeList);$(UploadNodeList)"/>
|
|
|
|
<!--Baseline the Results-->
|
|
<Property Name="BaselineNodeName" Value="Baseline $(OutputName)"/>
|
|
<Property Name="BaselineNodeRequires" Value=""/>
|
|
<Property Name="BaselineNodeRequires" Value="$(RunNodeName)" If="$(RunAndBaseline)"/>
|
|
<Property Name="BaselineGraphNodes" Value="$(BaselineGraphNodes);$(BaselineNodeName)"/>
|
|
<Agent Name="EditorPerf Agent $(Platform) $(Project)" Type="EditorPerf$(Platform)">
|
|
<Node Name="$(BaselineNodeName)" Requires="$(BaselineNodeRequires)">
|
|
<ForEach Name="Phase" Values="$(Phases)">
|
|
<Expand Name="BaselineResult" Platform="$(Platform)" Project="$(Project)" Phase="$(Phase)"/>
|
|
</ForEach>
|
|
</Node>
|
|
</Agent>
|
|
<Label Category="$(BaselineCategory)" Name="$(Project) Perf Baseline" Requires="$(BaselineNodeName)"/>
|
|
</Do>
|
|
</ForEach> <!-- Projects -->
|
|
|
|
</ForEach> <!-- Platforms -->
|
|
|
|
<!-- These Nodes run the Editor and gather profile data -->
|
|
<Aggregate Name="Run EditorPerf Tests" Requires="$(RunGraphNodes)"/>
|
|
|
|
<!-- These Nodes copies the CSV telemetry files to special location in the depot, thus making them the "baselines" -->
|
|
<Aggregate Name="Baseline EditorPerf Results" Requires="$(BaselineGraphNodes)"/>
|
|
|
|
<!-- This Node submits the baseline CSV files to Perforce -->
|
|
<!--
|
|
<Agent Name="Submission Agent Win64" Type="Win64">
|
|
<Node Name="Submit Baseline To Perforce" Requires="$(BaselineGraphNodes)">
|
|
<Submit Description="[CL $(Change)] Updated EditorPerf baselines" Files="$(BaselineFiles)"/>
|
|
</Node>
|
|
</Agent>
|
|
-->
|
|
|
|
</BuildGraph>
|