<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>I took a quick look, I didn't see any Node creation, the
updateItem calls look pretty normal (setting some labels and a
list of tags).</p>
<p>I downloaded the application and installed the application (it's
nicely packaged) and clicked on "download" which shows the
problematic list. It indeed performs badly (10 fps orso), even
when showing only about 100 items (of which 6 were visible at a
time). All items are the same height. When turning on another
option (snapshots) there are probably 1000 items or more, still
showing at most 6 at a time and FPS drops to like 2 or 3; I'd
consider it pretty unusable. It doesn't seem to improve after a
while either.<br>
</p>
<p>I don't like the fact that it seems to get slower with more items
in the list, but still only 6 showing at a time.</p>
<p>Is there a description somewhere of how the current
implementation works? Is it trying to get the sizes of all cells
(eventually) to make an accurate scroll bar representation? I
don't quite see how that could possibly work without querying all
cells, as a single cell could be large enough to influence the
scroll bar size and position significantly even among thousands of
items...</p>
<p>Thinking further, once a list passes a certain size, the
scrollbar thumb will be at its minimum size, there is little point
to try to get the exact relative sizes of position and knob then
that may require information on all cells. Does the implementation
have an option to switch to a more simplistic scrollbar
representation (1 cell = 1 position, regardless of size) when the
number of visible cells are vastly outnumbered by the total number
of items?</p>
<p>The fixedCellSize property probably will alleviate the
performance problems, but I find it hard to use as generally I
only know that my cells are all the same size, but I don't know
what that size actually is as it depends on the styles used.</p>
<p>--John<br>
</p>
<div class="moz-cite-prefix">On 22/11/2022 09:48, Johan Vos wrote:<br>
</div>
<blockquote type="cite"
cite="mid:CABxFH2EF4Sp6_gG9bqCH_jdFZmXOi4uqD3PY3y9yo6zhYpqxJA@mail.gmail.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div dir="ltr">Hi Glavo,
<div><br>
</div>
<div>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.</div>
<div><br>
</div>
<div>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? </div>
<div>See <a
href="https://mail.openjdk.org/pipermail/openjfx-dev/2022-September/035851.html"
moz-do-not-send="true" class="moz-txt-link-freetext">https://mail.openjdk.org/pipermail/openjfx-dev/2022-September/035851.html</a>
for the start of the discussion.</div>
<div><br>
</div>
<div>- Johan</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Tue, Nov 22, 2022 at 9:24
AM Glavo <<a href="mailto:zjx001202@gmail.com"
moz-do-not-send="true" class="moz-txt-link-freetext">zjx001202@gmail.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px
0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I'm one of the maintainers of the open source project
HMCL (Hello! Minecraft Launcher<i>)</i>. This is a
Minecraft launcher based on JavaFX.
<div>
<div><br>
</div>
<div>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.<br>
</div>
<div><br>
</div>
<div>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.<br>
</div>
<div><br>
</div>
<div>I guess this is due to the following commit:<br>
</div>
<div><br>
</div>
<div> <a
href="https://github.com/openjdk/jfx/commit/8e547571fb3d40df843c27fc11921b5d4765c481"
target="_blank" moz-do-not-send="true"
class="moz-txt-link-freetext">https://github.com/openjdk/jfx/commit/8e547571fb3d40df843c27fc11921b5d4765c481</a></div>
<div><br>
</div>
<div>I wonder if this is a bug? <br>
</div>
</div>
<div><br>
</div>
<div>Best regards,<br>
Glavo</div>
<div><br>
</div>
</div>
</div>
</blockquote>
</div>
</blockquote>
</body>
</html>