CSS Performance regression inTableColumnHeader.resizeColumnToFitContent

Robert Lichtenberger r.lichtenberger at gmail.com
Fri Feb 2 09:49:56 UTC 2024


Am 02.02.24 um 07:10 schrieb Robert Lichtenberger:
>
>>
>> However, if you want to narrow it down further (perhaps there is more 
>> performance to be gained), you could run your tests against the early 
>> access builds.  You may be able to find a set of 10-20 isolated 
>> commits that could have led to the introduction of the extra 60.000 
>> calls.  For example, check if the problem is present in 20-ea+1 up to 
>> 20-ea-19, 20, 20.0.1 and 20.0.2 (early access versions available are 
>> 1, 2, 3, 4, 6, 7, 9, 11, 19), see here: 
>> https://mvnrepository.com/artifact/org.openjfx/javafx-base
>
> Good idea, I will try that.

Okay, using prebuilt ea-Versions I was able to narrow the problem down:

JFX 19.0.2+1 average run time: 1113
JFX 20-ea+1 average run time: 1110
JFX 20-ea+7 average run time: 1211
JFX 20-ea+9 average run time: 1115
JFX 20-ea+11 average run time: 1646
JFX 20.0.2+3 average run time: 1656

=> Something has happened between ea+9 and ea+11.

I've then let the benchmark run against self-built sdks that are based 
on the git tags.

git checkout tags/20+9: JFX 20-internal+0-2024-02-02-095926 average run 
time: 1098

git checkout tags/20+11: JFX 20-internal+0-2024-02-02-095926 average run 
time: 1576

So this confirms the data of the prebuilt sdks.


There's also a 20+10 tag, which is still fast: JFX 
20-internal+0-2024-02-02-095926 average run time: 1078


So now I've looked at the commits betweeen 20+10 and 20+11.

git checkout c2af0c31b70df238769bd0eb1b7fd04eb7241446: JFX 
20-internal+0-2024-02-02-095926 average run time: 1093

git checkout bb98d886b01d5d1c6117303f40d43eab9f7ac504: JFX 
20-internal+0-2024-02-02-095926 average run time: 1072
=> So it wasn't the "8295806: TableViewSkin: memory leak when changing 
skin" commit

git checkout 6abbe0803456ad648117b8e72deeeeced7cb5231: JFX 
20-internal+0-2024-02-02-095926 average run time: 1086

git checkout c900a00c7527f290e8047792fef4b45002930892: JFX 
20-internal+0-2024-02-02-095926 average run time: 1608

=> So the "culprit" seems to be the "8289357: (Tree)TableView is null in 
(Tree)TableRowSkin during autosize" commit by Marius Hanl.


Looking into the commit, I see that the 
"tableSkin.getChildren().remove(tableRow);" hast been moved out of the 
for-loop.

I've put it back into the loop, which should make things slower, but: 
JFX 20-internal+0-2024-02-02-095926 average run time: 161

Looks like things are _ten times_ faster this way.

Tests in javafx.controls still pass.

Sounds almost too good to be true, so I will investigate a bit further...


Robert




More information about the openjfx-dev mailing list