Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poor scrolling performance with ListView holding complex widget trees. #66902

Open
SwissCheese5 opened this issue Sep 29, 2020 · 4 comments
Open

Poor scrolling performance with ListView holding complex widget trees. #66902

SwissCheese5 opened this issue Sep 29, 2020 · 4 comments

Comments

@SwissCheese5
Copy link

@SwissCheese5 SwissCheese5 commented Sep 29, 2020

I've made two very complex apps so far, and they both seem to have incredibly poor scrolling performance, even in small list sizes.

My biggest problems with flutter so far have been that there are no guidelines on how to deal with list view performance given a complex widget tree for each child

The first app has a single list view where each child is very complex. The second is a tree of listviews. Every child has a child list view, recursively (its a comment section. almost identical to reddit).

BOTH of these apps have the following behavior:

  • Ocassionally smooth scrolling.
  • When its not smooth (most of the time), the performance drops even at idle, without scrolling.
  • A lot of the time, if I over-scroll to the edge, where the glow overlay appears to indicate the end of the list, the FPS jumps back to 60 FPS. When you take your finger off of the screen, the fps drops again.

https://youtu.be/w3XaqdaT6Vw
This video is recorded in Release mode on my Samsung S9. You can see the particles slow down, indicating FPS drops. The particles are not the source of the slow down.

Based on that list of behavior, I have to assume that the widgets are not getting rebuilt and optimized as much as possible, and there's something Flutter is doing that is causing the FPS to stay dropped even while idle.

The reason I can't share my code easily is that it is far too complicated and intertwined, I'd have to show the entire app for anything to make sense. So in the spirit of good faith, I want this issue to be long-running so that I can get guidance to diagnose the scrolling performance.

Here is the comment class that you see in the video.
https://gist.github.com/6d51d085fc6825698fb03bf00b0d98e3
You can see I'm using ImplicitlyAnimatedListView. I don't want that to be the focus, because in my other app, I use a normal Flutter AnimatedListView with the exact same result.
I know this class is too much code to process, but the main part you should focus on is line 575 BranchChildren

It's just a list view of the widget itself, creating a comment chain.
Replacing ImplicitlyAnimatedListView with a normal ListView of course reproduces the exact same results.

Flutter analyze:

   info - Don't import implementation files from another package - lib\generated_plugin_registrant.dart:9:8 - implementation_imports
   info - Unused import: 'dart:convert' - lib\logic\data.dart:1:8 - unused_import
   info - Unused import: 'package:cloud_firestore/cloud_firestore.dart' - lib\logic\data.dart:3:8 - unused_import
   info - Unused import: 'package:random_string/random_string.dart' - lib\logic\data.dart:8:8 - unused_import
   info - Unused import: 'package:meta/meta.dart' - lib\logic\root_branch_cubit.dart:3:8 - unused_import
   info - Unused import: 'dart:ui' - lib\main.dart:3:8 - unused_import
   info - Unused import: 'package:cached_network_image/cached_network_image.dart' - lib\main.dart:5:8 - unused_import
   info - Unused import: 'package:flutter_markdown/flutter_markdown.dart' - lib\main.dart:12:8 - unused_import
   info - Unused import: 'package:implicitly_animated_reorderable_list/implicitly_animated_reorderable_list.dart' - lib\main.dart:16:8 - unused_import
   info - Unused import: 'package:kirama/reply.dart' - lib\main.dart:21:8 - unused_import
   info - Unused import: 'package:markdown/markdown.dart' - lib\main.dart:23:8 - unused_import
   info - Unused import: 'package:timeago/timeago.dart' - lib\main.dart:24:8 - unused_import
   info - Unused import: 'logic/syntaxes.dart' - lib\main.dart:30:8 - unused_import
   info - Unused import: 'package:flutter/scheduler.dart' - lib\particle\lib.dart:4:8 - unused_import
   info - Use `;` instead of `{}` for empty constructor bodies - lib\particle\particle.dart:45:26 - empty_constructor_bodies
   info - Unused import: 'particle/particle.dart' - lib\renderer.dart:24:8 - unused_import
   info - Unused import: 'particle/system.dart' - lib\renderer.dart:25:8 - unused_import
   info - Unused import: 'package:flutter_circle_color_picker/flutter_circle_color_picker.dart' - lib\reply.dart:3:8 - unused_import
   info - Unused import: 'package:google_fonts/google_fonts.dart' - lib\reply.dart:4:8 - unused_import

