analyze-performance
Establish performance baselines and detect regressions using flamegraph analysis. Use when optimizing performance-critical code, investigating performance issues, or before creating commits with performance-sensitive changes.
Install
mkdir -p .claude/skills/analyze-performance && curl -L -o skill.zip "https://mcp.directory/api/skills/download/2850" && unzip -o skill.zip -d .claude/skills/analyze-performance && rm skill.zipInstalls to .claude/skills/analyze-performance
About this skill
Performance Regression Analysis with Flamegraphs
When to Use
- Optimizing performance-critical code
- Detecting performance regressions after changes
- Establishing performance baselines for reference
- Investigating performance issues or slow code paths
- Before creating commits with performance-sensitive changes
- When user says "check performance", "analyze flamegraph", "detect regressions", etc.
Instructions
Follow these steps to analyze performance and detect regressions:
Step 1: Generate Current Flamegraph
Run the automated benchmark script to collect current performance data:
./run.fish run-examples-flamegraph-fold --benchmark
What this does:
- Runs an 8-second continuous workload stress test
- Samples at 999Hz for high precision
- Tests the rendering pipeline with realistic load
- Generates flamegraph data in:
tui/flamegraph-benchmark.perf-folded
Implementation details:
- The benchmark script is in
script-lib.fish - Uses an automated testing script that stress tests the rendering pipeline
- Simulates real-world usage patterns
Step 2: Compare with Baseline
Compare the newly generated flamegraph with the baseline:
Baseline file:
tui/flamegraph-benchmark-baseline.perf-folded
Current file:
tui/flamegraph-benchmark.perf-folded
The baseline file contains:
- Performance snapshot of the "current best" performance state
- Typically saved when performance is optimal
- Committed to git for historical reference
Step 3: Analyze Differences
Compare the two flamegraph files to identify regressions or improvements:
Key metrics to analyze:
-
Hot path changes
- Which functions appear more/less frequently?
- New hot paths that weren't in baseline?
-
Sample count changes
- Increased samples = function taking more time
- Decreased samples = optimization working!
-
Call stack depth changes
- Deeper stacks might indicate unnecessary abstraction
- Shallower stacks might indicate inlining working
-
New allocations or I/O
- Look for memory allocation hot paths
- Unexpected I/O operations
Step 4: Prepare Regression Report
Create a comprehensive report analyzing the performance changes:
Report structure:
# Performance Regression Analysis
## Summary
[Overall performance verdict: regression, improvement, or neutral]
## Hot Path Changes
- Function X: 1500 → 2200 samples (+47%) ⚠️ REGRESSION
- Function Y: 800 → 600 samples (-25%) ✅ IMPROVEMENT
- Function Z: NEW in current (300 samples) 🔍 INVESTIGATE
## Top 5 Most Expensive Functions
### Baseline
1. render_loop: 3500 samples
2. paint_buffer: 2100 samples
3. diff_algorithm: 1800 samples
...
### Current
1. render_loop: 3600 samples (+3%)
2. paint_buffer: 2500 samples (+19%) ⚠️
3. diff_algorithm: 1700 samples (-6%) ✅
...
## Regressions Detected
[List of functions with significant increases]
## Improvements Detected
[List of functions with significant decreases]
## Recommendations
[What should be investigated or optimized]
Step 5: Present to User
Present the regression report to the user with:
- ✅ Clear summary (regression, improvement, or neutral)
- 📊 Key metrics with percentage changes
- ⚠️ Highlighted regressions that need attention
- 🎯 Specific recommendations for optimization
- 📈 Overall performance trend
Optional: Update Baseline
When to update the baseline:
Only update when you've achieved a new "best" performance state:
- After successful optimization work
- All tests pass
- Behavior is correct
- Ready to lock in this performance as the new reference
How to update:
# Replace baseline with current
cp tui/flamegraph-benchmark.perf-folded tui/flamegraph-benchmark-baseline.perf-folded
# Commit the new baseline
git add tui/flamegraph-benchmark-baseline.perf-folded
git commit -m "perf: Update performance baseline after optimization"
See baseline-management.md for detailed guidance on when and how to update baselines.
Understanding Flamegraph Format
The .perf-folded files contain stack traces with sample counts:
main;render_loop;paint_buffer;draw_cell 45
main;render_loop;diff_algorithm;compare 30
Format:
- Semicolon-separated call stack (deepest function last)
- Space + sample count at end
- More samples = more time spent in that stack
Performance Optimization Workflow
1. Make code change
↓
2. Run: ./run.fish run-examples-flamegraph-fold --benchmark
↓
3. Analyze flamegraph vs baseline
↓
4. ┌─ Performance improved?
│ ├─ YES → Update baseline, commit
│ └─ NO → Investigate regressions, optimize
└→ Repeat
Additional Performance Tools
For more granular performance analysis, consider:
cargo bench
Run benchmarks for specific functions:
cargo bench
When to use:
- Micro-benchmarks for specific functions
- Tests marked with
#[bench] - Precise timing measurements
cargo flamegraph
Generate visual flamegraph SVG:
cargo flamegraph
When to use:
- Visual analysis of call stacks
- Identifying hot paths visually
- Sharing performance analysis
Requirements:
flamegraphcrate installed- Profiling symbols enabled
Manual Profiling
For deep investigation:
# Profile with perf
perf record -F 999 --call-graph dwarf ./target/release/app
# Generate flamegraph
perf script | stackcollapse-perf.pl | flamegraph.pl > flame.svg
Common Performance Issues to Look For
When analyzing flamegraphs, watch for:
1. Allocations in Hot Paths
render_loop;Vec::push;alloc::grow 500 samples ⚠️
Problem: Allocating in tight loops Fix: Pre-allocate or use capacity hints
2. Excessive Cloning
process_data;String::clone 300 samples ⚠️
Problem: Unnecessary data copies
Fix: Use references or Cow<str>
3. Deep Call Stacks
a;b;c;d;e;f;g;h;i;j;k;l;m 50 samples ⚠️
Problem: Too much abstraction or recursion Fix: Flatten, inline, or optimize
4. I/O in Critical Paths
render_loop;write;syscall 200 samples ⚠️
Problem: Blocking I/O in rendering Fix: Buffer or defer I/O
Reporting Results
After performance analysis:
- ✅ No regressions → "Performance analysis complete: no regressions detected!"
- ⚠️ Regressions found → Provide detailed report with function names and percentages
- 🎯 Improvements found → Celebrate and document what worked!
- 📊 Mixed results → Explain trade-offs and recommendations
Supporting Files in This Skill
This skill includes additional reference material:
baseline-management.md- Comprehensive guide on when and how to update performance baselines: when to update (after optimization, architectural changes, dependency updates, accepting trade-offs), when NOT to update (regressions, still debugging, experimental code, flaky results), step-by-step update process, baseline update checklist, reading flamegraph differences, example workflows, and common mistakes. Read this when:- Deciding whether to update the baseline → "When to Update" section
- Performance improved and want to lock it in → Update workflow
- Unsure if baseline update is appropriate → Checklist
- Need to understand flamegraph diff signals → "Reading Flamegraph Differences"
- Avoiding common mistakes → "Common Mistakes" section
Related Skills
check-code-quality- Run before performance analysis to ensure correctnesswrite-documentation- Document performance characteristics
Related Commands
/check-regression- Explicitly invokes this skill
Related Agents
perf-checker- Agent that delegates to this skill
Additional Resources
- Flamegraph format:
tui/*.perf-foldedfiles - Benchmark script:
script-lib.fish - Visual flamegraphs: Use
flamegraph.plto generate SVGs
More by r3bl-org
View all skills by r3bl-org →You might also like
flutter-development
aj-geddes
Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.
drawio-diagrams-enhanced
jgtolentino
Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.
godot
bfollington
This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.
ui-ux-pro-max
nextlevelbuilder
"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."
nano-banana-pro
garg-aayush
Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.
fastapi-templates
wshobson
Create production-ready FastAPI projects with async patterns, dependency injection, and comprehensive error handling. Use when building new FastAPI applications or setting up backend API projects.
Related MCP Servers
Browse all serversAppSignal: real-time monitoring with incident tracking, anomaly detection, performance metrics and log analysis for fast
engram — Blast Radius detector for AI agents. Prevent regressions using Git history and organizational memory for precis
AI-driven control of live Chrome via Chrome DevTools: browser automation, debugging, performance analysis and network mo
Use Chrome DevTools for web site test speed, debugging, and performance analysis. The essential chrome developer tools f
Supercharge browser tasks with Browser MCP—AI-driven, local browser automation for powerful, private testing. Inspired b
Automate Excel file tasks without Microsoft Excel using openpyxl and xlsxwriter for formatting, formulas, charts, and ad
Stay ahead of the MCP ecosystem
Get weekly updates on new skills and servers.