RFR: JDK-8199216: Quadratic layout time with nested nodes and pseudo-class in style sheet [v8]

John Hendrikx jhendrikx at openjdk.org
Wed Aug 16 14:31:46 UTC 2023


On Wed, 16 Aug 2023 14:06:16 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:

>> modules/javafx.graphics/src/main/java/javafx/css/Match.java line 1:
>> 
>>> 1: /*
>> 
>> The compare method seems wrong. I think it should delegate to `Integer.compare`.
>> 
>> `specificity` should also be made `private`.
>
> These were not changed as part of this PR, although I agree on both counts.

I should add, even though there are some edge cases where the compare method could fail in `Match`, it will work correctly in practice as `specificity` is always a positive number.

        specificity = (idCount << 8) | (styleClassCount << 4) | nPseudoClasses;

I do question how this is calculated though.  It seems to make assumptions that `styleClassCount` and the number of pseudo classes never exceeds 16 -- I would agree that having 16 style classes / pseudo classes in a match is on the high side, but certainly not so high that it could never happen.

It seems to be a bit of a premature optimization, since `Match` retains all the information that was used to calculate `specificity`, and so they could have instead have compared `idCount`, `styleClassCount` and `pseudoClasses.size()` in turn...

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1076#discussion_r1296004826


More information about the openjfx-dev mailing list