data: Fixed performance drop in file path search

This commit is contained in:
Eberhard Graether
2015-09-17 13:53:28 +02:00
parent a14bfaff56
commit a596c58b02
7 changed files with 78 additions and 41 deletions
@@ -24,13 +24,18 @@ void PreprocessorCallbacks::FileChanged(
}
const clang::FileEntry *fileEntry = m_sourceManager.getFileEntryForID(m_sourceManager.getFileID(location));
if (fileEntry && m_fileRegister->getFileManager()->hasFilePath(fileEntry->getName()))
if (!fileEntry)
{
m_client->onFileParsed(FileInfo(
FilePath(fileEntry->getName()),
boost::posix_time::from_time_t(fileEntry->getModificationTime())
));
m_fileRegister->markIncludeFileParsing(fileEntry->getName());
return;
}
FilePath filePath(fileEntry->getName());
if (m_fileRegister->getFileManager()->hasFilePath(filePath.str()))
{
m_client->onFileParsed(m_fileRegister->getFileManager()->getFileInfo(filePath));
m_fileRegister->markIncludeFileParsing(filePath.str());
}
}
@@ -45,13 +50,14 @@ void PreprocessorCallbacks::InclusionDirective(
std::string baseFilePath = baseFileEntry->getName();
std::string includedFilePath = fileEntry->getName();
if (m_fileRegister->getFileManager()->hasFilePath(baseFilePath) && // check if file is in project
m_fileRegister->getFileManager()->hasFilePath(includedFilePath))
const FileManager* fileManager = m_fileRegister->getFileManager();
if (fileManager->hasFilePath(baseFilePath) && fileManager->hasFilePath(includedFilePath))
{
FileInfo baseFileInfo(baseFilePath, boost::posix_time::from_time_t(baseFileEntry->getModificationTime()));
FileInfo includedFileInfo(includedFilePath, boost::posix_time::from_time_t(fileEntry->getModificationTime()));
m_client->onFileIncludeParsed(getParseLocation(fileNameRange.getAsRange()), baseFileInfo, includedFileInfo);
m_client->onFileIncludeParsed(
getParseLocation(fileNameRange.getAsRange()),
fileManager->getFileInfo(baseFilePath),
fileManager->getFileInfo(includedFilePath)
);
}
}
}
+4 -4
View File
@@ -25,8 +25,6 @@ void TaskParseCxx::enter()
{
m_start = utility::durationStart();
m_client->prepareParsingFile();
m_parser.setupParsing(m_files, m_arguments);
for (const FilePath& path : m_parser.getFileRegister()->getUnparsedSourceFilePaths())
@@ -69,8 +67,12 @@ Task::TaskState TaskParseCxx::update()
MessageStatus(ss.str(), false, true).dispatch();
m_client->prepareParsingFile();
m_parser.runTool(std::vector<std::string>(1, sourcePath));
m_client->finishParsingFile();
if (isSource)
{
fileRegister->markSourceFileParsed(sourcePath);
@@ -83,8 +85,6 @@ void TaskParseCxx::exit()
{
FileRegister* fileRegister = m_parser.getFileRegister();
m_client->finishParsingFile();
MessageFinishedParsing(
fileRegister->getParsedFilesCount(),
fileRegister->getFilesCount(),