From 3e440ec21395fd8b128ba521b476a925d84e9408 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 10 May 2010 09:54:30 +0200 Subject: [PATCH] Cache the resolved file names. --- src/plugins/cpptools/cppmodelmanager.cpp | 28 +++++++++++++++++++----- src/plugins/cpptools/cppmodelmanager.h | 2 ++ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index a88742112e7..f4be14c6b0c 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -397,6 +397,28 @@ bool CppPreprocessor::includeFile(const QString &absoluteFilePath, QString *resu } QString CppPreprocessor::tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision) +{ + if (type == IncludeGlobal) { + const QString fn = m_fileNameCache.value(fileName); + + if (! fn.isEmpty()) { + fileName = fn; + + if (revision) + *revision = 0; + + return QString(); + } + } + + const QString originalFileName = fileName; + const QString contents = tryIncludeFile_helper(fileName, type, revision); + if (type == IncludeGlobal) + m_fileNameCache.insert(originalFileName, fileName); + return contents; +} + +QString CppPreprocessor::tryIncludeFile_helper(QString &fileName, IncludeType type, unsigned *revision) { QFileInfo fileInfo(fileName); if (fileName == QLatin1String(pp_configuration_file) || fileInfo.isAbsolute()) { @@ -1375,9 +1397,6 @@ void CppModelManager::parse(QFutureInterface<void> &future, if (future.isCanceled()) break; - // Change the priority of the background parser thread to idle. - QThread::currentThread()->setPriority(QThread::IdlePriority); - const QString fileName = files.at(i); const bool isSourceFile = i < sourceCount; @@ -1396,9 +1415,6 @@ void CppModelManager::parse(QFutureInterface<void> &future, if (isSourceFile) preproc->resetEnvironment(); - - // Restore the previous thread priority. - QThread::currentThread()->setPriority(QThread::NormalPriority); } future.setProgressValue(files.size()); diff --git a/src/plugins/cpptools/cppmodelmanager.h b/src/plugins/cpptools/cppmodelmanager.h index 2e6651cb12e..1ba6d71efdb 100644 --- a/src/plugins/cpptools/cppmodelmanager.h +++ b/src/plugins/cpptools/cppmodelmanager.h @@ -270,6 +270,7 @@ protected: bool includeFile(const QString &absoluteFilePath, QString *result, unsigned *revision); QString tryIncludeFile(QString &fileName, IncludeType type, unsigned *revision); + QString tryIncludeFile_helper(QString &fileName, IncludeType type, unsigned *revision); void mergeEnvironment(CPlusPlus::Document::Ptr doc); @@ -303,6 +304,7 @@ private: QSet<QString> m_todo; QSet<QString> m_processed; unsigned m_revision; + QHash<QString, QString> m_fileNameCache; }; } // namespace Internal -- GitLab