flutter / flutter

Flutter makes it easy and fast to build beautiful apps for mobile and beyond
https://flutter.dev
BSD 3-Clause "New" or "Revised" License
166.19k stars 27.49k forks source link

Micro-stutters when scrolling on Android after updating to Flutter 3.3 #110885

Closed ercantomac closed 2 years ago

ercantomac commented 2 years ago

Details

Scrolling in my app got worse after updating to version 3.3. I see micro-stutters while scrolling in my app on Android that weren't there before (in version 3.0.5).

https://user-images.githubusercontent.com/48109156/188239939-5ceda106-9acd-4086-8841-7035026f5853.mp4

I also recorded a timeline trace.

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  SystemChrome.setPreferredOrientations(<DeviceOrientation>[DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]);
  SystemChrome.setEnabledSystemUIMode(SystemUiMode.edgeToEdge);
  SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light.copyWith(systemNavigationBarColor: const Color(0x00000000)));
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  static NetworkController networkController = NetworkController();
  static Map<String, List<Comment>> visitedPosts = <String, List<Comment>>{};

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        primarySwatch: Colors.cyan,
        pageTransitionsTheme: const PageTransitionsTheme(builders: <TargetPlatform, PageTransitionsBuilder>{
          TargetPlatform.android: CupertinoPageTransitionsBuilder(),
          TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
        }),
        useMaterial3: true,
        cupertinoOverrideTheme: CupertinoThemeData(
          primaryColor: Theme.of(context).colorScheme.primary,
          brightness: Brightness.light,
          textTheme: const CupertinoTextThemeData(),
        ),
      ),
      darkTheme: ThemeData(
        primarySwatch: Colors.cyan,
        brightness: Brightness.dark,
        pageTransitionsTheme: const PageTransitionsTheme(builders: <TargetPlatform, PageTransitionsBuilder>{
          TargetPlatform.android: CupertinoPageTransitionsBuilder(),
          TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
        }),
        useMaterial3: true,
        cupertinoOverrideTheme: CupertinoThemeData(
          primaryColor: Theme.of(context).colorScheme.primary,
          brightness: Brightness.dark,
          textTheme: const CupertinoTextThemeData(),
        ),
      ),
      scrollBehavior: ScrollBehaviorModified(),
      home: const MyHomePage(),
    );
  }
}

class ScrollBehaviorModified extends CupertinoScrollBehavior {
  @override
  ScrollPhysics getScrollPhysics(BuildContext context) {
    return CustomScrollPhysics();
  }

  @override
  Widget buildOverscrollIndicator(BuildContext context, Widget child, ScrollableDetails details) {
    return StretchingOverscrollIndicator(
      axisDirection: details.direction,
      child: child,
    );
  }
}

