On Thu, 30 Mar 2023 13:01:09 GMT, Marius Hanl <[email protected]> wrote:
> One more optimization we could have a look at is too create the `BitSet` or
> related subclasses with a predefined size, so we don't need to grow the
> `long[] bits` array too often. `PseudoClassState` already has a constructor
> that accepts another collection, but can not use this information to create a
> bigger `bits` array. (Like e.g. the `ArrayList` or `HashSet` constructor)
I only looked at `PseudoClassState`, and it will rarely exceed the 64 bits that
are available, although users can of course create as many pseudo classes as
they want -- I wouldn't recommend this though with how the CSS caching logic is
currently implemented. A new key is created for every combination of pseudo
classes encountered per depth level in a live scenegraph (but only for classes
that can affect styling).
The low amount of pseudo classes is also why I didn't bother creating an
immutable variant which maps them to bits. This is IMHO an optimization that
was done because of the mutable nature of `PseudoClassState` (resulting in many
many copies), but which is mostly irrelevant now that most of them are
immutable.
Perhaps this is useful for the other subclass `StyleClassSet`, but I have my
doubts it is currently a pressing performance issue.
> modules/javafx.graphics/src/main/java/com/sun/javafx/css/BitSet.java line 227:
>
>> 225: final T t = cast(o);
>> 226:
>> 227: if (t == null) { // if cast failed, it can't be part of this
>> set
>
> If I understand the code correctly, this can't happen right now, right?
`BitSet` did not conform to the collection contract here. It can happen in
current JavaFX releases by calling a method that returns `Set<PseudoClass>` and
asking it `contains("text")` -- as `String` cannot be cast to `PseudoClass`,
this will result in a `ClassCastException` while it should just return `false`.
-------------
PR Comment: https://git.openjdk.org/jfx/pull/1076#issuecomment-1490316678
PR Review Comment: https://git.openjdk.org/jfx/pull/1076#discussion_r1153280950