This summary type sums up multiple CsvStat averages and emits the total as a SummaryTableMetric named metricName (if specified).
- Budget colors can optionally be applied to individual stats and/or the total via colourThresholds and colourThresholdsTotal nodes
- If emitStatMetrics is enabled, each stat will emit a SummaryTableMetric, named metricName/strippedStatName (with the same value as the existing CsvStatAverage element if it exists)
- Budget coloring is applied to existing CsvStatAverage elements.
- The budget for a given stat is assumed to be the first element of its colourThresholds. This value is displayed in the report
- A totalStatName attribute can be specified if a total stat already exists. If so, an "other" value will be output to the detailed summary table with the unaccounted value
- If the showTotal attribute is set to false (default: true), the total won't be shown in the detailed report
Other changes:
- Always read all CSV stat averages, regardless of whether -readAllStats is specified. -readAllStats is only now used to determine whether to show CSV stat averages in a summary table
Example:
<summary type="statBudgets" metricName="GTGameplay" title="Gamethread - Gameplay Budgets" hideStatPrefix="Exclusive/GameThread/" emitStatMetrics="1">
<colourThresholdsTotal>3,4,5,6</colourThresholdsTotal>
<colourThresholds stat="Exclusive/GameThread/Buildings">1,2,3,4</colourThresholds>
<stats>Exclusive/GameThread/Buildings,Exclusive/GameThread/Camera,Exclusive/GameThread/Curie,Exclusive/GameThread/Network*,Exclusive/GameThread/PlayerController*,Exclusive/GameThread/WorldTickMisc,Exclusive/GameThread/FlushLatentActions,Exclusive/GameThread/Tickables,Exclusive/GameThread/SyncBodies,Exclusive/GameThread/CharPhys*,Exclusive/GameThread/Character*,Exclusive/GameThread/FortPawnTickSubsystem,Exclusive/GameThread/SignificanceManager,exclusive/gamethread/vehicle*,Exclusive/GameThread/AbilityTasks,Exclusive/GameThread/Actor*,Exclusive/GameThread/HandleRPC,Exclusive/GameThread/RepNotifies,Exclusive/GameThread/TickActors,Exclusive/GameThread/Pickups,Exclusive/GameThread/ProjectileMovement,Exclusive/GameThread/TimelineComponent,Exclusive/GameThread/TimerManager,Exclusive/GameThread/FortTrainManager</stats>
</summary>
[FYI] andrew.ladenberger, michael.short
[CL 30329557 by ben woodhouse in ue5-main branch]
- Multiplier support for variables. Add multiplier="N" attribute to a variableset or variable
- FPSCharts : Compute frametime color thresholds automatically if MVP thresholds are specified and frametime is not
- Support empty color thresholds (useful if we want to clear via a variable)
- Add support for dumping the variables to the log for each CSV via -dumpVariables param
[CL 30060917 by ben woodhouse in ue5-main branch]
Metadata queries can also be blank if necessary if we want the values to always be set.
SourceName/DestName are still supported for back-compat if no query is provided
Note: There is no globalvariable support here. Solving this is not worth the complexity, performance hit and potential ordering and correctness implications
#tests Passes Test cases with identical results
[FYI] tyler.staples
[CL 29922595 by ben woodhouse in ue5-main branch]
- Add support for variable sets. This allows us to set blocks of variables based on metadata, which can be accessed via ${NAME} syntax. Variable sets support nesting and can be conditional using metadata queries
- We support a global variable set (declared under <globalVariableSet> in root), and local variable sets which apply to a given report type only (as <variableSet> children of the ReportType element)
example:
<globalVariableSet>
<variableSet>
<var mvpStatName="MVP${meta.targetframerate}"/>
<var targetFps="${meta.targetframerate}"/>
<var dynamicResBudget="100"/>
</variableSet>
<!-- Switch -->
<variableSet metadataQuery="platform=Switch">
<var frameTimeBudget="33.33"/>
<variableSet metadataQuery="deviceprofile=Switch_Console_Forward*">
<var dynamicResBudget="92"/>
</variableSet>
<variableSet metadataQuery="deviceprofile=Switch_Handheld_Forward*">
<var dynamicResBudget="88"/>
</variableSet>
</variableSet>
</globalVariableSet>
#tests Passes Test cases with identical results (if no changes to the XML)
[FYI] tyler.staples
[CL 29918333 by ben woodhouse in ue5-main branch]
- Equallity now uses numeric comparisons if appropriate
- Add a ~= operator for contains
- Fix a potential infinite loop if a bad term is evaluated
[CL 29918133 by ben woodhouse in ue5-main branch]
Support is provided for Summary classes via XElement extension helper methods, which now take an optional XmlVariableMappings param which handles the variable resolving. GetAttribute, GetSafeAttribute and GetValue support this.
Non metadata variables are also supported in theory e.g ${MyVariable}, but support for populating these does not exist yet
Various cleanup/refactoring and fixups of old code
#tests Passes Test cases with identical results (if no changes to the XML)
[FYI] tyler.staples
[CL 29912786 by ben woodhouse in ue5-main branch]
Also removed debug directory handling for launching CSVToSVG in debug mode.
#rnx
#tests prt test cases, prs unit tests, local report generation
#rb ben.woodhouse
[CL 29875869 by tyler staples in ue5-main branch]
- Add maxAutoMaxY param to graphs and csvToSVG params which allows us to clamp the max automatic Y to a particular value. Also:
- Fix some naming clashes when there are mulltiple graphs on a page. This was preventing us from having graphs with different sizes in a perf report
- Add -embedGraphCommandline arg to help debugging
[FYI] tyler.staples
[CL 29745624 by ben woodhouse in ue5-main branch]
BoundedStatValueSummaries weights the stat averages by the frametimes. Normally it's not an issue to use the same value for both the value and the weight as they'll end up canceling each other out resulting in an unweighted average. However, in the case where some values are much larger than others this can skew the value resulting in a value much different from the weighted average. This is the case for server frametimes as there can be a few very large spikes that end up skewing the weights.
Since it's not trivial to detect which stats are actually "frametime" stats as they can go by different names, the simplest solution is adding a new "unweighted_average" formula. This also allows using it in other cases where it might make more sense, but these should be very rare.
#rnx
#rb andrew.ladenberger
[FYI] ben.woodhouse
[CL 26644283 by tyler staples in ue5-main branch]
If the new param isn't found or "auto" is specified, detection is automatic (based on the presence of http:// or https://)
#rb tyler.staples
[CL 26296250 by ben woodhouse in ue5-main branch]