class CustomScrollPhysics extends ClampingScrollPhysics {
  @override
  Simulation? createBallisticSimulation(ScrollMetrics position, double velocity) {
    final Tolerance tolerance = this.tolerance;
    if (velocity.abs() >= tolerance.velocity || position.outOfRange) {
      return BouncingScrollSimulation(
        spring: spring,
        position: position.pixels,
        velocity: velocity,
        leadingExtent: position.minScrollExtent,
        trailingExtent: position.maxScrollExtent,
        tolerance: tolerance,
      );
    }
    return null;
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({Key? key}) : super(key: key);

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin {
  final int _pageSize = 25;
  late String _currentListing = 'Hot';
  late String? _after = '';
  final List<Post> _posts = <Post>[];
  final ScrollController _scrollController = ScrollController();
  final PagingController _pagingController = PagingController(firstPageKey: 0);
  final ValueNotifier<bool> _blur = ValueNotifier<bool>(false);

  @override
  void initState() {
    super.initState();
    initialize();
  }

  void initialize() async {
    await MyApp.networkController.getToken();
    _pagingController.addPageRequestListener((pageKey) {
      _fetchPage(pageKey);
    });
    _fetchPage(0);
  }

  Future<void> _fetchPage(int pageKey) async {
    try {
      final newItems = await MyApp.networkController.getListing('/${_currentListing.toLowerCase()}', after: _after!);
      final bool isLastPage = newItems.length < _pageSize;
      _after = '?after=${newItems.removeAt(0)}';
      for (int i = 0; i < _pageSize; i++) {
        _posts.add(newItems[i]);
      }
      if (isLastPage) {
        _pagingController.appendLastPage(newItems);
      } else {
        final num nextPageKey = pageKey + newItems.length;
        _pagingController.appendPage(newItems, nextPageKey);
      }
      setState(() {});
    } catch (error) {
      _pagingController.error = error;
    }
  }

  late String _listingHeader = 'Hot';

  void changeListing(String listing) async {
    if (listing.startsWith('top')) {
      _listingHeader = 'Top • ${listing.substring(7)}';
    } else if (listing.startsWith('controversial')) {
      _listingHeader = 'Controversial • ${listing.substring(17)}';
    } else {
      _listingHeader = listing;
    }
    setState(() {
      _posts.clear();
      _after = '';
      _currentListing = listing;
    });
    _pagingController.refresh();
  }

  @override
  void dispose() {
    _scrollController.dispose();
    _pagingController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: RawScrollbar(
        interactive: true,
        shape: const StadiumBorder(),
        controller: _scrollController,
        child: CustomScrollView(
          controller: _scrollController,
          slivers: <Widget>[
            CupertinoSliverNavigationBar(
              largeTitle: Text(_listingHeader),
              middle: GestureDetector(
                  onTap: () {
                    _blur.value = true;
                    _scrollController
                        .animateTo(0.0,
                            duration: Duration(milliseconds: 400 + (_scrollController.offset ~/ 75)),
                            curve: Curves.easeOutCubic)
                        .then((value) {
                      _blur.value = false;
                    });
                  },
                  child: const Text('Homepage')),
            ),
            if (_posts.isEmpty) const SliverFillRemaining(child: Center(child: CircularProgressIndicator.adaptive())),
            if (_posts.isNotEmpty)
              CupertinoSliverRefreshControl(
                onRefresh: () {
                  return Future<void>(() => _pagingController.refresh());
                },
              ),
            if (_posts.isNotEmpty)
              SliverStack(
                children: <Widget>[
                  PagedSliverList(
                    pagingController: _pagingController,
                    builderDelegate: PagedChildBuilderDelegate(
                      itemBuilder: (BuildContext context, Object? item, int index) {
                        return PostBuilder(
                          post: _posts[index],
                          pageTitle: 'Homepage',
                        );
                      },
                    ),
                  ),
                  SliverPositioned.fill(
                    child: ValueListenableBuilder<bool>(
                      valueListenable: _blur,
                      builder: (BuildContext context, bool value, Widget? child) {
                        return value
                            ? AnimatedBuilder(
                                animation: _scrollController,
                                builder: (BuildContext context, Widget? child) {
                                  return BackdropFilter(
                                      filter: ImageFilter.blur(
                                          sigmaX: 0.001, sigmaY: 8.0 - (8.0 / max(1.0, _scrollController.offset / 50.0))),
                                      child: child);
                                },
                                child: Container(),
                              )
                            : Container();
                      },
                    ),
                  ),
                ],
              ),
          ],
        ),
      ),
    );
  }
}

Target Platform: Android Target OS version/browser: Android 12 Devices: Motorola Edge 30

Logs

Logs info - Specify type annotations - lib\Builder\post_builder.dart:67:42 - always_specify_types info - Specify type annotations - lib\Builder\post_builder.dart:88:56 - always_specify_types info - Specify type annotations - lib\Builder\post_builder.dart:105:25 - always_specify_types info - Specify type annotations - lib\Builder\post_builder.dart:109:36 - always_specify_types info - Specify type annotations - lib\Builder\post_builder.dart:109:37 - always_specify_types info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:245:33 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:247:33 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:282:33 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:284:33 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:321:33 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Builder\post_builder.dart:324:33 - use_build_context_synchronously info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:152:22 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:154:26 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:156:94 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:159:26 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:160:30 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:161:20 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:164:105 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:165:16 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:166:13 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:169:17 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:170:19 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:172:19 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:173:17 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:174:21 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:175:21 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:176:22 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:177:19 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:178:16 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:179:25 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:182:108 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:183:20 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:184:15 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:185:17 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:188:15 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:189:22 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:190:16 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:192:114 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:193:29 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:194:19 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:199:19 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:200:24 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:201:18 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:205:22 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:206:20 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:207:24 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:208:17 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:210:18 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:212:111 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:213:17 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:214:32 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:215:27 - unnecessary_null_in_if_null_operators info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:216:16 - unnecessary_null_in_if_null_operators info - Specify type annotations - lib\Model\comment.dart:219:102 - always_specify_types info - Avoid using `null` in `if null` operators - lib\Model\comment.dart:221:14 - unnecessary_null_in_if_null_operators info - Avoid defining unused parameters in constructors - lib\Model\comment.dart:228:29 - avoid_unused_constructor_parameters info - Specify type annotations - lib\Model\post.dart:243:108 - always_specify_types info - Prefer using null aware operators - lib\Model\post.dart:255:20 - prefer_null_aware_operators info - Specify type annotations - lib\Model\post.dart:264:103 - always_specify_types info - Specify type annotations - lib\Model\post.dart:280:112 - always_specify_types info - Specify type annotations - lib\Model\post.dart:308:63 - always_specify_types info - Specify type annotations - lib\Model\post.dart:309:92 - always_specify_types info - Specify type annotations - lib\Model\post.dart:315:109 - always_specify_types info - Specify type annotations - lib\Model\post.dart:334:100 - always_specify_types info - Specify type annotations - lib\Model\post.dart:431:65 - always_specify_types info - Specify type annotations - lib\Model\post.dart:446:72 - always_specify_types info - Avoid defining unused parameters in constructors - lib\Model\post.dart:539:31 - avoid_unused_constructor_parameters info - Specify type annotations - lib\Model\post.dart:552:90 - always_specify_types info - Specify type annotations - lib\Model\post.dart:574:63 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:40:12 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:63:26 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:117:60 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:134:29 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:138:40 - always_specify_types info - Specify type annotations - lib\Screen\post_detail_screen.dart:138:41 - always_specify_types info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:223:37 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:225:37 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:259:37 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:261:37 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:297:37 - use_build_context_synchronously info - Do not use BuildContexts across async gaps - lib\Screen\post_detail_screen.dart:300:37 - use_build_context_synchronously info - The value of the field '_before' isn't used - lib\Screen\subreddit_screen.dart:24:29 - unused_field info - Specify type annotations - lib\Screen\subreddit_screen.dart:27:9 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:27:46 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:33:47 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:44:7 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:120:32 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:130:23 - always_specify_types info - Specify type annotations - lib\Screen\subreddit_screen.dart:132:42 - always_specify_types info - The value of the field '_before' isn't used - lib\main.dart:126:29 - unused_field info - Specify type annotations - lib\main.dart:129:9 - always_specify_types info - Specify type annotations - lib\main.dart:129:68 - always_specify_types info - Specify type annotations - lib\main.dart:167:47 - always_specify_types info - Specify type annotations - lib\main.dart:175:7 - always_specify_types info - Specify type annotations - lib\main.dart:253:32 - always_specify_types info - Specify type annotations - lib\main.dart:311:19 - always_specify_types info - Specify type annotations - lib\main.dart:314:38 - always_specify_types info - Specify type annotations - lib\network_controller.dart:59:7 - always_specify_types info - Specify type annotations - lib\network_controller.dart:92:7 - always_specify_types 112 issues found. (ran in 9.6s) ``` ``` [√] Flutter (Channel stable, 3.3.0, on Microsoft Windows [Version 10.0.22000.856], locale en-US) • Flutter version 3.3.0 on channel stable at C:\src\flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision ffccd96b62 (4 days ago), 2022-08-29 17:28:57 -0700 • Engine revision 5e9e0e0aa8 • Dart version 2.18.0 • DevTools version 2.15.0 [√] Android toolchain - develop for Android devices (Android SDK version 33.0.0) • Android SDK at *** • Platform android-33, build-tools 33.0.0 • Java binary at: C:\Program Files\Android\Android Studio\jre\bin\java • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840) • All Android licenses accepted. [X] Chrome - develop for the web (Cannot find Chrome executable at .\Google\Chrome\Application\chrome.exe) ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable. [√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.3.1) • Visual Studio at C:\Program Files\Microsoft Visual Studio\2022\Community • Visual Studio Community 2022 version 17.3.32811.315 • Windows 10 SDK version 10.0.19041.0 [√] Android Studio (version 2021.2) • Android Studio at C:\Program Files\Android\Android Studio • Flutter plugin can be installed from: https://plugins.jetbrains.com/plugin/9212-flutter • Dart plugin can be installed from: https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 11.0.12+7-b1504.28-7817840) [√] VS Code (version 1.70.2) • VS Code at *** • Flutter extension version 3.48.0 [√] Connected device (3 available) • motorola edge 30 (mobile) • *** • android-arm64 • Android 12 (API 31) • Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.22000.856] • Edge (web) • edge • web-javascript • Microsoft Edge 104.0.1293.63 [√] HTTP Host Availability • All required HTTP hosts are available ! Doctor found issues in 1 category. ``` ```
jonahwilliams commented 2 years ago

