PerfreportTool question

Hi, I’m going to use PerfReportTool.exe to generate some reports from CSV files, it works fine if I use simple args, such as “-csvdir” and “-o”, but I don’t know more details for optional args, can I get its source code or example somewhere?

Yoy can find source code of tool if download engine with sources
…\Engine\Source\Programs\CSVTools\PerfReportTool

And here are the available launch arguments

**Primary Input Specification** (Required - one of the following)

Argument Type Required Description
`-csv ` String One required Specify a single CSV file to process
`-csvdir ` String One required Specify a directory containing CSV files
`-csvList ` String One required Comma-separated list of CSV files
`-prcList ` String One required Comma-separated list of PRC (cached) files
`-summaryTableCacheIn ` String One required Read data from summary table cache directory
`-metadataProxy ` OR `-overrideMetadata ` String One required Use proxy metadata or override metadata directly

**Output**

Argument Type Required Description
`-o ` String Yes Output directory (created if necessary)

**Report Configuration**

Argument Type Default Description
`-reportType ` String Optional Report type (e.g., flythrough, playthrough, playthroughmemory)
`-reportTypeCompatCheck` Boolean False Do compatibility check when specifying report type (rather than forcing)
`-graphXML ` String Optional XML file defining graph configurations
`-reportXML ` String Optional XML file defining report structure
`-reportxmlbasedir ` String Optional Base directory for report XML
`-summaryTableXML ` String Optional XML file defining summary tables
`-title ` String Optional Title for detailed reports
`-summaryTitle ` String Optional Title for summary tables

**Graph Configuration**

Argument Type Default Description
`-maxy ` Float Optional Forces all graphs to use this maximum Y value
`-maxY ` Float Optional Alias for -maxy
`-noSmooth` Boolean False Disable smoothing on all graphs
`-nosmooth` Boolean False Alias for -noSmooth
`-useEmbeddedGraphUrl` Boolean False Insert script to fetch graph dynamically on page load instead of embedding
`-embeddedGraphUrlRoot ` String Optional URL to fetch graphs from if -useEmbeddedGraphUrl is specified

**Data Filtering and Truncation** (disable Summary Table caching)

Argument Type Default Description
`-minx ` Integer 0 Minimum frame number (inclusive)
`-minX ` Integer 0 Alias for -minx
`-maxx ` Integer Int.MaxValue Maximum frame number (inclusive)
`-maxX ` Integer Int.MaxValue Alias for -maxx
`-beginEvent ` String Optional Strip data before this event
`-endEvent ` String Optional Strip data after this event
`-noStripEvents` Boolean False Don’t strip samples between excluded events from stats

**CSV Processing and Cleaning**

Argument Type Default Description
`-cleanCsvOut ` String Optional Write standard format CSV after event stripping with metadata stripped (not in bulk mode)
`-writeSummaryCsv` Boolean False Generate CSV file containing summary information (not in bulk mode)

**Bulk Mode Operations** (use with -csvdir, -csvList, -prcList, or -summaryTableCacheIn)

Argument Type Default Description
`-recurse` Boolean False Recursively search directories
`-searchpattern ` String “*.csv;*.csv.bin” File search pattern (e.g., “csvprofile*”)
`-noDetailedReports` Boolean False Skip individual report generation
`-noReports` Boolean False Skip all report generation
`-requireMetadata` Boolean False Ignore CSVs without metadata
`-listFiles` Boolean False List all files matching metadata query without generating reports
`-allowDuplicateCSVs` Boolean False Don’t remove duplicate CSVs (may cause cache file locking issues)
`-minFrameCount ` Integer 0 Ignore CSVs with fewer than this many valid frames
`-maxFileAgeDays ` Integer -1 Ignore CSV/PRC files older than this many days

**Summary Table Configuration**

