From e85390856ae703d30b56d9cb557bae61e2893327 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 4 Apr 2012 14:45:52 +0200 Subject: [PATCH] Bug 366570: Added tracing option. --- core/org.eclipse.cdt.core/.options | 3 +++ .../core/resources/ResourceLookupTree.java | 25 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/core/org.eclipse.cdt.core/.options b/core/org.eclipse.cdt.core/.options index 7b086655c64..c5ba283ae3b 100644 --- a/core/org.eclipse.cdt.core/.options +++ b/core/org.eclipse.cdt.core/.options @@ -9,6 +9,9 @@ org.eclipse.cdt.core/debug/parser=false # Prints parser stack traces org.eclipse.cdt.core/debug/parser/exceptions=false +# Reports statistics for building the structure to do resource lookups. +org.eclipse.cdt.core/debug/resourceLookup=false + # Reports scanner activity org.eclipse.cdt.core/debug/scanner=false diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java index cb83aeeec43..8a554e5a9ba 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/resources/ResourceLookupTree.java @@ -122,6 +122,8 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit private boolean fNeedCleanup; private Node fLastFolderNode; + private boolean fTrace; + public ResourceLookupTree() { fRootNode= new Node(null, CharArrayUtils.EMPTY, false, false) {}; fFileExtensions= new HashMap(); @@ -133,6 +135,7 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit } }; fUnrefJob.setSystem(true); + fTrace= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/resourceLookup")); //$NON-NLS-1$//$NON-NLS-2$ } public void startup() { @@ -265,14 +268,36 @@ class ResourceLookupTree implements IResourceChangeListener, IResourceDeltaVisit createFileNode(res.getFullPath(), null); } } else { + long time=0, count=0; + final boolean trace = fTrace && res instanceof IProject; + if (trace) { + time= System.currentTimeMillis(); + count= countNodes(); + } try { res.accept(this, 0); } catch (CoreException e) { CCorePlugin.log(e); } + if (trace) { + System.out.println("Built file lookup tree for " + res.getName() + ", took " + //$NON-NLS-1$//$NON-NLS-2$ + (System.currentTimeMillis() - time) + "ms to add " + (countNodes()-count) + " nodes."); //$NON-NLS-1$ //$NON-NLS-2$ + } } } + private long countNodes() { + long result= 0; + for (Object node : fNodeMap.values()) { + if (node instanceof Node[]) { + result += ((Node[]) node).length; + } else { + result++; + } + } + return result; + } + /** * Add a resource tree by using a resource proxy visitor. */