19 issues found. (ran in 7.2s)

Flutter doctor -v:

[√] Flutter (Channel master, 1.22.0-10.0.pre.264, on Microsoft Windows [Version 10.0.19041.508], locale en-US)
    • Flutter version 1.22.0-10.0.pre.264 at C:\flutter
    • Framework revision 3e6863ab2b (10 days ago), 2020-09-18 21:05:27 -0700
    • Engine revision 2abe69c608
    • Dart version 2.10.0 (build 2.10.0-136.0.dev)


[√] Android toolchain - develop for Android devices (Android SDK version 30.0.1)
    • Android SDK at C:\Users\saad4\AppData\Local\Android\sdk
    • Platform android-30, build-tools 30.0.1
    • Java binary at: C:\Users\saad4\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.6692364\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.1)
    • Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
    • Visual Studio Community 2019 version 16.7.30406.217
    • Windows 10 SDK version 10.0.18362.0

[!] Android Studio (not installed)
    • Android Studio not found; download from https://developer.android.com/studio/index.html
      (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions).

[√] Connected device (5 available)
    • SM G960F (mobile) • 23f4abd5881c7ece • android-arm64  • Android 10 (API 29)
    • Windows (desktop) • windows          • windows-x64    • Microsoft Windows [Version 10.0.19041.508]
    • Web Server (web)  • web-server       • web-javascript • Flutter Tools
    • Chrome (web)      • chrome           • web-javascript • Google Chrome 85.0.4183.121
    • Edge (web)        • edge             • web-javascript • Microsoft Edge 85.0.564.44

! Doctor found issues in 1 category.

Flutter run --profile --skia-trace:


Flutter run key commands.
h Repeat this help message.
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on SM G960F is available at: http://127.0.0.1:56019/v80f1p9tRO0=/
I/gralloc (30892): Arm Module v1.0
D/ViewRootImpl@2b362c6[MainActivity](30892): Relayout returned: old=(0,0,720,1480) new=(0,0,720,1480) req=(720,1480)0 dur=6 res=0x1 s={true 512893140992} ch=false
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
V/InputMethodManager(30892): Starting input: tba=me.saad.kirama ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(30892): startInputInner - Id : 0
I/InputMethodManager(30892): startInputInner - mService.startInputOrWindowGainedFocus
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_RESIZED: frame=(0,0,720,1480) ci=(0,48,0,96) vi=(0,48,0,96) or=1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
V/InputMethodManager(30892): Starting input: tba=me.saad.kirama ic=null mNaviBarColor -855310 mIsGetNaviBarColorSuccess true , NavVisible : true , NavTrans : false
D/InputMethodManager(30892): startInputInner - Id : 0
W/me.saad.kirama(30892): Accessing hidden method Lsun/misc/Unsafe;->getUnsafe()Lsun/misc/Unsafe; (greylist,core-platform-api, linking, allowed)
W/me.saad.kirama(30892): Accessing hidden method Lsun/misc/Unsafe;->objectFieldOffset(Ljava/lang/reflect/Field;)J (greylist,core-platform-api, linking, allowed)
W/me.saad.kirama(30892): Accessing hidden method Lsun/misc/Unsafe;->compareAndSwapObject(Ljava/lang/Object;JLjava/lang/Object;Ljava/lang/Object;)Z (greylist, linking, allowed)
W/me.saad.kirama(30892): Accessing hidden method Lsun/misc/Unsafe;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V (greylist, linking, allowed)
I/BiChannelGoogleApi(30892): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzaq@ad6087b
D/FirebaseAuth(30892): Notifying id token listeners about user ( HBnm9V7ORIQWE2cZZXlQuB6amPj1 ).


