- Home
- Skills
- Mobile Development
- Frame Performance Check (Flutter & React Native)
Works with the AI tools you already use
Frame Performance Check (Flutter & React Native)
Find the work your Flutter, React Native or Expo app or game repeats every frame or every render, fix it, and prove the fix helped without being fooled by a hot phone.
Free
Frame Performance Check (Flutter & React Native)
Example session with this skill installed
This game stutters on my old phone. Find out why.
- Read your context and instructions
- Compiled the frame performance check
What I ran
Frame cost: my-game
157 source file(s), 9 with per-frame methods
NOTE paint-per-frame (2)
packages/ui/lib/screens/game/game/components/splat_component.dart:48
packages/ui/lib/screens/game/game/components/splat_component.dart:55
a Paint allocated inside a per-frame method; hoist it to a field when its colour does not change
Each of these is a hypothesis. Measure it, paired, before and after: see SKILL.md.
What it means
Two Paint objects are built inside a per-frame method of a Flame component, so they're rebuilt every frame for every splat on screen. If the colour doesn't change, they can be fields.
Next steps
- Hoist both
Paints to fields. - Measure with
paired_bench.py, old and new builds alternated in pairs, so a phone warming up halfway through doesn't make the second run look slower. - Keep the fix only if the paired numbers say it helped.
Output is from a real run on one of my games (name changed).
Connects securely to your tools. The creator never sees your data.
About this skill
Most Flutter jank I've chased came from the same place: something built inside render, paint or update that only needed building once. A Paint, a Path, a TextPainter, a list. Analyze is clean and the tests pass, and the game drops frames on a three-year-old phone.
This skill finds those shapes in Flame games, CustomPainters and custom canvas code, fixes them, then measures. The benchmark runs the old and new versions in alternating pairs, because a phone that heats up halfway through a test makes the second run look slower whatever you changed.
It also works on React Native and Expo. There it looks for react-native-skia objects (paints, shaders, paths, colour parsing, text measuring) built inside per-frame code, allocations and unguarded runOnJS in Reanimated worklets, setState inside requestAnimationFrame loops, and re-render costs: inline props passed to memo() children, StyleSheet.create inside a component, sorting or JSON work in a component body, lists mapped inside a ScrollView, and inline renderItem. A small frame_probe.ts logs p50, p95 and max frame intervals for the UI and JS threads.
Scripts: check_perf.py, paired_bench.py, frame_probe.dart, frame_probe.ts.
These are free and MIT-licensed, and the source is at github.com/jameskrupnik/indie-app-skills. If you ship several apps, my paid skills cover the rest of the release: new-app (forking without carrying the parent's Firebase and ad ids), ship-ios (fork to App Store review), bug-hunt and daily-update (pacing releases across many apps).
How to use
Skills on Agensi run inside your AI agent. Copy the prompt, paste it into your agent, and it connects to Agensi and installs this skill for you. If a payment is needed, your agent shows it to you first.
Reviews
No reviews yet
Be one of the first to try it. Every listed skill passes our trust checks below.
Security scanned
Passed our 8-point scan before listing
1 install
Downloaded by developers to date
Free forever
No account required to browse
Trust & safety
Security scanned
Verified clean 5 days ago
- Free to download with an account