CppTools: Do not call GC() more than necessary

Currently GC() is invoked if
   - 5 CppEditors were closed or the last CppEditor was closed
   - a project is about to be removed
   - a session is about to be unloaded

Thus, for the following use cases, too much GC() calls (can) happen:
    - File > Close All
    - Close All Projects and Editors
    - Changing the session

Fixed by introducing a timer.

Change-Id: I9c984d9de735fc8c6ee77a518e9fb5b63dba5881
Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
This commit is contained in:
Nikolai Kosjar
2013-07-18 10:57:19 +02:00
parent 4bc61ecac4
commit 7583039b87
5 changed files with 52 additions and 5 deletions

View File

@@ -55,6 +55,7 @@ ModelManagerTestHelper::ModelManagerTestHelper(QObject *parent) :
connect(this, SIGNAL(aboutToRemoveProject(ProjectExplorer::Project*)), mm, SLOT(onAboutToRemoveProject(ProjectExplorer::Project*)));
connect(this, SIGNAL(projectAdded(ProjectExplorer::Project*)), mm, SLOT(onProjectAdded(ProjectExplorer::Project*)));
connect(mm, SIGNAL(sourceFilesRefreshed(QStringList)), this, SLOT(sourceFilesRefreshed(QStringList)));
connect(mm, SIGNAL(gcFinished()), this, SLOT(gcFinished()));
cleanup();
verifyClean();
@@ -74,6 +75,9 @@ void ModelManagerTestHelper::cleanup()
QList<ProjectInfo> pies = mm->projectInfos();
foreach (const ProjectInfo &pie, pies)
emit aboutToRemoveProject(pie.project().data());
if (!pies.isEmpty())
waitForFinishedGc();
}
void ModelManagerTestHelper::verifyClean()
@@ -108,9 +112,21 @@ QStringList ModelManagerTestHelper::waitForRefreshedSourceFiles()
return m_lastRefreshedSourceFiles;
}
void ModelManagerTestHelper::waitForFinishedGc()
{
m_gcFinished = false;
while (!m_gcFinished)
QCoreApplication::processEvents();
}
void ModelManagerTestHelper::sourceFilesRefreshed(const QStringList &files)
{
m_lastRefreshedSourceFiles = files;
m_refreshHappened = true;
}
void ModelManagerTestHelper::gcFinished()
{
m_gcFinished = true;
}