List scrolling is very slow in JavaFX 17
Johan Vos
johan.vos at gluonhq.com
Tue Nov 22 17:29:24 UTC 2022
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 <zjx001202 at 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.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/72b1c941/attachment.htm>
More information about the openjfx-dev
mailing list