1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 17:56:01 +02:00

Bug 302767: Tracing option for indexer setup.

This commit is contained in:
Markus Schorn 2010-09-30 13:12:09 +00:00
parent 4734a658f8
commit 3ec0429c1a
3 changed files with 53 additions and 10 deletions

View file

@ -27,6 +27,9 @@ org.eclipse.cdt.core/debug/typeresolver=false
# Reports issues with locking the index # Reports issues with locking the index
org.eclipse.cdt.core/debug/index/locks=false org.eclipse.cdt.core/debug/index/locks=false
# Reports events related to setting up the indexer for a project
org.eclipse.cdt.core/debug/indexer/setup=false
# Reports sequence of files indexed # Reports sequence of files indexed
org.eclipse.cdt.core/debug/indexer/activity=false org.eclipse.cdt.core/debug/indexer/activity=false

View file

@ -114,6 +114,8 @@ import com.ibm.icu.text.MessageFormat;
* stabilized. * stabilized.
*/ */
public class PDOMManager implements IWritableIndexManager, IListener { public class PDOMManager implements IWritableIndexManager, IListener {
private static final String TRACE_INDEXER_SETUP = CCorePlugin.PLUGIN_ID + "/debug/indexer/setup"; //$NON-NLS-1$
private final class PCL implements IPreferenceChangeListener { private final class PCL implements IPreferenceChangeListener {
private ICProject fProject; private ICProject fProject;
public PCL(ICProject prj) { public PCL(ICProject prj) {
@ -178,6 +180,8 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private Set<ICProject> fPostponedProjects= new HashSet<ICProject>(); private Set<ICProject> fPostponedProjects= new HashSet<ICProject>();
private int fLastNotifiedState= IndexerStateEvent.STATE_IDLE; private int fLastNotifiedState= IndexerStateEvent.STATE_IDLE;
private boolean fInShutDown; private boolean fInShutDown;
boolean fTraceIndexerSetup;
public PDOMManager() { public PDOMManager() {
PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$ PDOM.sDEBUG_LOCKS= "true".equals(Platform.getDebugOption(CCorePlugin.PLUGIN_ID + "/debug/index/locks")); //$NON-NLS-1$//$NON-NLS-2$
@ -224,6 +228,7 @@ public class PDOMManager implements IWritableIndexManager, IListener {
updatePathCanonicalizationStrategy(); updatePathCanonicalizationStrategy();
fIndexProviderManager.startup(); fIndexProviderManager.startup();
fTraceIndexerSetup= String.valueOf(true).equals(Platform.getDebugOption(TRACE_INDEXER_SETUP));
final CoreModel model = CoreModel.getDefault(); final CoreModel model = CoreModel.getDefault();
ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD); ResourcesPlugin.getWorkspace().addResourceChangeListener(fCModelListener, IResourceChangeEvent.POST_BUILD);
model.addElementChangedListener(fCModelListener); model.addElementChangedListener(fCModelListener);
@ -528,12 +533,20 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException { void createIndexer(ICProject project, IProgressMonitor pm) throws InterruptedException {
final IProject prj= project.getProject();
final String name = prj.getName();
if (fTraceIndexerSetup)
System.out.println("Indexer: Creation for project " + name); //$NON-NLS-1$
assert !Thread.holdsLock(fProjectToPDOM); assert !Thread.holdsLock(fProjectToPDOM);
IProject prj= project.getProject();
try { try {
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(prj.getName())) if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup)
System.out.println("Indexer: Aborting setup (1) for closing project " + name + " [1]"); //$NON-NLS-1$ //$NON-NLS-2$
return; return;
}
WritablePDOM pdom= getOrCreatePDOM(project); WritablePDOM pdom= getOrCreatePDOM(project);
Properties props= IndexerPreferences.getProperties(prj); Properties props= IndexerPreferences.getProperties(prj);
@ -568,6 +581,9 @@ public class PDOMManager implements IWritableIndexManager, IListener {
pdom.releaseReadLock(); pdom.releaseReadLock();
} }
if (resume) { if (resume) {
if (fTraceIndexerSetup)
System.out.println("Indexer: Resuming for project " + name); //$NON-NLS-1$
enqueue(new PDOMUpdateTask(indexer, enqueue(new PDOMUpdateTask(indexer,
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH)); IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH));
} }
@ -581,8 +597,11 @@ public class PDOMManager implements IWritableIndexManager, IListener {
operation.run(pm); operation.run(pm);
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
if (fClosingProjects.contains(prj.getName())) if (fClosingProjects.contains(name)) {
if (fTraceIndexerSetup)
System.out.println("Indexer: Aborting setup for closing project " + name + " [2]"); //$NON-NLS-1$ //$NON-NLS-2$
return; return;
}
Properties props= IndexerPreferences.getProperties(prj); Properties props= IndexerPreferences.getProperties(prj);
IPDOMIndexer indexer = newIndexer(getIndexerId(project), props); IPDOMIndexer indexer = newIndexer(getIndexerId(project), props);
@ -593,10 +612,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
IPDOMIndexerTask task= null; IPDOMIndexerTask task= null;
if (operation.wasSuccessful()) { if (operation.wasSuccessful()) {
if (fTraceIndexerSetup)
System.out.println("Indexer: Imported shared index for project " + name); //$NON-NLS-1$
task= new PDOMUpdateTask(indexer, task= new PDOMUpdateTask(indexer,
IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH); IIndexManager.UPDATE_CHECK_TIMESTAMPS | IIndexManager.UPDATE_CHECK_CONTENTS_HASH);
} } else {
else { if (fTraceIndexerSetup)
System.out.println("Indexer: Rebuiding for project " + name); //$NON-NLS-1$
task= new PDOMRebuildTask(indexer); task= new PDOMRebuildTask(indexer);
} }
enqueue(task); enqueue(task);
@ -707,8 +729,13 @@ public class PDOMManager implements IWritableIndexManager, IListener {
} }
void addProject(final ICProject cproject) { void addProject(final ICProject cproject) {
final String name = cproject.getProject().getName();
if (fTraceIndexerSetup) {
System.out.println("Indexer: Adding new project " + name); //$NON-NLS-1$
}
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
fClosingProjects.remove(cproject.getProject().getName()); fClosingProjects.remove(name);
} }
setupProject(cproject); setupProject(cproject);
@ -796,12 +823,17 @@ public class PDOMManager implements IWritableIndexManager, IListener {
private void preRemoveProject(ICProject cproject, final boolean delete) { private void preRemoveProject(ICProject cproject, final boolean delete) {
assert !Thread.holdsLock(fProjectToPDOM); assert !Thread.holdsLock(fProjectToPDOM);
IProject rproject= cproject.getProject(); final IProject rproject= cproject.getProject();
final String name = rproject.getName();
if (fTraceIndexerSetup)
System.out.println("Indexer: Removing project " + name + "; delete=" + delete); //$NON-NLS-1$ //$NON-NLS-2$
IPDOMIndexer indexer; IPDOMIndexer indexer;
synchronized (fUpdatePolicies) { synchronized (fUpdatePolicies) {
// Prevent recreating the indexer // Prevent recreating the indexer
fClosingProjects.add(rproject.getName()); fClosingProjects.add(name);
indexer= getIndexer(cproject); indexer= getIndexer(cproject);
} }

View file

@ -45,7 +45,13 @@ public class PDOMSetupJob extends Job {
final IProject project= cproject.getProject(); final IProject project= cproject.getProject();
monitor.setTaskName(project.getName()); monitor.setTaskName(project.getName());
if (project.isOpen() && !fManager.postponeSetup(cproject)) { if (!project.isOpen()) {
if (fManager.fTraceIndexerSetup)
System.out.println("Indexer: Project is not open: " + project.getName()); //$NON-NLS-1$
} else if (fManager.postponeSetup(cproject)) {
if (fManager.fTraceIndexerSetup)
System.out.println("Indexer: Setup is postponed: " + project.getName()); //$NON-NLS-1$
} else {
syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1)); syncronizeProjectSettings(project, new SubProgressMonitor(monitor, 1));
if (fManager.getIndexer(cproject) == null) { if (fManager.getIndexer(cproject) == null) {
try { try {
@ -54,6 +60,8 @@ public class PDOMSetupJob extends Job {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
return Status.CANCEL_STATUS; return Status.CANCEL_STATUS;
} }
} else if (fManager.fTraceIndexerSetup) {
System.out.println("Indexer: No action, indexer already exists: " + project.getName()); //$NON-NLS-1$
} }
} }
} }