Could you also upload a timeline from 3.0?

good news/bad news is that I don't see anything particularly bad in the timeline trace, there are just some frames where everything takes longer than it should.

Would it be possible to share part of your code from this view? That would let me debug it a little more thoroughly

b3nni97 commented 2 years ago

I experimented a bit in my app and noticed that as soon as 1 frame runs slowly, the app "switches" to 30 FPS and then does not recover. As soon as no new frames are pushed (scrolling stops) the following frames are back at 60 FPS.

Sesa1988 commented 2 years ago

I have the same performance issue directly after upgrading to 3.3.0.

I cached SkSL for both flutter versions and a list with complex items (small image and a line chart for each item).

Before the upgrade it was fluent on both devices.

I noticed decreased performance on macOS as well.

I tried to capture it via screen capture on a real device but the recording does not show the issue properly. I assume the scrolling issue is not fully visible for b3nni97 as well. On my tests the recordings where almost fluent compared to the real experience that got really bad.

jonahwilliams commented 2 years ago

In order to diagnose the issue, I need timeline traces, screen recording, sample code, the device you are using, et cetera.

jonahwilliams commented 2 years ago

from reading the first timeline, what I can see is that several frames exceed the frame budget for 90hz scrolling. This can lead to the appearance of "micro-stutters" as you drop from 90 to 60/30 back to 90. But that isn't enough to figure out why things changed, I'll need something I can run, or at least compare a timeline to 3.0 so I can see what is taking lnger

