You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by "Jesse Glick (JIRA)" <ji...@apache.org> on 2018/05/24 18:53:00 UTC

[jira] [Created] (NETBEANS-861) Terrible UI performance using Ubuntu's packaged JRE due to AtkWrapper

Jesse Glick created NETBEANS-861:
------------------------------------

             Summary: 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


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-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists