Index: clang-tools-extra/trunk/clangd/index/Background.cpp =================================================================== --- clang-tools-extra/trunk/clangd/index/Background.cpp +++ clang-tools-extra/trunk/clangd/index/Background.cpp @@ -174,9 +174,9 @@ 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)), Index: clang-tools-extra/trunk/clangd/index/FileIndex.cpp =================================================================== --- clang-tools-extra/trunk/clangd/index/FileIndex.cpp +++ clang-tools-extra/trunk/clangd/index/FileIndex.cpp @@ -63,9 +63,9 @@ 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)}; } Index: clang-tools-extra/trunk/clangd/index/Index.h =================================================================== --- clang-tools-extra/trunk/clangd/index/Index.h +++ clang-tools-extra/trunk/clangd/index/Index.h @@ -407,7 +407,9 @@ 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 @@ }; 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 { Index: clang-tools-extra/trunk/clangd/index/Index.cpp =================================================================== --- clang-tools-extra/trunk/clangd/index/Index.cpp +++ clang-tools-extra/trunk/clangd/index/Index.cpp @@ -172,17 +172,19 @@ // 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) { Index: clang-tools-extra/trunk/clangd/index/Serialization.cpp =================================================================== --- clang-tools-extra/trunk/clangd/index/Serialization.cpp +++ clang-tools-extra/trunk/clangd/index/Serialization.cpp @@ -496,18 +496,18 @@ } } - 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; }