ercantomac commented 2 years ago

@jonahwilliams I added my main.dart to the first comment.

jonahwilliams commented 2 years ago

Perfect, thank you

jonahwilliams commented 2 years ago

I'm missing the types for SliverStack, SliverPositioned, PagedSliverList, , Post, PagingController, NetworkController, and Comment.

Could you share the pubspec.yaml, and maybe some dummy data I can fill in to run this?

huycozy commented 2 years ago

Hi @ercantomac, please provide a completed and minimal reproducible code sample so that we may verify this. Also, please provide a timeline from 3.0 as @jonahwilliams mentioned above.

@b3nni97, @Sesa1988: Could you guys please provide more information as listed in https://github.com/flutter/flutter/issues/110885#issuecomment-1236201045?

Thank you all!

kylebrocklc commented 2 years ago

I'm experiencing the same thing. I'm not at a state where I can share anything yet, but I can do a screen share if that would be helpful.

I'm working on creating a reader. And scrolling the text is very jumpy in 3.3.0, but buttery smooth in 3.0.5.

I maintain 90fps, but the stutters still exist. It's almost as if something is not updating the scroll offset every frame.

BWhiteApps commented 2 years ago

I'm having lagging issues / slowness with multiple apps after 3.3.0. Switching tabs, scrolling, updating UI are all having problems. Like others said, works perfectly fine on 3.0.5 but 3.3.0 was a bad experience so I've downgraded.

