forked from qt-creator/qt-creator
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:
@@ -26,6 +26,7 @@
|
||||
#include "googletest.h"
|
||||
|
||||
#include "filesystem-utilities.h"
|
||||
#include "mockfilepathcaching.h"
|
||||
#include "mockrefactoringclient.h"
|
||||
#include "mocksymbolindexing.h"
|
||||
#include "sourcerangecontainer-matcher.h"
|
||||
@@ -98,7 +99,11 @@ protected:
|
||||
ClangBackEnd::GeneratedFiles generatedFiles;
|
||||
ClangBackEnd::RefactoringServer refactoringServer{mockSymbolIndexing, filePathCache, generatedFiles};
|
||||
Utils::SmallString sourceContent{"void f()\n {}"};
|
||||
FileContainer source{{TESTDATA_DIR, "query_simplefunction.cpp"}, sourceContent.clone(), {"cc"}};
|
||||
ClangBackEnd::FilePath filePath{TESTDATA_DIR, "query_simplefunction.cpp"};
|
||||
FileContainer source{filePath.clone(),
|
||||
filePathCache.filePathId(filePath),
|
||||
sourceContent.clone(),
|
||||
{"cc"}};
|
||||
QTemporaryFile temporaryFile{Utils::TemporaryDirectory::masterDirectoryPath()
|
||||
+ "/clangQuery-XXXXXX.cpp"};
|
||||
int processingSlotCount = 2;
|
||||
@@ -126,9 +131,13 @@ TEST_F(RefactoringServerSlowTest, RequestSingleSourceRangesAndDiagnosticsWithUns
|
||||
{
|
||||
Utils::SmallString unsavedContent{"void f();"};
|
||||
FileContainer source{{TESTDATA_DIR, "query_simplefunction.cpp"},
|
||||
filePathCache.filePathId(FilePath{TESTDATA_DIR, "query_simplefunction.cpp"}),
|
||||
"#include \"query_simplefunction.h\"",
|
||||
{"cc"}};
|
||||
FileContainer unsaved{{TESTDATA_DIR, "query_simplefunction.h"}, unsavedContent.clone(), {}};
|
||||
FileContainer unsaved{{TESTDATA_DIR, "query_simplefunction.h"},
|
||||
filePathCache.filePathId(FilePath{TESTDATA_DIR, "query_simplefunction.h"}),
|
||||
unsavedContent.clone(),
|
||||
{}};
|
||||
RequestSourceRangesForQueryMessage message{"functionDecl()", {source.clone()}, {unsaved.clone()}};
|
||||
|
||||
EXPECT_CALL(mockRefactoringClient,
|
||||
@@ -240,6 +249,8 @@ TEST_F(RefactoringServerSlowTest, ForValidRequestSourceRangesAndDiagnosticsGetSo
|
||||
{
|
||||
RequestSourceRangesAndDiagnosticsForQueryMessage message("functionDecl()",
|
||||
{FilePath(temporaryFile.fileName()),
|
||||
filePathCache.filePathId(FilePath(
|
||||
temporaryFile.fileName())),
|
||||
"void f() {}",
|
||||
{"cc"}});
|
||||
|
||||
@@ -259,6 +270,8 @@ TEST_F(RefactoringServerSlowTest, ForInvalidRequestSourceRangesAndDiagnosticsGet
|
||||
{
|
||||
RequestSourceRangesAndDiagnosticsForQueryMessage message("func()",
|
||||
{FilePath(temporaryFile.fileName()),
|
||||
filePathCache.filePathId(FilePath(
|
||||
temporaryFile.fileName())),
|
||||
"void f() {}",
|
||||
{"cc"}});
|
||||
|
||||
@@ -277,6 +290,7 @@ TEST_F(RefactoringServerSlowTest, ForInvalidRequestSourceRangesAndDiagnosticsGet
|
||||
TEST_F(RefactoringServer, UpdateGeneratedFilesSetMemberWhichIsUsedForSymbolIndexing)
|
||||
{
|
||||
FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
|
||||
filePathCache.filePathId(FilePath{TESTDATA_DIR, "query_simplefunction.h"}),
|
||||
"void f();",
|
||||
{}}};
|
||||
|
||||
@@ -288,6 +302,7 @@ TEST_F(RefactoringServer, UpdateGeneratedFilesSetMemberWhichIsUsedForSymbolIndex
|
||||
TEST_F(RefactoringServer, RemoveGeneratedFilesSetMemberWhichIsUsedForSymbolIndexing)
|
||||
{
|
||||
FileContainers unsaved{{{TESTDATA_DIR, "query_simplefunction.h"},
|
||||
filePathCache.filePathId(FilePath{TESTDATA_DIR, "query_simplefunction.h"}),
|
||||
"void f();",
|
||||
{}}};
|
||||
refactoringServer.updateGeneratedFiles(Utils::clone(unsaved));
|
||||
@@ -297,8 +312,12 @@ TEST_F(RefactoringServer, RemoveGeneratedFilesSetMemberWhichIsUsedForSymbolIndex
|
||||
ASSERT_THAT(generatedFiles.fileContainers(), IsEmpty());
|
||||
}
|
||||
|
||||
TEST_F(RefactoringServer, UpdateProjectPartsCallsSymbolIndexingUpdateProjectParts)
|
||||
TEST_F(RefactoringServer, UpdateProjectPartsCalls)
|
||||
{
|
||||
NiceMock<MockFilePathCaching> mockFilePathCaching;
|
||||
ClangBackEnd::RefactoringServer refactoringServer{mockSymbolIndexing,
|
||||
mockFilePathCaching,
|
||||
generatedFiles};
|
||||
ProjectPartContainers projectParts{
|
||||
{{1,
|
||||
{"-I", TESTDATA_DIR},
|
||||
@@ -313,8 +332,8 @@ TEST_F(RefactoringServer, UpdateProjectPartsCallsSymbolIndexingUpdateProjectPart
|
||||
Utils::LanguageVersion::C11,
|
||||
Utils::LanguageExtension::All}}};
|
||||
|
||||
EXPECT_CALL(mockSymbolIndexing,
|
||||
updateProjectParts(projectParts));
|
||||
EXPECT_CALL(mockFilePathCaching, populateIfEmpty());
|
||||
EXPECT_CALL(mockSymbolIndexing, updateProjectParts(projectParts));
|
||||
|
||||
refactoringServer.updateProjectParts({Utils::clone(projectParts), {}});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user