Argument Type Default Description
`-summaryTable ` String “default” Select custom summary table type from reportTypes.xml
`-condensedSummaryTable ` String “condensed” Select custom condensed summary table type
`-summaryTableFilename ` String “SummaryTable” Filename for summary table (without extension)
`-customTable ` String Optional Comma-separated fields to override metrics filter
`-customTableSort ` String Optional Comma-separated fields to override row sort order
`-readAllStats` Boolean False Allow any CSV stat avg to appear in summary table
`-showHiddenStats` Boolean False Show stats automatically hidden (duplicate csv unit stats)

**Summary Table Output Formatting**

Argument Type Default Description
`-csvTable` Boolean False Write summary table in CSV format instead of HTML
`-collateTable` Boolean False Write collated table (merging by row sort) in addition to main table
`-collateTableOnly` Boolean False Write only collated table (skips standard summary table)
`-emailTable` Boolean False Write condensed email-friendly table
`-emailSummary` Boolean False Enable email summary output
`-transposeTable` Boolean False Write summary tables transposed
`-transposeCollatedTable` Boolean False Write collated table transposed (disables min/max columns)
`-spreadsheetfriendly` Boolean False Output single quote before non-numeric entries
`-noSummaryMinMax` Boolean False Don’t create min/max columns in condensed summary
`-reverseTable [0|1]` Integer/Boolean Optional Reverse order of summary tables
`-scrollableTable [0|1]` Integer/Boolean Optional Make summary table scrollable with frozen first rows/columns
`-sortTrailingDigitsAsNumeric` Boolean False Detect and pad trailing digits when sorting
`-maxSummaryTableStringLength ` Integer Int.MaxValue Truncate strings longer than this

**Summary Table Content Filtering**

Argument Type Default Description
`-metadataFilter ` String Optional Filter by metadata (e.g., “platform=ps4 AND deviceprofile=ps4_60”)
`-summaryTableStatThreshold ` Integer 0 Filter out stat columns if all values below threshold
`-summaryTableXmlSubst =;…` String Optional Replace summary table XML row and filter entries
`-summaryTableXmlAppend <list,of,stats>` String Optional Append stats to summary table filter list
`-summaryTableXmlRowSortAppend <list,of,stats>` String Optional Append stats to summary table row sort list

**Summary Table Colorization and Display**

Argument Type Default Description
`-colorizeTable <off|budget|auto>` Enum XML-default Table colorization mode
`-autoColorizeTable` Boolean False Legacy support - use -colorizeTable instead
`-collatedStringVisibility <show|hide|auto>` Enum “auto” String visibility in collated tables
`-collatedDateVisibility <hide|newest|oldest>` Enum “newest” Date visibility in collated tables
`-columnSortMode ` Enum “default” Column sort mode (default, sortByMax, sortByAvg, wildCardSortByMax, wildCardSortByAvg)
`-hideMetadataColumns` Boolean False Filter out metadata columns (except row sort)

**Weighted Averaging (Collated Tables)**

Argument Type Default Description
`-weightByColumn ` String Optional Weight collated table averages by this column
`-noWeightedAvg` Boolean False Don’t use weighted averages for collated table

**Difference Row Analysis**

Argument Type Default Description
`-addDiffRows` Boolean False Add diff rows after first two rows
`-sortColumnsByDiff` Boolean False Sort columns by max diff score (use with -addDiffRows)
`-columnDiffDisplayThreshold ` Float 0.0 Hide columns with max diff below threshold
`-diffRowsAlternating [0|1]` Boolean True Every other column has diff; otherwise pairs only
`-showOnlyDiffRows` Boolean False Hide non-diff rows; combine common text fields

**Regression Filtering**

Argument Type Default Description
`-onlyShowRegressedColumns` Boolean False Show only columns outside threshold from mean
`-regressionJoinRowsByName ` String Optional Stat name to join rows by for aggregation
`-regressionStdDevThreshold ` Integer 2 Standard deviation threshold for filtering
`-regressionOutlierStdDevThreshold ` Integer 4 Standard deviation threshold for outliers (ignored)

