On Thu, 23 Jan 2020 12:51:59 GMT, Ambarish Rapte <ara...@openjdk.org> wrote:

>> This PR is a fix for 
>> [JDK-8232824](https://bugs.openjdk.java.net/browse/JDK-8232824)
>> This issue is regression of 
>> [JDK-8187074](https://bugs.openjdk.java.net/browse/JDK-8187074).
>> 
>> Issue.
>> - `Parent.viewOrderChildren` is a list of children sorted according to view 
>> order.
>> - `Parent.viewOrderChildren` is cleared and computed in 
>> `Parent.computeViewOrderChildren()` which is called from 
>> `Parent.doUpdatePeer()` when a `pulse `is received.
>> 
>> - Below is the scenario mentioned in this issue,
>> 1. `TabPane` is created with few `tabs`.
>> 2. For each tab,  a `TabHeaderSkin` is created with `setViewOrder(1)` and is 
>> added to `TabHeaderArea.headersRegion`
>> 3. All these `TabHeaderSkin`s are added to `Parent.viewOrderChildren` on 
>> `pulse`.
>> 4. When the `TabPane` is removed from scene, then on the next pulse the 
>> method `Parent.doUpdatePeer()` does not get called for 
>> `TabHeaderArea.headersRegion`, because it is not part for scenegraph anymore.
>> So `Parent.computeViewOrderChildren()` does not get called and the 
>> `Parent.viewOrderChildren` does not get cleared, which causes the leak.
>> 
>> Fix:
>> Clear the `Parent.viewOrderChildren` list when marking 
>> `DirtyBits.PARENT_CHILDREN_VIEW_ORDER` as dirty.
>> `Parent.viewOrderChildren` will be computed on next `pulse`.
>> This will maintain lazy computation of `Parent.viewOrderChildren`. 
>> 
>> Added a system test, fails without fix and passes with. No failures in 
>> existing tests.
> 
> The pull request has been updated with 1 additional commit.

Looks good.

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

Marked as reviewed by kcr (Lead).

PR: https://git.openjdk.java.net/jfx/pull/79

Reply via email to