diff options
| author | Eric Liu <ioeric@google.com> | 2018-10-02 10:43:55 +0000 |
|---|---|---|
| committer | Eric Liu <ioeric@google.com> | 2018-10-02 10:43:55 +0000 |
| commit | b1d7542dded29ecedf6c00c3b45fe4b0dc26777b (patch) | |
| tree | c4e57ec35e0b5134ff2ecc9ffe8af59eaf554741 /clang-tools-extra/clangd/ClangdServer.cpp | |
| parent | b91e08197cf74c1c2d92f0fc112e941f8ef883a1 (diff) | |
| download | bcm5719-llvm-b1d7542dded29ecedf6c00c3b45fe4b0dc26777b.tar.gz bcm5719-llvm-b1d7542dded29ecedf6c00c3b45fe4b0dc26777b.zip | |
[clangd] Cache FS stat() calls when building preamble.
Summary:
The file stats can be reused when preamble is reused (e.g. code
completion). It's safe to assume that cached status is not outdated as we
assume preamble files to remain unchanged.
On real file system, this made code completion ~20% faster on a measured file
(with big preamble). The preamble build time doesn't change much.
Reviewers: sammccall, ilya-biryukov
Reviewed By: sammccall
Subscribers: mgorny, MaskRay, jkorous, arphaman, kadircet, cfe-commits
Differential Revision: https://reviews.llvm.org/D52419
llvm-svn: 343576
Diffstat (limited to 'clang-tools-extra/clangd/ClangdServer.cpp')
| -rw-r--r-- | clang-tools-extra/clangd/ClangdServer.cpp | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/clang-tools-extra/clangd/ClangdServer.cpp b/clang-tools-extra/clangd/ClangdServer.cpp index 153dce29484..01fbe34fa87 100644 --- a/clang-tools-extra/clangd/ClangdServer.cpp +++ b/clang-tools-extra/clangd/ClangdServer.cpp @@ -181,8 +181,6 @@ void ClangdServer::codeComplete(PathRef File, Position Pos, if (isCancelled()) return CB(llvm::make_error<CancelledError>()); - auto PreambleData = IP->Preamble; - llvm::Optional<SpeculativeFuzzyFind> SpecFuzzyFind; if (CodeCompleteOpts.Index && CodeCompleteOpts.SpeculativeIndexRequest) { SpecFuzzyFind.emplace(); @@ -195,10 +193,8 @@ void ClangdServer::codeComplete(PathRef File, Position Pos, // FIXME(ibiryukov): even if Preamble is non-null, we may want to check // both the old and the new version in case only one of them matches. CodeCompleteResult Result = clangd::codeComplete( - File, IP->Command, PreambleData ? &PreambleData->Preamble : nullptr, - PreambleData ? PreambleData->Includes : IncludeStructure(), - IP->Contents, Pos, FS, PCHs, CodeCompleteOpts, - SpecFuzzyFind ? SpecFuzzyFind.getPointer() : nullptr); + File, IP->Command, IP->Preamble, IP->Contents, Pos, FS, PCHs, + CodeCompleteOpts, SpecFuzzyFind ? SpecFuzzyFind.getPointer() : nullptr); { clang::clangd::trace::Span Tracer("Completion results callback"); CB(std::move(Result)); @@ -231,9 +227,8 @@ void ClangdServer::signatureHelp(PathRef File, Position Pos, return CB(IP.takeError()); auto PreambleData = IP->Preamble; - CB(clangd::signatureHelp(File, IP->Command, - PreambleData ? &PreambleData->Preamble : nullptr, - IP->Contents, Pos, FS, PCHs, Index)); + CB(clangd::signatureHelp(File, IP->Command, PreambleData, IP->Contents, Pos, + FS, PCHs, Index)); }; // Unlike code completion, we wait for an up-to-date preamble here. |

