[Impeller] Occasional 40ms Raster/UI thread jank on Xiaomi 14 (LTPO 120Hz) during scrolling when waking from idle
- Dominant language
- Dart
- Stars
- 179k
- Forks
- 31.1k
- PR merge metrics
- PR metrics pending
Description
### Steps to reproduce
1. Run a Flutter app using Impeller on a high-refresh-rate Android device (e.g., Xiaomi 14, 120Hz, Snapdragon 8 Gen 3).
2. Create a long list using `ListView.builder` or `CustomScrollView` with simple UI elements.
3. Perform continuous, fast flings (scrolling rapidly up and down).
4. Observe the DevTools Performance overlay: while average frames render at ~1-2ms, random frames experience severe spikes of 30-45ms specifically on the **Raster thread**, resulting in highly noticeable visual stuttering.
5. Setting `addRepaintBoundaries: false` or using `ExtentEstimation` slightly mitigates the frequency, but the massive 40ms Raster spikes still randomly occur during active, uninterrupted scrolling.
**Note:** This is not related to LTPO wake-up delay, as the stuttering occurs continuously while the finger is actively flinging and the display is locked at 120Hz.
### Code sample
Code sample
```dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
body: ListView.builder(
itemCount: 1000,
itemBuilder: (context, index) {
return ListTile(title: Text('Item $index'));
},
),
),
);
}
}
```
### Performance profiling on master channel
- [x] The issue still persists on the master channel
### Timeline Traces
Timeline Traces JSON
```json
[dart_devtools_2026-08-01_04_09_52.715.json](https://github.com/user-attachments/files/30605753/dart_devtools_2026-08-01_04_09_52.715.json)
[Paste the Timeline Traces here]
```
### Video demonstration
Video demonstration
[Upload media here]
### What target platforms are you seeing this bug on?
Android
### OS/Browser name and version | Device information
Device: Xiaomi 14
OS: Android 16 (HyperOS)
CPU: Snapdragon 8 Gen 3 (Adreno 750)
Display: 120Hz LTPO OLED
Flutter engine: Impeller (Vulkan)
### Does the problem occur on emulator/simulator as well as on physical devices?
No
### Is the problem only reproducible with Impeller?
Yes
### Logs
Logs
```console
No build errors or crashes. This is strictly a rendering/frame pacing performance issue on Impeller. The attached Timeline Trace JSON contains all the necessary rendering metrics.
```
### Flutter Doctor output
Doctor output
```console
[√] Flutter (Channel stable, 3.44.8, on Microsoft Windows [Version 10.0.26200.8875], locale ru-RU)
• Flutter version 3.44.8 on channel stable at C:\flutter
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 058e0af2c2
• Engine revision 0cd610717b
• Dart version 3.12.2
• DevTools version 2.57.0
[√] Windows Version (Windows 11 or higher, 25H2, 2009)
[√] Android toolchain - develop for Android devices (Android SDK version 36.1.0)
• Android SDK at C:\Users\ohlamon\AppData\Local\Android\sdk
• Emulator version 36.6.11.0
• Platform android-36.1, build-tools 36.1.0
• Java version OpenJDK Runtime Environment (build 21.0.10)
[√] Connected device (4 available)
• 23127PN0CG (wireless) (mobile) • adb-4792807b-fikHn8._adb-tls-connect._tcp • android-arm64 • Android 16 (API 36)
```
Contributor guide
Research direction
Start with the provided ListView.builder sample on a Xiaomi 14 at 120Hz with Impeller Vulkan, then inspect the DevTools Performance overlay and dart_devtools_2026-08-01_04_09_52.715.json for the Raster-thread spikes. Compare continuous flings with addRepaintBoundaries disabled and ExtentEstimation, and confirm the issue is isolated to physical Android hardware. Done means the 30–45ms spikes are explained and the reported scrolling jank is resolved or narrowed to a reproducible engine condition.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, dart
- Domain
- computer-graphics, mobile-dev, performance
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100