D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 1 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme key 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme key 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 0
D/ViewRootImpl@2b362c6[MainActivity](30892): ViewPostIme pointer 1
D/ViewRootImpl@2b362c6[MainActivity](30892): MSG_WINDOW_FOCUS_CHANGED 0 1
D/InputMethodManager(30892): prepareNavigationBarInfo() DecorView@44f9f1c[MainActivity]
D/InputMethodManager(30892): getNavigationBarColor() -855310
D/InputTransport(30892): Input channel destroyed: 'ClientS', fd=111
D/SurfaceView(30892): onWindowVisibilityChanged(8) false io.flutter.embedding.android.FlutterSurfaceView{626b5b4 V.E...... ........ 0,0-720,1384} of ViewRootImpl@2b362c6[MainActivity]
D/SurfaceView(30892): surfaceDestroyed callback.size 1 #2 io.flutter.embedding.android.FlutterSurfaceView{626b5b4 V.E...... ........ 0,0-720,1384}
I/mali_egl(30892): eglDestroySurface() in
I/mali_winsys(30892): delete_surface() [720x1384] return
I/mali_egl(30892): eglDestroySurface() out
W/libEGL  (30892): EGLNativeWindowType 0x776ad30010 disconnect failed
D/SurfaceView(30892): remove() io.flutter.embedding.android.FlutterSurfaceView{626b5b4 V.E...... ........ 0,0-720,1384} Surface(name=SurfaceView - me.saad.kirama/me.saad.kirama.MainAct
ivity@626b5b4@0)/@0x4c7551f
D/OpenGLRenderer(30892): makeCurrent EglSurface : 0x776f10c980 -> 0x0
D/OpenGLRenderer(30892): destroyEglSurface : 0x776f10c980
I/mali_egl(30892): eglDestroySurface() in
I/mali_winsys(30892): delete_surface() [720x1480] return
I/mali_egl(30892): eglDestroySurface() out
W/libEGL  (30892): EGLNativeWindowType 0x776f01c710 disconnect failed
D/OpenGLRenderer(30892): ~ReliableSurface : 0x776f01c700
D/ViewRootImpl@2b362c6[MainActivity](30892): Relayout returned: old=(0,0,720,1480) new=(0,0,720,1480) req=(720,1480)8 dur=7 res=0x5 s={false 0} ch=true
D/ViewRootImpl@2b362c6[MainActivity](30892): stopped(true) old=false
D/SurfaceView(30892): windowStopped(true) false io.flutter.embedding.android.FlutterSurfaceView{626b5b4 V.E...... ........ 0,0-720,1384} of ViewRootImpl@2b362c6[MainActivity]


Here's a video with flutter run --profile --skia-trace and with the timeline enabled:
https://youtu.be/LFg9-Z9bGJk

Next, here is my Observatory timeline trace WITH PARTICLES:
https://gist.githubusercontent.com/SwissCheese5/b74244944b67b44580ee2fafa0bfc56d/raw/3d91e80686955089081bbf048dadae705b77856e/dart_timeline

And here's the Observatory timeline trace WITHOUT PARTICLES:
https://gist.githubusercontent.com/SwissCheese5/cfe674a5c65dac9b2826b632abfac50f/raw/6725dec7c70fea2ac5b103d59a2f8851509de89b/dart-timeline%2520no%2520particles
(same results, the particles are not the cause of the slowing down)

The timeline says Clipping is the thing thats taking the most time, but the only clipping I'm doing is with the profile pictures
image

Here's a picture of my Memory timeline while the app was idle + scrolling after a minute. Scrolling has no impact on memory, the spikes were occurring during idle as well.
image

Treemap view:
image

@SwissCheese5 SwissCheese5 changed the title Exploring poor scrolling performance under complex widget trees. Poor scrolling performance with ListView holding complex widget trees. Sep 29, 2020
@iapicca
Copy link
Contributor

@iapicca iapicca commented Sep 29, 2020

related to
#52207

@darshankawar
Copy link
Member

@darshankawar darshankawar commented Sep 30, 2020

Hi @SwissCheese5
Listview scroll performance coupled with various other scenarios has been an issue as highlighted in above tickets. Although your scenario could be different from as listed in above issues, the core issue of how to effectively use ListView without a performance hit remains same.
Can you check above issues and see if any of them resemble yours ?
Thanks.

@SwissCheese5
Copy link
Author

@SwissCheese5 SwissCheese5 commented Sep 30, 2020

@darshankawar I believe #52207 is the only related issue to mine. The first one is unremarkable, and the last one has too little information to tell.

@SwissCheese5
Copy link
Author

@SwissCheese5 SwissCheese5 commented Oct 16, 2020

Related to #28204

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
3 participants