On Mon, 25 Nov 2024 20:13:35 GMT, Jeremy <[email protected]> wrote: >> The AWTEventMulticaster is a tree node with 2 children. This PR proposes >> rebalancing that tree after 500 additions to avoid potential >> StackOverflowErrors when trying to interact with a large AWTEventMulticaster. >> >> In the original headful test: >> We added 8,000 checkboxes, and when their parent panel was hidden the stack >> needed to grow to 24,000 lines. It took 8,000 lines to recursively call >> `java.awt.AWTEventMulticaster.componentHidden`, and then 16,000 additional >> lines to call two recursive methods to remove a listener: >> >> java.desktop/java.awt.AWTEventMulticaster.removeInternal() >> java.desktop/java.awt.AWTEventMulticaster.remove() >> >> >> With this current PR the max stack size reaches 1,267 instead. (If we >> rebalanced at EVERY addition, then that same scenario would reach a max >> stack size of 71.) >> >> JDK-8342782 included a headful test case, but I think the main problem it >> demonstrated can be represented by the headless test case attached to this >> PR. >> >> Depending on how this PR is received I may submit a separate ticket & PR to >> modify AquaButtonUI so it doesn't always attach an AncestorListener. (That >> is: if my GUI includes 8,000 checkboxes then I don't need 8,000 >> AncestorListeners.) But JDK-8342782's test case is currently written in a >> way that should reproduce across all L&F's, so that can be discussed >> separately. > > Jeremy has updated the pull request incrementally with one additional commit > since the last revision: > > 8342782: adding copyright notice in LargeAWTEventMulticasterTest
test/jdk/java/awt/event/StressTest/LargeAWTEventMulticasterTest.java line 25: > 23: > 24: import java.awt.event.*; > 25: import java.awt.*; Please expand the wild card imports - we try to minimise wild card imports in JDK code. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/21962#discussion_r1857389973
