This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 150013 - Open projects dialog blocked at computing icon size
Summary: Open projects dialog blocked at computing icon size
Status: RESOLVED DUPLICATE of bug 169303
Alias: None
Product: projects
Classification: Unclassified
Component: Generic Projects UI (show other bugs)
Version: 6.x
Hardware: All All
: P3 blocker (vote)
Assignee: Milan Kubec
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-10-14 08:18 UTC by Jaroslav Tulach
Modified: 2009-09-16 07:20 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jaroslav Tulach 2008-10-14 08:18:50 UTC
With cold caches opening of projects dialog with root being root of NetBeans Hg repository blocks AWT for ages. From 
the attached thread dump it seems that the time is wasted in waiting for icon to compute the proper size. Maybe direct 
use of fixed height cache could help...

"AWT-EventQueue-1" prio=10 tid=0x08168000 nid=0x3253 runnable [0x8c0d0000..0x8c0d2020]
   java.lang.Thread.State: RUNNABLE
        at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
        at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:228)
        at java.io.File.isFile(File.java:778)
        at 
org.netbeans.modules.project.ant.AntBasedProjectFactorySingleton.isProject(AntBasedProjectFactorySingleton.java:150)
        at org.netbeans.api.project.ProjectManager.checkForProject(ProjectManager.java:473)
        at org.netbeans.api.project.ProjectManager.access$600(ProjectManager.java:80)
        at org.netbeans.api.project.ProjectManager$4.run(ProjectManager.java:443)
        at org.netbeans.api.project.ProjectManager$4.run(ProjectManager.java:418)
        at org.openide.util.Mutex.readAccess(Mutex.java:327)
        at org.openide.util.Mutex$1R.run(Mutex.java:1299)
        at org.netbeans.api.project.ProjectManager$2$1.run(ProjectManager.java:120)
        at org.openide.filesystems.EventControl.runAtomicAction(EventControl.java:120)
        at org.openide.filesystems.FileSystem.runAtomicAction(FileSystem.java:499)
        at org.openide.filesystems.FileUtil.runAtomicAction(FileUtil.java:216)
        at org.netbeans.api.project.ProjectManager$2.execute(ProjectManager.java:118)
        at org.openide.util.Mutex.doWrapperAccess(Mutex.java:1320)
        at org.openide.util.Mutex.readAccess(Mutex.java:275)
        at org.netbeans.api.project.ProjectManager.isProject(ProjectManager.java:417)
        at org.netbeans.modules.project.ui.ProjectChooserAccessory.isProjectDir(ProjectChooserAccessory.java:359)
        at org.netbeans.modules.project.ui.ProjectChooserAccessory.access$800(ProjectChooserAccessory.java:86)
        at 
org.netbeans.modules.project.ui.ProjectChooserAccessory$ProjectFileView.getIcon(ProjectChooserAccessory.java:590)
        at javax.swing.JFileChooser.getIcon(JFileChooser.java:1535)
        at 
org.netbeans.swing.dirchooser.DirectoryChooserUI$DirectoryTreeRenderer.getNodeIcon(DirectoryChooserUI.java:2346)
        at 
org.netbeans.swing.dirchooser.DirectoryChooserUI$DirectoryTreeRenderer.getTreeCellRendererComponent(DirectoryChooserUI.java:2330)
        at javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsHandler.getNodeDimensions(BasicTreeUI.java:2709)
        at javax.swing.tree.AbstractLayoutCache.getNodeDimensions(AbstractLayoutCache.java:475)
        at 
javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.updatePreferredSize(VariableHeightLayoutCache.java:1342)
        at javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(VariableHeightLayoutCache.java:1469)
        at javax.swing.tree.VariableHeightLayoutCache$TreeStateNode.expand(VariableHeightLayoutCache.java:1270)
        at javax.swing.tree.VariableHeightLayoutCache.rebuild(VariableHeightLayoutCache.java:725)
        at javax.swing.tree.VariableHeightLayoutCache.setModel(VariableHeightLayoutCache.java:91)
        at javax.swing.plaf.basic.BasicTreeUI.setModel(BasicTreeUI.java:398)
        at javax.swing.plaf.basic.BasicTreeUI$Handler.propertyChange(BasicTreeUI.java:3322)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:339)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:276)
        at java.awt.Component.firePropertyChange(Component.java:7868)
        at javax.swing.JTree.setModel(JTree.java:863)
        at org.netbeans.swing.dirchooser.DirectoryChooserUI$12.run(DirectoryChooserUI.java:1084)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:177)
        at java.awt.Dialog$1.run(Dialog.java:1045)
        at java.awt.Dialog$3.run(Dialog.java:1097)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1095)
        at javax.swing.JFileChooser.showDialog(JFileChooser.java:723)
        at javax.swing.JFileChooser.showOpenDialog(JFileChooser.java:626)
        at org.netbeans.modules.project.ui.actions.OpenProject.actionPerformed(OpenProject.java:101)
        at org.openide.windows.TopComponent.processKeyBinding(TopComponent.java:1007)
        at javax.swing.JComponent.processKeyBindings(JComponent.java:2895)
        at javax.swing.JComponent.processKeyEvent(JComponent.java:2812)
        at java.awt.Component.processEvent(Component.java:5818)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4413)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1848)
        at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:697)
        at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:962)
        at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:834)
        at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:661)
        at java.awt.Component.dispatchEventImpl(Component.java:4285)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Window.dispatchEventImpl(Window.java:2440)
        at java.awt.Component.dispatchEvent(Component.java:4243)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:104)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Comment 1 Milos Kleint 2008-10-14 09:13:11 UTC
what part of the stacktrace leads you to believe it has to do with icon size?

IMHO it's actuall the project loading that needs to be performed in order to retrieve the ProjectInformation from
project's lookup that takes time.

Ideally the icons would be an attribute of the ProjectFactory and only ProjectFactory.isProject() gets called. However
it won't work for ant projects easily as these all share a single factory. To figure which of teh ant project types is
actually used one has to examine the nbproject/project.xml file and find the appropriate project type impl. 
Comment 2 Jaroslav Tulach 2008-10-14 09:54:24 UTC
Imho:
javax.swing.plaf.basic.BasicTreeUI$NodeDimensionsHandler.getNodeDimensions(BasicTreeUI.java:2709)
means that the JTree is just layouting all its nodes before doing first paint.

As far as I can see the actual behaviour, the choose is shown with default folder icon and only later the correct 
project icons are computed. This is plausible, however the above stacktrace shows that we also need to eliminate the 
query to project system when computing getNodeDimentions.
Comment 3 Milan Kubec 2009-09-15 14:20:29 UTC
I don't see any delay when opening projects open dialog for NetBeans Hg repository. If there is some problem we would
receive "AWT thread blocked for ..." issue report. Let's wait for such report.
Comment 4 Jaroslav Tulach 2009-09-16 07:20:05 UTC
I think this is a duplicate of a bug recently analysed by Tomáš Pávek.
Comment 5 Jaroslav Tulach 2009-09-16 07:20:57 UTC

*** This issue has been marked as a duplicate of 169303 ***