RFR: 8359599: Calling refresh() for all virtualized controls recreates all cells instead of refreshing the cells [v2]

Marius Hanl mhanl at openjdk.org
Mon Oct 13 12:30:36 UTC 2025


On Sun, 12 Oct 2025 17:43:32 GMT, Johan Vos <jvos at openjdk.org> wrote:

> This is something that worries me. One of the main issues I see with e.g. VirtualFlow, is that some methods can be invoked both during a rendering pulse as well as (indirectly) via explicit invocations, most often by code invoked with Platform.runLater(). Depending on whether code is called during a pulse or not, the behavior can be very different. A major problematic consequence of a method that used to be called outside the pulse, and that is now for some reason (e.g. due to concurrency, as it depends whether the Runnable submitted to Platform.runLater() is executed before or after the pulse) called during a pulse, is that this can lead to flickering. If `requestNextPulse` is called during the layout phase, it is very well possible that a "wrong" layout is rendered briefly before the correct layout is shown.

I'm also not happy with the current situation. There are also some cases where cells request a layout while they are layouted. There is quite some room to optimize several scenarios here.
I would like to check this out and optimize at one point, but really afraid that there might be regressions. So this will probably take a while, but I have a far better understanding of the `VirtualFlow` and surrounding classes than e.g. a year ago + we have far more tests as well!

-------------

PR Comment: https://git.openjdk.org/jfx/pull/1830#issuecomment-3397320838


More information about the openjfx-dev mailing list