[ https://issues.apache.org/jira/browse/NETBEANS-861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16490774#comment-16490774 ]
Jesse Glick commented on NETBEANS-861: -------------------------------------- Update: that option does not work in JDK 10/11; you need to comment out the Gnome ATK binding in {{$JAVA_HOME/lib/accessibility.properties}}. Perhaps {{messages.log}} could at least issue a warning when ATK is detected? Not sure what the best means is of alerting a user to the problem, if it is not possible to automatically disable ATK. > Terrible UI performance using Ubuntu's packaged JRE due to AtkWrapper > --------------------------------------------------------------------- > > Key: NETBEANS-861 > URL: https://issues.apache.org/jira/browse/NETBEANS-861 > Project: NetBeans > Issue Type: Bug > Components: platform - JDK Problems > Reporter: Jesse Glick > Priority: Major > Labels: perfomance > > I recently noticed very poor UI responsiveness, seeming to get worse over > time. For example, just moving the selection around tree nodes in the > *Projects* tab had ~1s delays, which was frustrating. *Alt-Shift-Y* pointed > me to {{org.GNOME.Accessibility.AtkWrapper.emitSignal}} from > {{JLabel.setText}} as a hotspot, confirmed with > {code:none} > while :; do jstack $NBPID | fgrep AtkWrapper; sleep 1; done > {code} > and in thread dump excerpts like > {code:none} > "AWT-EventQueue-2" ... > java.lang.Thread.State: RUNNABLE > at org.GNOME.Accessibility.AtkWrapper.emitSignal(Native Method) > at > org.GNOME.Accessibility.AtkWrapper$5.propertyChange(AtkWrapper.java:545) > at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335) > at > java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327) > at > java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263) > at > javax.accessibility.AccessibleContext.firePropertyChange(AccessibleContext.java:768) > at javax.swing.JLabel.setIcon(JLabel.java:393) > at > org.openide.explorer.view.NodeRenderer.configureFrom(NodeRenderer.java:229) > at > org.openide.explorer.view.NodeRenderer.getTreeCellRendererComponent(NodeRenderer.java:138) > at javax.swing.plaf.basic.BasicTreeUI.paintRow(BasicTreeUI.java:1536) > at javax.swing.plaf.basic.BasicTreeUI.paint(BasicTreeUI.java:1224) > at javax.swing.plaf.metal.MetalTreeUI.paint(MetalTreeUI.java:169) > at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161) > at javax.swing.JComponent.paintComponent(JComponent.java:780) > at javax.swing.JComponent.paint(JComponent.java:1056) > at > org.openide.explorer.view.TreeView$ExplorerTree.access$1301(TreeView.java:1694) > at > org.openide.explorer.view.TreeView$ExplorerTree.guardedPaint(TreeView.java:1836) > at > org.openide.explorer.view.TreeView$ExplorerTree.access$1600(TreeView.java:1694) > at > org.openide.explorer.view.TreeView$ExplorerTree$GuardedActions.run(TreeView.java:2163) > at > org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:188) > at > org.netbeans.modules.openide.util.DefaultMutexImplementation$1R.run(DefaultMutexImplementation.java:1014) > at > org.openide.nodes.Children$ProjectManagerDeadlockDetector.execute(Children.java:1913) > at > org.netbeans.modules.openide.util.DefaultMutexImplementation.doWrapperAccess(DefaultMutexImplementation.java:1035) > at > org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:181) > at org.openide.util.Mutex.readAccess(Mutex.java:193) > at > org.openide.explorer.view.TreeView$ExplorerTree$GuardedActions.<init>(TreeView.java:2155) > at > org.openide.explorer.view.TreeView$ExplorerTree.paint(TreeView.java:1807) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JViewport.paint(JViewport.java:728) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at > org.netbeans.swing.tabcontrol.TabbedContainer.paint(TabbedContainer.java:969) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JLayeredPane.paint(JLayeredPane.java:586) > at javax.swing.JComponent.paintChildren(JComponent.java:889) > - locked <0x00000000800fba88> (a java.awt.Component$AWTTreeLock) > at javax.swing.JComponent.paint(JComponent.java:1065) > at javax.swing.JComponent.paintToOffscreen(JComponent.java:5210) > at > javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579) > at > javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502) > at > javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:306) > at javax.swing.RepaintManager.paint(RepaintManager.java:1272) > at javax.swing.JComponent._paintImmediately(JComponent.java:5158) > at javax.swing.JComponent.paintImmediately(JComponent.java:4969) > at javax.swing.RepaintManager$4.run(RepaintManager.java:831) > at javax.swing.RepaintManager$4.run(RepaintManager.java:814) > at java.security.AccessController.doPrivileged(Native Method) > at > java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) > at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814) > at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789) > at > javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738) > at javax.swing.RepaintManager.access$1200(RepaintManager.java:64) > at > javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732) > at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) > at ... > {code} > I think that is running code [like > this|https://github.com/GNOME/java-atk-wrapper/blob/5876a9c0f94c4db943862137218bc6ac9cbe4a70/wrapper/org/GNOME/Accessibility/AtkWrapper.java.in#L434]. > Searching around, I found [bug > #791970|https://bugzilla.gnome.org/show_bug.cgi?id=791970], and confirmed > that the {{master}} code still appears to have an obvious listener leak. > As per [this tip|https://stackoverflow.com/a/47985124/12916] I was able to > confirm that the problems go away if you add > {{-J-Djavax.accessibility.assistive_technologies=}} to the NB startup. I > would propose that {{platform/lib/nbexec}} add this automatically when > {{$jdkhome/jre/lib/ext/java-atk-wrapper.jar}} exists; or perhaps this can be > done more dynamically in core startup code when > {{org.GNOME.Accessibility.AtkWrapper}} is found in the bootstrap classpath. -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists