From: Haojian Wu Date: Thu, 18 Oct 2018 15:33:20 +0000 (+0000) Subject: [clangd] Clear the semantic of RefSlab::size. X-Git-Tag: llvmorg-8.0.0-rc1~6305 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ece6e7dad30d936d006e14bd42ca3151996e1e7;p=platform%2Fupstream%2Fllvm.git [clangd] Clear the semantic of RefSlab::size. Summary: The RefSlab::size can easily cause confusions, it returns the number of different symbols, rahter than the number of all references. - add numRefs() method and cache it, since calculating it everytime is nontrivial. - clear misused places. Reviewers: sammccall Subscribers: ilya-biryukov, ioeric, MaskRay, jkorous, arphaman, kadircet, cfe-commits Differential Revision: https://reviews.llvm.org/D53389 llvm-svn: 344745 --- diff --git a/clang-tools-extra/clangd/index/Background.cpp b/clang-tools-extra/clangd/index/Background.cpp index f6de395..a83dd60 100644 --- a/clang-tools-extra/clangd/index/Background.cpp +++ b/clang-tools-extra/clangd/index/Background.cpp @@ -174,9 +174,9 @@ llvm::Error BackgroundIndex::index(tooling::CompileCommand Cmd) { Action->EndSourceFile(); log("Indexed {0} ({1} symbols, {2} refs)", Inputs.CompileCommand.Filename, - Symbols.size(), Refs.size()); + Symbols.size(), Refs.numRefs()); SPAN_ATTACH(Tracer, "symbols", int(Symbols.size())); - SPAN_ATTACH(Tracer, "refs", int(Refs.size())); + SPAN_ATTACH(Tracer, "refs", int(Refs.numRefs())); // FIXME: partition the symbols by file rather than TU, to avoid duplication. IndexedSymbols.update(AbsolutePath, llvm::make_unique(std::move(Symbols)), diff --git a/clang-tools-extra/clangd/index/FileIndex.cpp b/clang-tools-extra/clangd/index/FileIndex.cpp index 79eb542..1ece08c 100644 --- a/clang-tools-extra/clangd/index/FileIndex.cpp +++ b/clang-tools-extra/clangd/index/FileIndex.cpp @@ -63,9 +63,9 @@ indexSymbols(ASTContext &AST, std::shared_ptr PP, auto Refs = Collector.takeRefs(); vlog("index AST for {0} (main={1}): \n" " symbol slab: {2} symbols, {3} bytes\n" - " ref slab: {4} symbols, {5} bytes", + " ref slab: {4} symbols, {5} refs, {6} bytes", FileName, IsIndexMainAST, Syms.size(), Syms.bytes(), Refs.size(), - Refs.bytes()); + Refs.numRefs(), Refs.bytes()); return {std::move(Syms), std::move(Refs)}; } diff --git a/clang-tools-extra/clangd/index/Index.cpp b/clang-tools-extra/clangd/index/Index.cpp index 3c61137..af1ffb5 100644 --- a/clang-tools-extra/clangd/index/Index.cpp +++ b/clang-tools-extra/clangd/index/Index.cpp @@ -172,17 +172,19 @@ RefSlab RefSlab::Builder::build() && { // Reallocate refs on the arena to reduce waste and indirections when reading. std::vector>> Result; Result.reserve(Refs.size()); + size_t NumRefs = 0; for (auto &Sym : Refs) { auto &SymRefs = Sym.second; llvm::sort(SymRefs); // FIXME: do we really need to dedup? SymRefs.erase(std::unique(SymRefs.begin(), SymRefs.end()), SymRefs.end()); + NumRefs += SymRefs.size(); auto *Array = Arena.Allocate(SymRefs.size()); std::uninitialized_copy(SymRefs.begin(), SymRefs.end(), Array); Result.emplace_back(Sym.first, ArrayRef(Array, SymRefs.size())); } - return RefSlab(std::move(Result), std::move(Arena)); + return RefSlab(std::move(Result), std::move(Arena), NumRefs); } void SwapIndex::reset(std::unique_ptr Index) { diff --git a/clang-tools-extra/clangd/index/Index.h b/clang-tools-extra/clangd/index/Index.h index 3b7e305..e0b3ec0 100644 --- a/clang-tools-extra/clangd/index/Index.h +++ b/clang-tools-extra/clangd/index/Index.h @@ -407,7 +407,9 @@ public: const_iterator begin() const { return Refs.begin(); } const_iterator end() const { return Refs.end(); } + /// Gets the number of symbols. size_t size() const { return Refs.size(); } + size_t numRefs() const { return NumRefs; } bool empty() const { return Refs.empty(); } size_t bytes() const { @@ -431,11 +433,14 @@ public: }; private: - RefSlab(std::vector Refs, llvm::BumpPtrAllocator Arena) - : Arena(std::move(Arena)), Refs(std::move(Refs)) {} + RefSlab(std::vector Refs, llvm::BumpPtrAllocator Arena, + size_t NumRefs) + : Arena(std::move(Arena)), Refs(std::move(Refs)), NumRefs(NumRefs) {} llvm::BumpPtrAllocator Arena; std::vector Refs; + // Number of all references. + size_t NumRefs = 0; }; struct FuzzyFindRequest { diff --git a/clang-tools-extra/clangd/index/Serialization.cpp b/clang-tools-extra/clangd/index/Serialization.cpp index d1f637a..f2e65c9 100644 --- a/clang-tools-extra/clangd/index/Serialization.cpp +++ b/clang-tools-extra/clangd/index/Serialization.cpp @@ -496,18 +496,18 @@ std::unique_ptr loadIndex(llvm::StringRef SymbolFilename, } } - size_t SymSize = Symbols.size(); - size_t RefSize = Refs.size(); + size_t NumSym = Symbols.size(); + size_t NumRefs = Refs.numRefs(); + trace::Span Tracer("BuildIndex"); auto Index = UseDex ? dex::Dex::build(std::move(Symbols), std::move(Refs), URISchemes) : MemIndex::build(std::move(Symbols), std::move(Refs)); vlog("Loaded {0} from {1} with estimated memory usage {2} bytes\n" - " - number of symbos: {3}\n" + " - number of symbols: {3}\n" " - number of refs: {4}\n", UseDex ? "Dex" : "MemIndex", SymbolFilename, - Index->estimateMemoryUsage(), - SymSize, RefSize); + Index->estimateMemoryUsage(), NumSym, NumRefs); return Index; }