Detect performance regressions before they ship. PerfGuard automates frame time tracking, baseline comparison, and CI-integrated reporting for Unreal Engine projects. PerfGuard is an automated performance regression testing framework for Unreal Engine 5. It captures frame timing data from your project, compares it against known-good baselines, and reports any regressions that exceed your configured thresholds.
Key Features:
- Define performance test scenarios as data assets — specify maps, camera paths, replay files, and per-stat thresholds
- Three capture modes — Level Sequence camera paths (deterministic rendering benchmarks), Replay recordings (gameplay-driven scenarios with combat, AI, physics), or Duration Only (static captures)
- Automated capture via Gauntlet — integrates with UE's built-in testing framework for headless CI execution
- CSV profiler integration — captures FrameTime, GPUTime, DrawCalls, Memory, and custom stats
- Unreal Insights trace integration — GPU pass timings, RHI command breakdown, per-draw-call detail, and "Open in Insights" launcher
- Baseline management — record, compare, export, and import baselines per-scenario and per-platform
- Statistical analysis — IQR outlier trimming, percentile aggregation (P95/P99), confidence intervals, noise floor estimation
- Capture quality validation — detects GPU time gaps, sequence stalls, warmup instability, and warns when thresholds are below measurement precision
- Self-contained HTML reports — interactive charts with Chart.js (works offline), histograms, trend graphs, GPU pass breakdown, and dark mode
- PDF export — generate PDF reports from HTML via headless Chrome for easy stakeholder sharing
- Interactive dashboard — local web server with action buttons for running scenarios, updating baselines, and navigating timestamped reports
- Frame budget presets — gate builds on 30fps, 60fps, or VR 90fps frame-time targets
- Webhook notifications — Slack, Teams, and generic JSON alerts when regressions are detected
- CI/CD ready — exit codes, structured JSON output, and configs for GitHub Actions, Jenkins, GitLab CI, and BuildGraph/Horde
- Python CLI tooling — flexible command-line interface for all operations
- Quick Capture — right-click any map in Content Browser to instantly profile it, no scenario setup or Level Sequence required
- In-Editor Results Panel — view pass/fail comparison tables directly inside Unreal Editor without opening HTML reports
- Console and mobile support — capture on devkits and mobile devices, analyze results on desktop
- Bundled CLI launchers — one-click Python setup on Windows, zero-friction CLI access on all platforms
Workflow:
1. Create a PerfScenario asset with your map and camera path, replay file, or fixed duration (or just right-click a map for Quick Capture)
2. Record a baseline from a known-good build
3. On every PR/build, run the scenario and compare against the baseline
4. Get a clear pass/fail result with detailed regression reports (HTML or PDF)
Who is this for?
- Game studios running CI/CD pipelines on UE projects
- Technical artists and performance engineers who need automated frame budget tracking
- Virtual production teams monitoring rendering performance
- Any team that wants to catch performance regressions before they reach players
Documentation:
- Quick Start guide — get running in under 15 minutes
- CLI Reference — complete reference for all commands, flags, and suite configuration
- Project Settings — configure thresholds, warmup, storage paths, and budget presets in the editor
- Scenario Authoring guide — advanced configuration, warmup strategies, naming conventions
- Blueprint API guide — step-by-step examples for using PerfGuard from Blueprint
- CI Integration guide — pipeline setup for GitHub Actions, Jenkins, GitLab CI, and BuildGraph
- Troubleshooting guide — common issues and solutions with detailed fixes
- Engine Validation guide — step-by-step walkthrough for verifying your setup
- FAQ — common questions answered
PerfGuard's test controller module uses the Gauntlet plugin, which is built into Unreal Engine. The plugin enables it automatically — no setup needed on your part.