From 219aa7056ba6d41260c83ea46832ea5664aca20a Mon Sep 17 00:00:00 2001 From: Bogdan Gheorghe Date: Tue, 29 Mar 2005 14:28:29 +0000 Subject: [PATCH] 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. --- core/org.eclipse.cdt.core/index/ChangeLog | 9 +++++++- .../eclipse/cdt/core/index/ICDTIndexer.java | 8 +++++++ .../index/ctagsindexer/CTagsIndexAll.java | 2 ++ .../core/index/ctagsindexer/CTagsIndexer.java | 8 ++++++- .../ctagsindexer/CTagsIndexerRunner.java | 1 + .../DOMSourceIndexerRunner.java | 7 +++++- .../index/sourceindexer/IndexAllProject.java | 4 ++++ .../index/sourceindexer/SourceIndexer.java | 23 ++++++++++++++++++- .../sourceindexer/SourceIndexerRunner.java | 7 +++++- .../core/search/indexing/IndexManager.java | 5 ++++ 10 files changed, 69 insertions(+), 5 deletions(-) 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); } } }