**Variable Dumping**

Argument Type Default Description
`-dumpVariables` Boolean False Dump variables to log for each CSV
`-dumpVariablesAll` Boolean False Dump variables including metadata to log
`-dumpVariablesToJson ` String Optional Write variables to JSON file
`-dumpAllVariablesToJson ` String Optional Write variables including metadata to JSON
`-metadataProxy ` String Optional Use metadata proxy from XML instead of CSV
`-overrideMetadata ` String Optional Override/specify metadata (key=value format)

**JSON Serialization**

Argument Type Default Description
`-summaryTableToJson ` String Optional Path to write summary table row data to JSON
`-summaryTableToJsonSeparateFiles` Boolean False Write separate JSON files (path is directory)
`-summaryTableToJsonFastMode` Boolean False Exit after serializing JSON (skip HTML tables)
`-summaryTableToJsonWriteAllElementData` Boolean False Write all element data (tooltips, flags)
`-summaryTableToJsonMetadataOnly` Boolean False Only write CsvMetadata elements
`-summaryTableToJsonFileStream` Boolean False Use file stream for JSON (experimental, avoids OOM)
`-summaryTableToJsonNoIndent` Boolean False Don’t indent JSON output
`-jsonToPrcs ` String Optional Convert JSON to PRC files (requires -summaryTableCache)

**Summary Table Caching (Bulk Mode Performance)**

Argument Type Default Description
`-summaryTableCache ` String Optional Directory for caching summary table data
`-summaryTableCacheInvalidate` Boolean False Regenerate (write-only) summary table cache entries
`-summaryTableCacheReadOnly` Boolean False Only read from cache, never write
`-summaryTableCachePurgeInvalid` Boolean False Purge invalid PRCs from cache folder
`-summaryTableCacheUseOnlyCsvID` Boolean False Use only CSV ID (ignore report type hash) for cache
`-noCsvCacheFiles` Boolean False Disable .csv.cache files

**CSV Precaching (Bulk Mode Performance)**

Argument Type Default Description
`-precacheCount ` Integer 8 CSV files to precache in lookahead cache (0=disabled)
`-precacheThreads ` Integer 8 Threads for CSV lookahead cache

**Graph Generation (Performance)**

Argument Type Default Description
`-perfLog` Boolean False Output performance logging information
`-graphThreads ` Integer PC core count/2 Threads per CsvToSVG instance
`-csvToSvgSequential` Boolean False Run CsvToSvg sequentially (not multithreaded)
`-csvToSvgProcesses` Boolean False **Deprecated**: Use separate processes instead of threads
`-embedGraphCommandline` Boolean False **Deprecated**: Embed commandline in process output (with -csvToSvgProcesses)
`-noBatchedGraphs` Boolean False **Deprecated**: Disable batched/multithreaded graph generation

**Link Configuration**

Argument Type Default Description
`-reportLinkRootPath ` String Optional Make report links relative to this path
`-csvLinkRootPath ` String Optional Make CSV file links relative to this path
`-linkTemplates` Boolean False Use template format for links (e.g., {{LinkTemplate:Report:}})

**External Metadata**

Argument Type Default Description
`-externalMetadataSources ` String (list) Optional Paths for external metadata key=value files (supports template variables like {{platform}})

**Miscellaneous**

Argument Type Default Description
`-listSummaryTables` Boolean False List available summary tables from report XML
`-noWatermarks` Boolean False Don’t embed commandline or version in reports
`-summaryTableJsData` Boolean False Embed JavaScript row/column data in section
`-derivedStatVerboseErrors` Boolean False Output verbose errors for derived stat expressions
`-extraLinksSummary` Boolean False Add extra links summary (internal feature)
`-foremail ` String Optional Enable email output (internal feature)

I’ve created a more user-friendly version of the Perf Report Tool with the ability to compare multiple CSV files.
Performance Analyzer is available for download on Fab.