Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: classpath initialization/ build performance, was: RE: [platform-core-dev] Issues with large-scale development



Gunnar,

can you please open a PR against JDT/UI regarding the first item. It looks
like
the package explorer is fetching the children although this souldn't be
necessary
in this scenario. However even if we avoid this on startup the time will be
spend
when you expand the first node in the package explorer.

Dirk


                                                                           
             "Gunnar                                                       
             Wagenknecht"                                                  
             <G.Wagenknecht@in                                          To 
             tershop.de>               <platform-core-dev@xxxxxxxxxxx>     
             Sent by:                                                   cc 
             platform-core-dev                                             
             -admin@xxxxxxxxxx                                     Subject 
             g                         classpath initialization/ build     
                                       performance, was: RE:               
                                       [platform-core-dev] Issues with     
             11/08/2004 07:09          large-scale development             
             AM                                                            
                                                                           
                                                                           
             Please respond to                                             
             platform-core-dev                                             
               @eclipse.org                                                
                                                                           
                                                                           




Hi!

One issue that is very frustating to our users is the startup and build
performance. Of course the build issue has improved a little bit with
the background work but there are still some issues we see very often.

1. Classpath container initialization

We have a custom classpath container that reads a properties file in a
workspace project. A typical workspace has around 50 projects in it.
When Eclipse is started it takes a long time to come up with such a
workspace on a ClearCase dynamic view. It is slightly better with
snapshot views. During debugging/tracing I noticed that initializing the
classpath containers in all projects takes an significant amount of time
and that this operation is performed in the main thread which prevents
the workbench window from coming up.

Thread [main] (Suspended)

RequiredCartridgeClassPathContainer(CartridgeClassPathContainer).getClas
spathEntries() line: 121
             ClasspathEntry.validateClasspathEntry(IJavaProject,
IClasspathEntry, boolean, boolean) line: 1022
             JavaProject.getResolvedClasspath(IClasspathEntry[], IPath,
boolean, boolean, Map) line: 1861

DeltaProcessingState$ProjectUpdateInfo.updateProjectReferencesIfNecessar
y() line: 98

DeltaProcessingState.performClasspathResourceChange(JavaProject,
IClasspathEntry[], IClasspathEntry[], IClasspathEntry[], boolean) line:
223
             SetClasspathOperation.updateProjectReferencesIfNecessary()
line:
771
             SetClasspathOperation.executeOperation() line: 246

SetClasspathOperation(JavaModelOperation).run(IProgressMonitor)
line: 700
             Workspace.run(IWorkspaceRunnable, ISchedulingRule, int,
IProgressMonitor) line: 1673

SetClasspathOperation(JavaModelOperation).runOperation(IProgressMonitor)
line: 744
             JavaProject.setRawClasspath(IClasspathEntry[], IPath,
IProgressMonitor, boolean, IClasspathEntry[], boolean, boolean) line:
2658
             JavaCore$3.run(IProgressMonitor) line: 3433
             BatchOperation.executeOperation() line: 34
             BatchOperation(JavaModelOperation).run(IProgressMonitor) line:
700
             Workspace.run(IWorkspaceRunnable, ISchedulingRule, int,
IProgressMonitor) line: 1673
             JavaCore.run(IWorkspaceRunnable, ISchedulingRule,
IProgressMonitor) line: 3246
             JavaCore.setClasspathContainer(IPath, IJavaProject[],
IClasspathContainer[], IProgressMonitor) line: 3416
             BeehiveClassPathInitializer.initialize(IPath, IJavaProject)
line: 57
             JavaModelManager.initializeContainer(IJavaProject, IPath)
line:
1261
             JavaModelManager.initializeAllContainers(IJavaProject, IPath)
line: 1226
             JavaModelManager.getClasspathContainer(IPath, IJavaProject)
line: 833
             JavaCore.getClasspathContainer(IPath, IJavaProject) line: 1184
             JavaProject.getResolvedClasspath(IClasspathEntry[], IPath,
boolean, boolean, Map) line: 1889
             JavaProject.getResolvedClasspath(boolean, boolean, boolean)
line: 1799
             PackageFragmentRoot.isOnClasspath() line: 805
             PackageFragmentRoot.exists() line: 356
             PackageFragmentProvider.getChildren(Object) line: 75
             PackageExplorerContentProvider.getChildren(Object) line: 127

PackageExplorerPart$PackageExplorerProblemTreeViewer.isExpandable(Object
) line: 260

PackageExplorerPart$PackageExplorerProblemTreeViewer(AbstractTreeViewer)
.updatePlus(Item, Object) line: 1587

