RFR: JDK-8199216: Quadratic layout time with nested nodes and pseudo-class in style sheet [v8]
Jose Pereda
jpereda at openjdk.org
Tue Aug 15 14:38:40 UTC 2023
On Tue, 15 Aug 2023 14:08:08 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> modules/javafx.graphics/src/main/java/com/sun/javafx/css/PseudoClassState.java line 65:
>>
>>> 63: /** {@inheritDoc} */
>>> 64: @Override
>>> 65: public <T> T[] toArray(T[] a) {
>>
>> You have mentioned that this was a bug but hard to reproduce.
>> Could you add a test that somehow calls `toArray` that fails before your patch and passes now?
>
> It's definitely a bug, but it would only appear if you had bit sets which required more than 1 long to store their data **and** you called `toArray`. It would then throw an `ArrayIndexOutOfBoundsException` in this line:
>
> final long state = getBits()[index];
>
> This is because `index` is used for two unrelated purposes:
> - the index into the array of longs
> - the index of the entry in the resulting array
>
> If the outer loop ever needs two passes, it again wants to read a `long` using `getBits()[index]` but as `index` was advanced (multiple times) while filling entries in the result array, it won't be the correct index at all.
>
> Anyway, I'm not sure what the value would be of a test. Since `toArray` is no longer implemented by us but by `AbstractSet`, I'd just be testing the `AbstractSet` code.
Okay, thanks for the clarification.
So if I get it right, the removal of `toArray` doesn't have to do with the bug, but with the fact that with the immutable set it is not longer required?
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1076#discussion_r1294681403
More information about the openjfx-dev
mailing list