diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2018-05-24 11:39:16 +0200 |
---|---|---|
committer | Tim Jenssen <tim.jenssen@qt.io> | 2018-05-24 10:10:24 +0000 |
commit | 1412dde3a5a5672573c863c4df3f061dfc3ef1c5 (patch) | |
tree | 9ef1c3b2c6389933df6cb6b0f82bd080e4ec0ae6 /src/libs/utils/fileinprojectfinder.cpp | |
parent | b5a4e88485a130c00b465f24e228f712684eb98a (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.cpp | 11 |
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; |