Clang: Reduce database accesses

If we prefetch data from the database to the caches we reduce the database
transaction calls which are quite expensive.

Change-Id: I617a0d886807402e0a94291a913a77f989970b55
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Marco Bubke
2019-08-20 14:45:01 +02:00
parent 04f8ff6404
commit c174eb378a
47 changed files with 617 additions and 213 deletions

View File

@@ -82,10 +82,9 @@ void ClangQueryProjectsFindFilter::requestSourceRangesAndDiagnostics(const QStri
{
const QString filePath = temporaryFile.fileName();
ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage message(queryText,
{ClangBackEnd::FilePath(filePath),
exampleContent,
{"cc", "-std=c++1z", toNative(filePath)}});
ClangBackEnd::RequestSourceRangesAndDiagnosticsForQueryMessage message(
queryText,
{ClangBackEnd::FilePath(filePath), 1, exampleContent, {"cc", "-std=c++1z", toNative(filePath)}});
m_server.requestSourceRangesAndDiagnosticsForQueryMessage(std::move(message));
}
@@ -204,10 +203,9 @@ void appendSource(std::vector<ClangBackEnd::V2::FileContainer> &sources,
if (!unsavedContentContains(sourceFilePath, unsavedContent) && !isCHeader(projectFile.kind)) {
sources.emplace_back(ClangBackEnd::FilePath(projectFile.path),
-1,
"",
createCommandLine(projectPart.data(),
projectFile.path,
projectFile.kind));
createCommandLine(projectPart.data(), projectFile.path, projectFile.kind));
}
}

View File

@@ -108,10 +108,12 @@ std::vector<ClangBackEnd::V2::FileContainer> createUnsavedContents()
std::vector<ClangBackEnd::V2::FileContainer> unsavedContents;
unsavedContents.reserve(std::size_t(abstractEditors.size()));
auto toFileContainer = [] (const CppTools::AbstractEditorSupport *abstractEditor) {
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
Utils::SmallString::fromQByteArray(abstractEditor->contents()),
{});
auto toFileContainer = [](const CppTools::AbstractEditorSupport *abstractEditor) {
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
-1,
Utils::SmallString::fromQByteArray(
abstractEditor->contents()),
{});
};
std::transform(abstractEditors.begin(),

View File

@@ -37,16 +37,21 @@ CppTools::CppModelManager *cppModelManager()
return CppTools::CppModelManager::instance();
}
std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles()
std::vector<ClangBackEnd::V2::FileContainer> createGeneratedFiles(
ClangBackEnd::FilePathCachingInterface &filePathCache)
{
auto abstractEditors = CppTools::CppModelManager::instance()->abstractEditorSupports();
std::vector<ClangBackEnd::V2::FileContainer> generatedFiles;
generatedFiles.reserve(std::size_t(abstractEditors.size()));
auto toFileContainer = [] (const CppTools::AbstractEditorSupport *abstractEditor) {
return ClangBackEnd::V2::FileContainer(ClangBackEnd::FilePath(abstractEditor->fileName()),
Utils::SmallString::fromQByteArray(abstractEditor->contents()),
{});
auto toFileContainer = [&](const CppTools::AbstractEditorSupport *abstractEditor) {
ClangBackEnd::FilePath filePath{abstractEditor->fileName()};
ClangBackEnd::FilePathId filePathId = filePathCache.filePathId(filePath);
return ClangBackEnd::V2::FileContainer(std::move(filePath),
filePathId,
Utils::SmallString::fromQByteArray(
abstractEditor->contents()),
{});
};
std::transform(abstractEditors.begin(),
@@ -76,9 +81,12 @@ QtCreatorRefactoringProjectUpdater::QtCreatorRefactoringProjectUpdater(
connectToCppModelManager();
}
void QtCreatorRefactoringProjectUpdater::abstractEditorUpdated(const QString &filePath, const QByteArray &contents)
void QtCreatorRefactoringProjectUpdater::abstractEditorUpdated(const QString &qFilePath,
const QByteArray &contents)
{
RefactoringProjectUpdater::updateGeneratedFiles({{ClangBackEnd::FilePath{filePath}, contents}});
ClangBackEnd::FilePath filePath{qFilePath};
ClangBackEnd::FilePathId filePathId = m_filePathCache.filePathId(filePath);
RefactoringProjectUpdater::updateGeneratedFiles({{std::move(filePath), filePathId, contents}});
}
void QtCreatorRefactoringProjectUpdater::abstractEditorRemoved(const QString &filePath)
@@ -88,7 +96,7 @@ void QtCreatorRefactoringProjectUpdater::abstractEditorRemoved(const QString &fi
void QtCreatorRefactoringProjectUpdater::connectToCppModelManager()
{
RefactoringProjectUpdater::updateGeneratedFiles(createGeneratedFiles());
RefactoringProjectUpdater::updateGeneratedFiles(createGeneratedFiles(m_filePathCache));
QObject::connect(cppModelManager(),
&CppTools::CppModelManager::abstractEditorSupportContentsUpdated,