jonahwilliams commented 2 years ago

If you can file an issue with attached timeline traces from 3.0 vs 3.3 and/or runnable code, that would help us track down what has changed.

b3nni97 commented 2 years ago

I have the feeling that the problem only becomes noticeable with more complex widget trees. As soon as I try to break it down to a minimal example, the lags become less noticeable Maybe it is also due to combinations of platform views, images and text

TatsuUkraine commented 2 years ago

Noticed same strange behavior during the scroll. It seems that sometimes flutter skips some paint.

Sometimes also noticing that items renders with the lag, that leads to the same element is rendered twice. Touching the screen makes ui redraw

TatsuUkraine commented 2 years ago

Interesting that screen record doesn't capture the issue that I described in prev comment. So I recorded the screen with the camera

https://user-images.githubusercontent.com/621542/189071371-5b01b621-7ce3-4b85-b262-7d57365f50d1.mp4

TatsuUkraine commented 2 years ago

The same issue was recorded with screen capture. Should be visible on 6-7 second of the video (but the screen record doesn't captures what UI actually looks like). Both videos are from pixel 5 with android 13. App built in profile mode.

https://user-images.githubusercontent.com/621542/189072406-9b4fea74-87d2-421c-a667-5bf052b22e78.mp4

TatsuUkraine commented 2 years ago

small addition: I also have Pixel 2xl with Android 11 and I wasn't been able to reproduce this case there so far. Also it looks to me that scroll is smoother there as well

Sesa1988 commented 2 years ago

Interesting that screen record doesn't capture the issue that I described in prev comment. So I recorded the screen with the camera

screen-20220908-110920.2.mp4

I could not capture this issue via screen recording as well, it almost looked identical but in reality the 3.3.0 version was super laggy.

Do you have a version of the video where you scroll more? It's hard to see if its stop all the time for lazy loading. Would be probably better for the flutter team to evaluate it.

TatsuUkraine commented 2 years ago

@Sesa1988 lag on a video from the camera happens only when spinner replacing with item, any move forces ui redraw so I can scroll further, so I don't have issues with to scroll more.

Or you was asking something different?)

TatsuUkraine commented 2 years ago

I also have another example of a lag during UI update, but it's very hard to capture

TatsuUkraine commented 2 years ago

@jonahwilliams @huycozy I found most simple code to reproduce it) but it may take time before you actually can see the issue since it happens from time to time. The video shows just most simple render issue, in the real app I'm experiencing worse UI render issues in various part of the screen. Same as before - when I'm trying to make a screen record it doesn't show what is actually going on on a screen.

Device: Pixel 5 OS: Android 13 Flutter: 3.3.1 Build Mode: profile

P.S in the code sample I just add Show licences page button in the default Flutter template app code

Code sample ```dart import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( // This is the theme of your application. // // Try running your application with "flutter run". You'll see the // application has a blue toolbar. Then, without quitting the app, try // changing the primarySwatch below to Colors.green and then invoke // "hot reload" (press "r" in the console where you ran "flutter run", // or simply save your changes to "hot reload" in a Flutter IDE). // Notice that the counter didn't reset back to zero; the application // is not restarted. primarySwatch: Colors.blue, ), home: const MyHomePage(title: 'Flutter Demo Home Page'), ); } } class MyHomePage extends StatefulWidget { const MyHomePage({super.key, required this.title}); // This widget is the home page of your application. It is stateful, meaning // that it has a State object (defined below) that contains fields that affect // how it looks. // This class is the configuration for the state. It holds the values (in this // case the title) provided by the parent (in this case the App widget) and // used by the build method of the State. Fields in a Widget subclass are // always marked "final". final String title; @override State createState() => _MyHomePageState(); } class _MyHomePageState extends State { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('App Example'), ), body: Center( child: ElevatedButton( onPressed: () { showLicensePage( context: context, applicationIcon: Image.asset( 'assets/flutter_icon.png', height: 50, ), applicationName: 'Some App Name', applicationVersion: '1.0.0', ); }, child: const Text('SHOW LICENCES'), ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: const Icon(Icons.add), ), // This trailing comma makes auto-formatting nicer for build methods. ); } } ```
Video https://user-images.githubusercontent.com/621542/190097302-c930b049-be44-424c-bbaf-144393a1072d.mp4
tschiekdev commented 2 years ago

