RFR: 8185886: Improve scrolling performance of TableView and TreeTableView
dannygonzalez
github.com+6702882+dannygonzalez at openjdk.java.net
Thu Apr 16 09:47:37 UTC 2020
On Thu, 16 Apr 2020 08:46:26 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> If it is of any help, I have attached a VisualVM snapshot (v1.4.4) where the ExpressionHelper.removeListener is using
>> 61% of the JavaFX thread whilst running our application.
>> [snapshot-1587024308245.nps.zip](https://github.com/openjdk/jfx/files/4485728/snapshot-1587024308245.nps.zip)
>>
>> If you show only the JavaFX Application thread, press the "HotSpot" and "Reverse Calls" button you can take a look to
>> see which classes are calling the removeListener function.
>> 
>
> @dannygonzalez Could you perhaps debug your application and take a look at how large the following array is: a random
> node -> `scene` -> `value` -> `window` -> `readOnlyProperty` -> `helper` -> `changeListeners`. I just tested this with
> a custom control displaying 200 cells on screen at once (each cell consisting of about 30 nodes itself), and I saw
> about 20000 change listeners registered on this single Scene Window property. However, this custom control is not
> creating/destroying cells beyond the initial allocation, so there wouldn't be any registering and unregistering going
> on, scrolling was still smooth >30 fps.
@hjohn I have 12136 change listeners when debugging our application as you suggested.
Please note that I see the issue when the TableView is having items added to it. If you just have a static TableView I
do not see the issue.
It is only when you add items to the TableView which causes a myriad of listeners to be deregistered and registered.
The Visual VM snapshot I attached above was taken as our application was adding items to the TableView.
-------------
PR: https://git.openjdk.java.net/jfx/pull/108
More information about the openjfx-dev
mailing list