Repository navigation
Description
Steps to reproduce
- Clone the repro project
https://github.com/edTheGuy00/bubble_perf_test
- Run the app with Impeller enabled on a Snapdragon 8 Elite Gen 5 device
flutter run
-
Observe 5 - 20 FPS
-
Run the app on the same device without Impeller
flutter run --no-enable-impeller
- Observe results
Cause
Rendering Animated bubbles using RadialGradient shaders and TextPainters, from my testing it works fine on all my devices:
60 - 120 FPS
Xiaomi 12 - Snapdragon 8 Gen 1 Adreno 730 ~ 120 FPS
iPhone SE 2 ~ 60 FPS
iPhone 13 mini ~ 60 FPS
But there is severe performance issues on the brand new OnePlus 15
5 - 20 FPS
Device affected: OnePlus 15 (Snapdragon 8 Elite Gen 5, Adreno 840 GPU)
Android version: 16
Flutter version: 3.38.4 (Impeller renderer)
CONFIRMED FINDINGS:
- Impeller on Adreno 840: ~5-20 fps (BROKEN)
- Skia on Adreno 840: ~120 fps (WORKS)
- This is NOT a debug vs release issue - both have the same problem
- Works fine on older devices (Snapdragon 8 Gen1 / Adreno 730) with Impeller
- Works fine on same device with Skia renderer
- Works fine on Simulator and Emulator
All recommended Flutter performance optimizations are implemented:
- Shader caching:
RadialGradient.createShader()cached per bubble, only recreated on radius/color change - TextPainter caching: Reused across frames, only recreated on style change
- TextStyle caching: Stored to prevent identity comparison failures
- Paint object reuse: Single
Paintinstance per bubble - RepaintBoundary: Isolates painting from widget tree
- Position-independent shaders: Canvas transform used, shaders created at origin
- Settled state detection: Stops repainting when bubbles settle
- Small bubble optimization: Solid color for bubbles < 20px (no gradient)
Additional context
The Adreno 840 (Snapdragon 8 Elite) moved from Tile-Based Rendering (TBR) to Immediate Mode Rendering (IMR):
- Higher sensitivity to frequent shader state changes
- Different memory/cache behavior than older TBR GPUs
- Penalizes per-frame allocations more heavily
Expected results
Newer devices with the Snapdragon 8 Elite Gen 5 should see smooth 120 FPS
Actual results
5 - 20 FPS
Code sample
Screenshots or Video
Screenshots / Video demonstration
| [OnePlus 15] | [Xiaomi 12] |
|---|---|
Record_2026-01-14-12-39-40_6591e8d729632762c0d2c9c34b8ad961.mp4 |
screen-20260114-123310.mp4 |
Logs
Logs
[Paste your logs here]Flutter Doctor output
Doctor output
$ flutter doctor
[✓] Flutter (Channel stable, 3.38.4, on macOS 26.2 25C56 darwin-arm64)
[✓] Android toolchain - develop for Android devices (Android SDK version 36.1.0-rc1)
[✓] Xcode - develop for iOS and macOS (Xcode 26.2)
[✓] Chrome - develop for the web
[✓] Connected device (5 available)
[✓] Network resources
$ flutter --version
Flutter 3.38.4 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 66dd93f9a2 (6 weeks ago) • 2025-12-03 14:56:10 -0800
Engine • hash 360877569ab6632a564a0a8a815b2e0fe5ae294a (revision a5cb96369e) (1
months ago) • 2025-12-03 20:56:06.000Z
Tools • Dart 3.10.3 • DevTools 2.51.1
Activity
danagbemava-nc commentedon Jan 14, 2026
Hi @edTheGuy00, what version of flutter were you using initially?
Can you test on the master/beta channels to see if this still reproduces over there?
Unfortunately, all my devices use a Mali GPU and I can't reproduce this issue on them.
edTheGuy00 commentedon Jan 14, 2026
Hi @danagbemava-nc , I'm Running my attached sample app https://github.com/edTheGuy00/bubble_perf_test
seeing the exact same results across the board only on my OnePlus 15:
Impeller ON ~ 5 - 15 FPS
--no-enable-impeller ~ 90 FPS
danagbemava-nc commentedon Jan 15, 2026
Thanks for the update.
@edTheGuy00, one final thing, from what version of flutter did you start experiencing this issue?
edTheGuy00 commentedon Jan 15, 2026
@danagbemava-nc I started seeing the issue when I got my new OnePlus 15, I guessing the issue was always there but I Was building on Flutter 3.38.4 at the time.
edTheGuy00 commentedon Jan 15, 2026
@danagbemava-nc I suspect this issue might affect all Adreno 800 series chips, I added this fix-around on my app for now to see 120 FPS on my OnePlus 15 and for anyone else experiencing the same issue.
danagbemava-nc commentedon Jan 16, 2026
Thanks for the update.
Labeling this for further investigation
ain-py commentedon Apr 22, 2026
face same issue after enabling impeller on
Adreno 710Device data:
flutter-triage-bot commentedon Jun 2, 2026
This issue is marked P1 but has had no recent status updates.
The P1 label indicates high-priority issues that are at the top of the work list. This is the highest priority level a bug can have if it isn't affecting a top-tier customer or breaking the build. Bugs marked P1 are generally actively being worked on unless the assignee is dealing with a P0 bug (or another P1 bug). Issues at this level should be resolved in a matter of months and should have monthly updates on GitHub.
Please consider where this bug really falls in our current priorities, and label it or assign it accordingly. This allows people to have a clearer picture of what work is actually planned. Thanks!
gaaclarke commentedon Sep 24, 2026
The first thing to check would be:
main?That GPU is recent enough that it isn't something we'd want to opt out of vulkan as a long term solution.
Another thing that would help would be capturing an accompanying perfetto trace: https://perfetto.dev/