diff --git a/core/org.eclipse.cdt.core/index/ChangeLog b/core/org.eclipse.cdt.core/index/ChangeLog index acfc7815fd3..5db011d9a66 100644 --- a/core/org.eclipse.cdt.core/index/ChangeLog +++ b/core/org.eclipse.cdt.core/index/ChangeLog @@ -1,4 +1,11 @@ -2005-03-28 Bogdan Gheorgh +2005-03-29 Bogdan Gheorghe + + Added cumulative timer to SouceIndexer/DOMIndexer. + Purge any existing jobs from job queue on indexer change event. + Put in an indexer change nofication event that the IndexManager sends to the + newly selected indexer to allow it to react to being selected. + +2005-03-28 Bogdan Gheorghe NPE Fix for CTagsConsoleParser diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/core/index/ICDTIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/core/index/ICDTIndexer.java index 37fcdc16995..6cf8ae4e4cc 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/core/index/ICDTIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/core/index/ICDTIndexer.java @@ -94,6 +94,14 @@ public interface ICDTIndexer extends IIndexer { * @param idlingTime */ public void notifyIdle(long idlingTime); + + /** + * Called by the index manager when a project has switched indexers to this + * type of indexer - can be used by the indexer to schedule initial jobs + * @param project - the project that has changed indexers + */ + public void notifyIndexerChange(IProject project); + /** * Returns if this indexer is enabled diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java index e963f52a8fa..c3f8d2f427a 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexAll.java @@ -122,6 +122,7 @@ class CTagsIndexAll extends CTagsIndexRequest { if (AbstractIndexer.TIMING){ cTagsEndTime = System.currentTimeMillis(); System.out.println("CTags Run: " + (cTagsEndTime - startTime)); //$NON-NLS-1$ + System.out.flush(); } if (success) { @@ -137,6 +138,7 @@ class CTagsIndexAll extends CTagsIndexRequest { endTime = System.currentTimeMillis(); System.out.println("CTags Encoding Time: " + (endTime - cTagsEndTime)); //$NON-NLS-1$ System.out.println("CTagsIndexer Total Time: " + (endTime - startTime)); //$NON-NLS-1$ + System.out.flush(); } } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java index 101523f941c..677591bee9d 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java @@ -41,7 +41,6 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer { private HashSet jobSet = null; - public CTagsIndexer(){ this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); this.indexStorage = (CIndexStorage) indexManager.getIndexStorageForIndexer(this); @@ -318,6 +317,13 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer { public IIndexStorage getIndexStorage() { return indexStorage; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.index.ICDTIndexer#notifyIndexerChange(org.eclipse.core.resources.IProject) + */ + public void notifyIndexerChange(IProject project) { + this.indexAll(project); + } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java index b59becd71b0..2f0f97dcca9 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java @@ -112,6 +112,7 @@ public class CTagsIndexerRunner extends AbstractIndexer { if (AbstractIndexer.TIMING){ System.out.println("CTagsIndexer Total Time: " + (System.currentTimeMillis() - startTime)); //$NON-NLS-1$ + System.out.flush(); } } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java index 69245ad3c16..6ec78ed9c90 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java @@ -112,7 +112,12 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { endTime = System.currentTimeMillis(); System.out.println("DOM Indexer - Total Parse Time for " + resourceFile.getName() + ": " + (parseTime - startTime)); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("DOM Indexer - Total Visit Time for " + resourceFile.getName() + ": " + (endTime - parseTime)); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("DOM Indexer - Total Index Time for " + resourceFile.getName() + ": " + (endTime - startTime)); //$NON-NLS-1$ //$NON-NLS-2$ + long currentTime = endTime - startTime; + System.out.println("DOM Indexer - Total Index Time for " + resourceFile.getName() + ": " + currentTime); //$NON-NLS-1$ //$NON-NLS-2$ + long tempTotaltime = indexer.getTotalIndexTime() + currentTime; + indexer.setTotalIndexTime(tempTotaltime); + System.out.println("DOM Indexer - Overall Index Time: " + tempTotaltime); //$NON-NLS-1$ + System.out.flush(); } if (AbstractIndexer.VERBOSE){ AbstractIndexer.verbose("DOM AST TRAVERSAL FINISHED " + resourceFile.getName().toString()); //$NON-NLS-1$ diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexAllProject.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexAllProject.java index d51415a3c13..8e5ee7efdfb 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexAllProject.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/IndexAllProject.java @@ -61,6 +61,10 @@ public class IndexAllProject extends IndexRequest { if (monitor == null) return true; // index got deleted since acquired try { + if (AbstractIndexer.TIMING) + //reset the total index timer + indexer.setTotalIndexTime(0); + monitor.enterRead(); // ask permission to read saveIfNecessary(index, monitor); diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java index e695ead3371..a0feab8c12d 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java @@ -87,12 +87,13 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { private CIndexStorage indexStorage = null; - public ReadWriteMonitor storageMonitor = null; + protected ReadWriteMonitor storageMonitor = null; protected IndexManager indexManager = null; protected HashSet jobSet = null; private boolean indexEnabled = false; + protected long totalIndexTime = 0; public SourceIndexer(){ this.indexManager = CCorePlugin.getDefault().getCoreModel().getIndexManager(); @@ -549,6 +550,7 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { storageMonitor.exitWrite(); } } + /** * @param path @@ -638,4 +640,23 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { //storageMonitor.exitWrite(); } } + /** + * @return Returns the totalIndexTime. + */ + public long getTotalIndexTime() { + return totalIndexTime; + } + /** + * @param totalIndexTime The totalIndexTime to set. + */ + public void setTotalIndexTime(long totalIndexTime) { + this.totalIndexTime = totalIndexTime; + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.index.ICDTIndexer#notifyIndexerChange() + */ + public void notifyIndexerChange(IProject project) { + this.indexAll(project); + } } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java index e682e77da21..fccf1de9be5 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java @@ -120,7 +120,12 @@ public class SourceIndexerRunner extends AbstractIndexer { boolean retVal = parser.parse(); if (AbstractIndexer.TIMING){ - System.out.println("Source Indexer - Total Index Time: " + (System.currentTimeMillis() - startTime)); //$NON-NLS-1$ + long currentTime = System.currentTimeMillis() - startTime; + System.out.println("Source Indexer - Index Time for " + resourceFile.getName() + ": " + currentTime + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + long tempTotaltime = indexer.getTotalIndexTime() + currentTime; + indexer.setTotalIndexTime(tempTotaltime); + System.out.println("Source Indexer - Total Index Time: " + tempTotaltime + " ms"); //$NON-NLS-1$ //$NON-NLS-2$ + } if (AbstractIndexer.VERBOSE){ diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java index 07813b02904..00aab5c01d6 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java @@ -333,9 +333,14 @@ public class IndexManager extends JobManager{ public void indexerChangeNotification(IProject project) { monitor.enterWrite(); try{ + //Get rid of any jobs scheduled by the old indexer + this.discardJobs(project.getName()); + //Purge the old indexer from the indexer map Object e = indexerMap.remove(project); } finally { monitor.exitWrite(); + ICDTIndexer indexer = this.getIndexerForProject(project); + indexer.notifyIndexerChange(project); } } }