[
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: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists