List scrolling is very slow in JavaFX 17

Glavo zjx001202 at gmail.com
Tue Nov 22 11:17:19 UTC 2022


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.vos at 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 <zjx001202 at 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
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20221122/ad739234/attachment.htm>


More information about the openjfx-dev mailing list