r340598 - [FileManager] Do not call 'real_path' in getFile().
Eric Liu via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 24 01:59:55 PDT 2018
Author: ioeric
Date: Fri Aug 24 01:59:54 2018
New Revision: 340598
URL: http://llvm.org/viewvc/llvm-project?rev=340598&view=rev
Log:
[FileManager] Do not call 'real_path' in getFile().
Summary:
This partially rolls back the change in D48903:
https://github.com/llvm-mirror/clang/commit/89aa7f45a1f728144935289d4ce69d8522999de0#diff-0025af005307891b5429b6a834823d5eR318
`real_path` can be very expensive on real file systems, and calling it on each
opened file can slow down the compilation. This also slows down deserialized
ASTs for which real paths need to be recalculated for each input files again.
For clangd code completion latency (using preamble):
Before
{F7039629}
After
{F7039630}
Reviewers: ilya-biryukov, simark
Reviewed By: ilya-biryukov
Subscribers: kadircet, cfe-commits
Differential Revision: https://reviews.llvm.org/D51159
Modified:
cfe/trunk/lib/Basic/FileManager.cpp
Modified: cfe/trunk/lib/Basic/FileManager.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=340598&r1=340597&r2=340598&view=diff
==============================================================================
--- cfe/trunk/lib/Basic/FileManager.cpp (original)
+++ cfe/trunk/lib/Basic/FileManager.cpp Fri Aug 24 01:59:54 2018
@@ -316,10 +316,14 @@ const FileEntry *FileManager::getFile(St
UFE.File = std::move(F);
UFE.IsValid = true;
- SmallString<128> RealPathName;
- if (!FS->getRealPath(InterndFileName, RealPathName))
- UFE.RealPathName = RealPathName.str();
-
+ llvm::SmallString<128> AbsPath(InterndFileName);
+ // This is not the same as `VFS::getRealPath()`, which resolves symlinks but
+ // can be very expensive on real file systems.
+ // FIXME: the semantic of RealPathName is unclear, and the name might be
+ // misleading. We need to clean up the interface here.
+ makeAbsolutePath(AbsPath);
+ llvm::sys::path::remove_dots(AbsPath, /*remove_dot_dot=*/true);
+ UFE.RealPathName = AbsPath.str();
return &UFE;
}
More information about the cfe-commits
mailing list