From 14fa67b909305c53d49e4997635c498149ef61a9 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 8 May 2017 14:45:37 +0200 Subject: [PATCH] logic: Limit multi process indexing to projects with C/C++ source groups --- src/lib/data/indexer/TaskBuildIndex.cpp | 8 ++--- src/lib/data/indexer/TaskBuildIndex.h | 4 ++- src/lib/project/Project.cpp | 29 ++++++++++--------- src/lib/project/Project.h | 2 ++ .../QtProjectWizzardContentPreferences.cpp | 2 +- .../parser/java/JavaEnvironmentFactory.cpp | 3 +- 6 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/lib/data/indexer/TaskBuildIndex.cpp b/src/lib/data/indexer/TaskBuildIndex.cpp index 060b5d84..80745871 100644 --- a/src/lib/data/indexer/TaskBuildIndex.cpp +++ b/src/lib/data/indexer/TaskBuildIndex.cpp @@ -27,11 +27,13 @@ TaskBuildIndex::TaskBuildIndex( unsigned int processCount, std::shared_ptr indexerCommandList, std::shared_ptr storageProvider, - std::shared_ptr fileRegisterStateData + std::shared_ptr fileRegisterStateData, + bool multiProcessIndexing ) : m_indexerCommandList(indexerCommandList) , m_storageProvider(storageProvider) , m_fileRegisterStateData(fileRegisterStateData) + , m_multiProcessIndexing(multiProcessIndexing) , m_interprocessIndexerCommandManager(Application::getUUID(), 0, true) , m_interprocessIndexingStatusManager(Application::getUUID(), 0, true) , m_processCount(processCount) @@ -61,8 +63,6 @@ void TaskBuildIndex::doEnter(std::shared_ptr blackboard) logFilePath = dynamic_cast(logger)->getLogFilePath().str(); } - bool multiProcess = ApplicationSettings::getInstance()->getMultiProcessIndexingEnabled(); - // start indexer processes for (unsigned int i = 0; i < m_processCount; i++) { @@ -72,7 +72,7 @@ void TaskBuildIndex::doEnter(std::shared_ptr blackboard) std::make_shared(Application::getUUID(), processId, true) ); - if (multiProcess) + if (m_multiProcessIndexing) { m_processThreads.push_back(new std::thread(&TaskBuildIndex::runIndexerProcess, this, processId, logFilePath)); } diff --git a/src/lib/data/indexer/TaskBuildIndex.h b/src/lib/data/indexer/TaskBuildIndex.h index 5f0bc028..c6c25d9b 100644 --- a/src/lib/data/indexer/TaskBuildIndex.h +++ b/src/lib/data/indexer/TaskBuildIndex.h @@ -25,7 +25,8 @@ public: unsigned int processCount, std::shared_ptr indexerCommandList, std::shared_ptr storageProvider, - std::shared_ptr fileRegisterStateData + std::shared_ptr fileRegisterStateData, + bool multiProcessIndexing ); protected: @@ -47,6 +48,7 @@ protected: std::shared_ptr m_indexerCommandList; std::shared_ptr m_storageProvider; std::shared_ptr m_fileRegisterStateData; + bool m_multiProcessIndexing; InterprocessIndexerCommandManager m_interprocessIndexerCommandManager; InterprocessIndexingStatusManager m_interprocessIndexingStatusManager; diff --git a/src/lib/project/Project.cpp b/src/lib/project/Project.cpp index 366a9233..604a307f 100644 --- a/src/lib/project/Project.cpp +++ b/src/lib/project/Project.cpp @@ -382,17 +382,6 @@ bool Project::requestIndex(bool forceRefresh, bool needsFullRefresh) utility::append(filesToIndex, sourceGroup->getSourceFilePathsToIndex()); } - - bool hasCXXSourceGroup = false; - for (std::shared_ptr sourceGroup: m_sourceGroups) - { - if (sourceGroup->getLanguage() == LANGUAGE_C || sourceGroup->getLanguage() == LANGUAGE_CPP) - { - hasCXXSourceGroup = true; - break; - } - } - bool fullRefresh = forceRefresh | needsFullRefresh; bool preprocessorOnly = false; @@ -402,7 +391,7 @@ bool Project::requestIndex(bool forceRefresh, bool needsFullRefresh) options.fullRefreshVisible = !needsFullRefresh; options.fullRefresh = forceRefresh; - options.preprocessorOnlyVisible = hasCXXSourceGroup; + options.preprocessorOnlyVisible = hasCxxSourceGroup(); options.preprocessorOnly = false; Application::getInstance()->getDialogView()->hideUnknownProgressDialog(); @@ -502,9 +491,11 @@ void Project::buildIndex(const std::set& filesToClean, bool fullRefres // add task for indexing if (indexerThreadCount > 0) { + bool multiProcess = ApplicationSettings::getInstance()->getMultiProcessIndexingEnabled() && hasCxxSourceGroup(); + taskParallelIndexing->addChildTasks( std::make_shared(TaskDecoratorRepeat::CONDITION_WHILE_SUCCESS, Task::STATE_SUCCESS)->addChildTask( - std::make_shared(indexerThreadCount, indexerCommandList, storageProvider, fileRegisterStateData) + std::make_shared(indexerThreadCount, indexerCommandList, storageProvider, fileRegisterStateData, multiProcess) ) ); } @@ -558,3 +549,15 @@ void Project::buildIndex(const std::set& filesToClean, bool fullRefres Task::dispatch(taskSequential); } + +bool Project::hasCxxSourceGroup() const +{ + for (std::shared_ptr sourceGroup: m_sourceGroups) + { + if (sourceGroup->getLanguage() == LANGUAGE_C || sourceGroup->getLanguage() == LANGUAGE_CPP) + { + return true; + } + } + return false; +} diff --git a/src/lib/project/Project.h b/src/lib/project/Project.h index 24814eec..ca61b39b 100644 --- a/src/lib/project/Project.h +++ b/src/lib/project/Project.h @@ -49,6 +49,8 @@ private: void buildIndex(const std::set& filesToClean, bool fullRefresh, bool preprocessorOnly); + bool hasCxxSourceGroup() const; + std::shared_ptr m_settings; StorageAccessProxy* const m_storageAccessProxy; diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp index a36ba6b9..6dd8a4f1 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp @@ -119,7 +119,7 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row) row++; // multi process indexing - m_multiProcessIndexing = addCheckBox("Multi process indexing", "Use processes instead of threads for indexing.", + m_multiProcessIndexing = addCheckBox("Multi process C/C++ indexing", "Use processes instead of threads for C/C++ indexing.", "Using processes instead of threads prevents the application from crashing on unforseen exceptions during indexing.", layout, row); diff --git a/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp b/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp index 6fccad8c..cb3d2691 100644 --- a/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp +++ b/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp @@ -29,8 +29,9 @@ void JavaEnvironmentFactory::createInstance(std::string classPath, std::string& std::function createInstanceFunction; + const FilePath javaPath(ApplicationSettings::getInstance()->getJavaPath()); createInstanceFunction = utility::loadFunctionFromLibrary( - FilePath(ApplicationSettings::getInstance()->getJavaPath()), + javaPath, "JNI_CreateJavaVM", errorString );