aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/fileinprojectfinder.cpp
diff options
context:
space:
mode:
authorTim Jenssen <tim.jenssen@qt.io>2018-05-24 11:39:16 +0200
committerTim Jenssen <tim.jenssen@qt.io>2018-05-24 10:10:24 +0000
commit1412dde3a5a5672573c863c4df3f061dfc3ef1c5 (patch)
tree9ef1c3b2c6389933df6cb6b0f82bd080e4ec0ae6 /src/libs/utils/fileinprojectfinder.cpp
parentb5a4e88485a130c00b465f24e228f712684eb98a (diff)
FileInProjectFinder: performance improvement
cdUp does check for an existing file which is slow especially at Windows. Benchmarking this with a project with around 100 files improved time usage inside that method from 6 seconds to 300 ms. There is still room for improvement because of parentDir calls cleanPath which is also not that fast. Change-Id: I57adae1f1f0a82ac702b461758e9d1b89760087b Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src/libs/utils/fileinprojectfinder.cpp')
-rw-r--r--src/libs/utils/fileinprojectfinder.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/libs/utils/fileinprojectfinder.cpp b/src/libs/utils/fileinprojectfinder.cpp
index d86e8ca952..8758da6bcc 100644
--- a/src/libs/utils/fileinprojectfinder.cpp
+++ b/src/libs/utils/fileinprojectfinder.cpp
@@ -320,13 +320,14 @@ QStringList FileInProjectFinder::pathSegmentsWithSameName(const QString &pathSeg
{
QStringList result;
for (const FileName &f : m_projectFiles) {
- QDir dir = f.toFileInfo().absoluteDir();
+ FileName currentPath = f.parentDir();
do {
- if (dir.dirName() == pathSegment) {
- if (result.isEmpty() || result.last() != dir.path())
- result.append(dir.path());
+ if (currentPath.fileName() == pathSegment) {
+ if (result.isEmpty() || result.last() != currentPath.toString())
+ result.append(currentPath.toString());
}
- } while (dir.cdUp());
+ currentPath = currentPath.parentDir();
+ } while (!currentPath.isEmpty());
}
result.removeDuplicates();
return result;