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