diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CIndex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CIndex.java index 8d8e6cbfd88..92b664bac43 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CIndex.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/CIndex.java @@ -461,4 +461,26 @@ public class CIndex implements IIndex { return flatten(result); } } + + public long getCacheHits() { + long result= 0; + for (int i = 0; i < fFragments.length; i++) { + result+= fFragments[i].getCacheHits(); + } + return result; + } + + public long getCacheMisses() { + long result= 0; + for (int i = 0; i < fFragments.length; i++) { + result+= fFragments[i].getCacheMisses(); + } + return result; + } + + public void resetCacheCounters() { + for (int i = 0; i < fFragments.length; i++) { + fFragments[i].resetCacheCounters(); + } + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragment.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragment.java index 6a969a85557..6b21597f302 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragment.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IIndexFragment.java @@ -172,5 +172,20 @@ public interface IIndexFragment { * @throws CoreException * @see IIndexFragment#PROPERTY_FRAGMENT_ID */ - public String getProperty(String propertyName) throws CoreException; + public String getProperty(String propertyName) throws CoreException; + + /** + * Resets the counters for cache-hits and cache-misses. + */ + void resetCacheCounters(); + + /** + * Returns cache hits since last reset of counters. + */ + long getCacheHits(); + + /** + * Returns cache misses since last reset of counters. + */ + long getCacheMisses(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java index e4df0d8b8b1..6433fcdb764 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/index/IWritableIndex.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006 Wind River Systems, Inc. and others. + * Copyright (c) 2006, 2007 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -58,4 +58,19 @@ public interface IWritableIndex extends IIndex { * Releases a write lock, reestablishing a certain amount of read locks. */ void releaseWriteLock(int establishReadLockCount); + + /** + * Resets the counters for cache-hits + */ + void resetCacheCounters(); + + /** + * Returns cache hits since last reset of counters. + */ + long getCacheHits(); + + /** + * Returns cache misses since last reset of counters. + */ + long getCacheMisses(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index 0ae53afe878..93b7fc86479 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -693,5 +693,17 @@ public class PDOM extends PlatformObject implements IIndexFragment, IPDOM { public void close() throws CoreException { fLinkageIDCache.clear(); db.close(); + } + + public long getCacheHits() { + return db.getCacheHits(); + } + + public long getCacheMisses() { + return db.getCacheMisses(); + } + + public void resetCacheCounters() { + db.resetCacheCounters(); } } \ No newline at end of file diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java index 81524de56dd..96cb9536732 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/db/Database.java @@ -66,6 +66,8 @@ public class Database { private long malloced; private long freed; + private long cacheHits; + private long cacheMisses; private ChunkCache fCache; // public for tests only, you shouldn't need these @@ -164,6 +166,7 @@ public class Database { Chunk chunk = chunks[index]; if (chunk != null && chunk.fWritable == fWritable) { chunk.fCacheHitFlag= true; + cacheHits++; return chunk; } @@ -172,8 +175,12 @@ public class Database { synchronized(fCache) { chunk= chunks[index]; if (chunk == null) { + cacheMisses++; chunk = chunks[index] = new Chunk(this, index); } + else { + cacheHits++; + } fCache.add(chunk, fWritable); return chunk; } @@ -457,4 +464,16 @@ public class Database { } } } + + public void resetCacheCounters() { + cacheHits= cacheMisses= 0; + } + + public long getCacheHits() { + return cacheHits; + } + + public long getCacheMisses() { + return cacheMisses; + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/PDOMIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/PDOMIndexerTask.java index eae29f620ec..e9d059e7e80 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/PDOMIndexerTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/PDOMIndexerTask.java @@ -275,7 +275,7 @@ public abstract class PDOMIndexerTask extends PDOMWriter implements IPDOMIndexer } } - protected void traceEnd(long start) { + protected void traceEnd(long start, IWritableIndex index) { if (checkDebugOption(IPDOMIndexerTask.TRACE_STATISTICS, TRUE)) { IndexerProgress info= getProgressInformation(); String name= getClass().getName(); @@ -300,7 +300,16 @@ public abstract class PDOMIndexerTask extends PDOMWriter implements IPDOMIndexer + fStatistics.fReferenceCount + " references, " //$NON-NLS-1$ + fStatistics.fErrorCount + " errors, " //$NON-NLS-1$ + fStatistics.fProblemBindingCount + "(" + nf.format(problemPct) + ") problems."); //$NON-NLS-1$ //$NON-NLS-2$ + + if (index != null) { + long misses= index.getCacheMisses(); + long hits= index.getCacheHits(); + long tries= misses+hits; + double missPct= tries==0 ? 0.0 : (double) misses / (double) tries; + System.out.println(name + " Cache: " //$NON-NLS-1$ + + hits + " hits, " //$NON-NLS-1$ + + misses + "(" + nf.format(missPct)+ ") misses."); //$NON-NLS-1$ //$NON-NLS-2$ + } } } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexerTask.java index d9b9c239eb5..dc968fafb0c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexerTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/fast/PDOMFastIndexerTask.java @@ -100,11 +100,12 @@ class PDOMFastIndexerTask extends PDOMIndexerTask { CCorePlugin.log(e); } catch (InterruptedException e) { } - traceEnd(start); + traceEnd(start, index); } private void setupIndexAndReaderFactory() throws CoreException { this.index= ((IWritableIndexManager) CCorePlugin.getIndexManager()).getWritableIndex(getProject()); + this.index.resetCacheCounters(); this.fIflCache = new HashMap/**/(); this.fCodeReaderFactory = new IndexBasedCodeReaderFactory(index, fIflCache); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerTask.java index 25ceff78742..d1ea349babf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/full/PDOMFullIndexerTask.java @@ -101,11 +101,12 @@ class PDOMFullIndexerTask extends PDOMIndexerTask { CCorePlugin.log(e); } catch (InterruptedException e) { } - traceEnd(start); + traceEnd(start, fIndex); } private void setupIndex() throws CoreException { fIndex = ((IWritableIndexManager) CCorePlugin.getIndexManager()).getWritableIndex(getProject()); + fIndex.resetCacheCounters(); } private void registerTUsInReaderFactory(Collection/**/ sources)