Hi Glavo, I could see there are many UI-related operations in some of the updateItems -- room for improvement that we can discuss off-list. Having said that, I agree with the confusing part about updateItem being called without the item being rendered.
- Johan On Tue, Nov 22, 2022 at 12:17 PM Glavo <zjx001...@gmail.com> wrote: > We created an advanced list with titles, subtitles, icons, and tags, and > updated these contents in the updateItem. > > I took a screenshot of it and uploaded it as a comment to GitHub next to > the relevant code: > > > https://github.com/huanghongxun/HMCL/pull/1849/commits/4f8cde63acf959d85416b706acf22f9b3c80ec63#r1029184905 > > It worked well in the past, but in JavaFX 17, it was so slow that it > blocked the UI thread for a few seconds, making the operating system think > that the program did not respond.‘ > > I improved the updateItem to make it ten times faster, but even so, it is > still not as smooth as before, and there will be an obvious FPS drop. > > If possible, please check our code on GitHub through the above link. > > It is difficult to continue to optimize the updateItem method. Even if I > use a Map to cache nodes created for elements, it will not become faster. > Are we using it in the wrong way? > > On Tue, Nov 22, 2022 at 4:48 PM Johan Vos <johan....@gluonhq.com> wrote: > >> Hi Glavo, >> >> There are more frequent calls to updateItem() since the VirtualFlow tries >> to gradually improve its estimation how large the total list size is >> (rather than assuming all cells have the same size). The major point is >> that if you override updateItem, it should not do more than strictly needed >> (e.g. don't create a Node etc). That method should return as fast as >> possible. >> >> There are many completely different usecases for VirtualFlow in general, >> and it's not trivial to come up with a single implementation that deals >> "best" with all usecases. Therefore, I recently solicited for feedback and >> it might be good if you can give yours too? >> See >> https://mail.openjdk.org/pipermail/openjfx-dev/2022-September/035851.html >> for the start of the discussion. >> >> - Johan >> >> >> On Tue, Nov 22, 2022 at 9:24 AM Glavo <zjx001...@gmail.com> wrote: >> >>> Hi, >>> >>> I'm one of the maintainers of the open source project HMCL (Hello! >>> Minecraft Launcher*)*. This is a Minecraft launcher based on JavaFX. >>> >>> In the past year, we have received a lot of feedback on performance >>> problems. Through performance analysis, I noticed that from JavaFX 17 ea+8, >>> the performance of list scrolling is terrible. >>> >>> I analyzed the method calls and noticed that the updateItem method of >>> ListCell is called 8 times more frequently in JavaFX 17 than in JavaFX 16. >>> >>> I guess this is due to the following commit: >>> >>> >>> https://github.com/openjdk/jfx/commit/8e547571fb3d40df843c27fc11921b5d4765c481 >>> >>> I wonder if this is a bug? >>> >>> Best regards, >>> Glavo >>> >>>