PackageExplorerPart$PackageExplorerProblemTreeViewer(AbstractTreeViewer)
.createTreeItem(Widget, Object, int) line: 382
             AbstractTreeViewer$1.run() line: 361
             BusyIndicator.showWhile(Display, Runnable) line: 69

PackageExplorerPart$PackageExplorerProblemTreeViewer(AbstractTreeViewer)
.createChildren(Widget) line: 342
             AbstractTreeViewer$5.run() line: 787

PackageExplorerPart$PackageExplorerProblemTreeViewer(StructuredViewer).p
reservingSelection(Runnable) line: 862

PackageExplorerPart$PackageExplorerProblemTreeViewer(AbstractTreeViewer)
.inputChanged(Object, Object) line: 777

PackageExplorerPart$PackageExplorerProblemTreeViewer(ContentViewer).setI
nput(Object) line: 238

PackageExplorerPart$PackageExplorerProblemTreeViewer(StructuredViewer).s
etInput(Object) line: 1059
             PackageExplorerPart.createPartControl(Composite) line: 475
             PartPane$2.run() line: 137
             InternalPlatform.run(ISafeRunnable) line: 616
             Platform.run(ISafeRunnable) line: 747
             ViewPane(PartPane).createChildControl() line: 133
             ViewPane.createChildControl() line: 135
             ViewFactory$1.run() line: 351
             InternalPlatform.run(ISafeRunnable) line: 616
             Platform.run(ISafeRunnable) line: 747
             ViewFactory.busyRestoreView(IViewReference) line: 273
             ViewFactory$2.run() line: 530
             BusyIndicator.showWhile(Display, Runnable) line: 69
             ViewFactory.restoreView(IViewReference) line: 528
             ViewFactory$ViewReference.getPart(boolean) line: 102
             WorkbenchPage$1.propertyChange(PropertyChangeEvent) line: 132
             ViewPane(LayoutPart).setVisible(boolean) line: 268
             ViewPane(PartPane).setVisible(boolean) line: 317
             ViewPane.setVisible(boolean) line: 568
             PresentablePart.setVisible(boolean) line: 122

DefaultViewPresentation(DefaultPartPresentation).selectPart(IPresentable
Part) line: 1116
             ViewStack(PartStack).refreshPresentationSelection() line: 946
             ViewStack(PartStack).createControl(Composite,
StackPresentation)
line: 467
             ViewStack(PartStack).createControl(Composite) line: 367
             ViewSashContainer(PartSashContainer).createControl(Composite)
line: 432
             PerspectiveHelper.activate(Composite) line: 155
             Perspective.onActivate() line: 732
             WorkbenchPage.onActivate() line: 2063
             WorkbenchWindow$4.run() line: 1858
             BusyIndicator.showWhile(Display, Runnable) line: 69
             WorkbenchWindow.setActivePage(IWorkbenchPage) line: 1845
             WorkbenchWindow.restoreState(IMemento, IPerspectiveDescriptor)
line: 1409
             Workbench.restoreState(IMemento) line: 1224
             Workbench.access$10(Workbench, IMemento) line: 1185
             Workbench$13.run() line: 1096
             InternalPlatform.run(ISafeRunnable) line: 616
             Platform.run(ISafeRunnable) line: 747
             Workbench.restoreState() line: 1029
             WorkbenchConfigurer.restoreState() line: 167
             IDEWorkbenchAdvisor(WorkbenchAdvisor).openWindows() line: 652
             Workbench.init(Display) line: 819
             Workbench.runUI() line: 1325
             Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor)
line:
254
             PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor)
line: 141
             IDEApplication.run(Object) line: 96
             PlatformActivator$1.run(Object) line: 335
             EclipseStarter.run(Object) line: 273
             EclipseStarter.run(String[], Runnable) line: 129
             NativeMethodAccessorImpl.invoke0(Method, Object, Object[])
line:
not available [native method]
             NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
             DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
             Method.invoke(Object, Object[]) line: 324
             Main.basicRun(String[]) line: 185
             Main.run(String[]) line: 704
             Main.main(String[]) line: 688


2. Builder and incremental builders etc.

For historical reasons we have one directory called "javasource" in our
project structure where all Java source files resides in. In some
projects the number of files exceeds 5000 files with less than 0.1%
other than Java source files. One of the most seen tasks during a build
(IProgressMonitor feedback ;) is "Copying resources to the output
folder". Ahm I can't say how often people complain about this. On some
projects it takes more than 8 minutes although only a few source files
changed (the compile is fast).

Another feature request would be the ability to have control over the
JDT builder. For example, to set some per project options for specific
project natures (project persistent properties) like "don't generate
output" (don' generate .class files, don't copy resource, just generate
annotations).

Cu, Gunnar

_______________________________________________
platform-core-dev mailing list
platform-core-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/platform-core-dev




Back to the top