I am scared to upgrade to 3.3

jonahwilliams commented 2 years ago

@TatsuUkraine if this is happening only occasionally and only in profile mode, it might be related to timeline collection. Does this same issue happen in release mode?

@tschiekdev if you're not discussing ways to reproduce the immediate issue then please don't comment.

jonahwilliams commented 2 years ago

@TatsuUkraine from looking at the video, that doesn't seem related to the filled issue which is that this particular app has slow raster times

jonahwilliams commented 2 years ago

@ercantomac if you can't update your example to be runnable then I can't make any progress with the example. @TatsuUkraine please file a new issue (I'm going to close this one if @ercantomac does not respond), and if you can possibly include timeline traces that would help

TatsuUkraine commented 2 years ago

@jonahwilliams yes, happening with release builds as well

I wasn't sure if the issue on video related to this issue, but I have a feeling that flutter just skips the frames. The scroll is not that smooth as it was before + issues with render from the video

jonahwilliams commented 2 years ago

We need to look at timeline traces. its almost certainly not that flutter is skipping frames, but that something is taking too long (GC?) and we miss the vsync.

TatsuUkraine commented 2 years ago

@jonahwilliams I think we have another ticket https://github.com/flutter/flutter/issues/111376 Author said that he experiencing the same (or close) to what I have on a video

As for timetraces - in my comment I added reproducible code, which basically Licences page that comes out of the box

TatsuUkraine commented 2 years ago

Another weird stuff - I can't capture it with regular screen record https://github.com/flutter/flutter/issues/110885#issuecomment-1240387136

jonahwilliams commented 2 years ago

@TatsuUkraine if you don't want to file a new bug, that's fine, but trying to pile into an existing issue where the filler is not-responsive is unlikely to lead to anyone looking at your specific comment.

TatsuUkraine commented 2 years ago

And overall it's not straightforward, since it happens time to time. In my real app I can easily reproduce it with more complex tree and custom shape object, so far I didn't find right formula to make this issue reproducable more permanent (

TatsuUkraine commented 2 years ago

@TatsuUkraine if you don't want to file a new bug, that's fine, but trying to pile into an existing issue where the filler is not-responsive is unlikely to lead to anyone looking at your specific comment.

@jonahwilliams I can create, just don't want to create duplicate https://github.com/flutter/flutter/issues/111376

TatsuUkraine commented 2 years ago

If you think it's better to create a new issue, I can do that np

jonahwilliams commented 2 years ago

We will determine if something is a duplicate if they ultimately have the same cause. If you don't know whats causing your bug, you can't know that it is a duplicate

TatsuUkraine commented 2 years ago

@jonahwilliams Ok, I will create one. And one last think, I wasn't been able to reproduce it so far with debug build

TatsuUkraine commented 2 years ago

@jonahwilliams So I'm curious if it may be related to this one? https://github.com/flutter/flutter/issues/111145 and get fixed after CP PR will be released

Sesa1988 commented 2 years ago

@jonahwilliams Hi, I tried to reproduce the issue again and via the run command everything seems fine. It could be something related to SkSL. I noticed the lag after I released the new version on the internal test track with cached SkSL where on the Galaxy S20+ it was lagging and on a Xiaomi Note 10 Pro it was almost unwatchable.

It will try to do an example repro and but Im not sure if this is reproducible that easily. If Im successful I will do a new issue and link this.

jonahwilliams commented 2 years ago

@Sesa1988 SkSL caching only works for the exact version of flutter it is generated from, if you are using mismatched SkSL it will not work. Please file a new bug as this is not related to this issue.

Sesa1988 commented 2 years ago

@Sesa1988 SkSL caching only works for the exact version of flutter it is generated from, if you are using mismatched SkSL it will not work. Please file a new bug as this is not related to this issue.

I generated a new one but I have to Analyse it more, thats a weird issue.

I will open one when I can reproduce it properly.

TatsuUkraine commented 2 years ago

@jonahwilliams created separate issue #111867, added additional example with wrong UI repainting

dtq commented 2 years ago

We're seeing micro-stutter when scrolling any widget on a Pixel 6 Pro built with Flutter 3.3.2 in profile mode, when the screen refresh rate is running at the device's default 120FPS. This happens with any scrolling widget that I've tested so far. Note that some stuttering is also present for all scrolling in 3.0.5, but tends to be longer-lasting hiccups at less frequent intervals (every second or so, lasting roughly a few hundred ms per stutter) with smoother scrolling between hiccups compared to 3.3.2.

When limiting the device's display to 60FPS (by disabling "Display" > "Smooth Display" in Android settings), scrolling appears to be smoother, although some stuttering is still present.

Device info:

Screen recordings

Note that the first two recordings (not the 60FPS one) appear to show similar micro-stutters when viewing the screen recording video on a non-Pixel 6 Pro device (e.g. a mac laptop). The 3.3.2 video matches what I saw on the Pixel 6 Pro screen, however the 3.0.5 recording appears to also show lots of micro-stutters, when in reality it appeared to scroll more smoothly on the Pixel 6 Pro screen, with longer but less frequent stutters (occurring roughly every .5 - 1 second) and smooth scrolling in between stutters.

Timelines (captured during the above screen recordings)

Sample code

import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Scrolling Text',
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  const MyHomePage({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Scrolling Text"),
      ),
      body: const SingleChildScrollView(
        child: Text(
          text,
          style: TextStyle(fontSize: 24),
        ),
      ),
    );
  }
}

const text = '''
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
''';
jonahwilliams commented 2 years ago

@dtq thank you for the examples. Are you running in release mode for the recordings? Or are the timelines + recordings from separate runs?

exaby73 commented 2 years ago

@jonahwilliams Hello. Is this issue meant to be closed in favor of https://github.com/flutter/flutter/issues/112503?

jonahwilliams commented 2 years ago

No

exaby73 commented 2 years ago

Thanks for the clarification :)

dtq commented 2 years ago

@jonahwilliams I'm glad to help, thanks for looking into this!

All of the videos and corresponding timelines are in profile mode (not release). I did try running once in release mode to see if it made a difference and still saw the micro-stutters.

Each timeline I posted corresponds to one of the recordings (e.g. the first recording matches the first timeline, second recording matches the second timeline, third recording matches the third timeline).

I cleared profile timeline history before starting each screen recording, so the first profile timeline frame was produced by scrolling within each video.

dtq commented 2 years ago

Looking through the devices mentioned in this thread, all of them have high refresh rates (greater than 60 fps). Between that and the fact that scrolling looks less stuttery when limiting my Pixel 6 Pro to 60 fps, I wonder if it's an issue with frames being out of sync with the screen fps.

Devices mentioned in this thread:

Most modern phones do have high fps (60+), so could just be coincidence, but...

jonahwilliams commented 2 years ago

From local testing I believe the engine roll in https://github.com/flutter/flutter/commit/212ccc4ee20df42f06ff140e3f3a5e6e974e6951 will fix the issue. If you have the time, I would greatly appreciate if you could switch to master channel to verify this yourself.

dtq commented 2 years ago

@jonahwilliams Scrolling performance for master channel looks much smoother now, and seems to match what we see for 3.0.5 (mostly smooth, with an occasional hiccup). I think you've found the culprit.

jonahwilliams commented 2 years ago

Thanks @dtq , I'll file a CP request