diff options
author | Eric Liu <ioeric@google.com> | 2018-09-27 18:23:23 +0000 |
---|---|---|
committer | Eric Liu <ioeric@google.com> | 2018-09-27 18:23:23 +0000 |
commit | a353bd5a2f5c5f259c95c6eda26255ffd52f07a0 (patch) | |
tree | 00362f0005dc5e4297abd6a441889011739f445c /clang-tools-extra | |
parent | 9707b1307dcf73c49c44db35da296b07c0d1553f (diff) |
[clangd] Add more tracing to index queries. NFC
Reviewers: sammccall
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits
Differential Revision: https://reviews.llvm.org/D52611
Diffstat (limited to 'clang-tools-extra')
-rw-r--r-- | clang-tools-extra/clangd/index/MemIndex.cpp | 8 | ||||
-rw-r--r-- | clang-tools-extra/clangd/index/Merge.cpp | 17 | ||||
-rw-r--r-- | clang-tools-extra/clangd/index/dex/Dex.cpp | 5 |
3 files changed, 28 insertions, 2 deletions
diff --git a/clang-tools-extra/clangd/index/MemIndex.cpp b/clang-tools-extra/clangd/index/MemIndex.cpp index 546902206e2..d39b86f232d 100644 --- a/clang-tools-extra/clangd/index/MemIndex.cpp +++ b/clang-tools-extra/clangd/index/MemIndex.cpp @@ -11,6 +11,7 @@ #include "FuzzyMatch.h" #include "Logger.h" #include "Quality.h" +#include "Trace.h" namespace clang { namespace clangd { @@ -28,6 +29,7 @@ bool MemIndex::fuzzyFind( llvm::function_ref<void(const Symbol &)> Callback) const { assert(!StringRef(Req.Query).contains("::") && "There must be no :: in query."); + trace::Span Tracer("MemIndex fuzzyFind"); TopN<std::pair<float, const Symbol *>> Top( Req.Limit ? *Req.Limit : std::numeric_limits<size_t>::max()); @@ -47,13 +49,16 @@ bool MemIndex::fuzzyFind( if (Top.push({*Score * quality(*Sym), Sym})) More = true; // An element with smallest score was discarded. } - for (const auto &Item : std::move(Top).items()) + auto Results = std::move(Top).items(); + SPAN_ATTACH(Tracer, "results", static_cast<int>(Results.size())); + for (const auto &Item : Results) Callback(*Item.second); return More; } void MemIndex::lookup(const LookupRequest &Req, llvm::function_ref<void(const Symbol &)> Callback) const { + trace::Span Tracer("MemIndex lookup"); for (const auto &ID : Req.IDs) { auto I = Index.find(ID); if (I != Index.end()) @@ -63,6 +68,7 @@ void MemIndex::lookup(const LookupRequest &Req, void MemIndex::refs(const RefsRequest &Req, llvm::function_ref<void(const Ref &)> Callback) const { + trace::Span Tracer("MemIndex refs"); for (const auto &ReqID : Req.IDs) { auto SymRefs = Refs.find(ReqID); if (SymRefs == Refs.end()) diff --git a/clang-tools-extra/clangd/index/Merge.cpp b/clang-tools-extra/clangd/index/Merge.cpp index 89323c14b54..9cca9da2264 100644 --- a/clang-tools-extra/clangd/index/Merge.cpp +++ b/clang-tools-extra/clangd/index/Merge.cpp @@ -9,6 +9,7 @@ #include "Merge.h" #include "Logger.h" +#include "Trace.h" #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringSet.h" #include "llvm/Support/raw_ostream.h" @@ -38,19 +39,31 @@ class MergedIndex : public SymbolIndex { // a) if it's not in the dynamic slab, yield it directly // b) if it's in the dynamic slab, merge it and yield the result // 3) now yield all the dynamic symbols we haven't processed. + trace::Span Tracer("MergedIndex fuzzyFind"); bool More = false; // We'll be incomplete if either source was. SymbolSlab::Builder DynB; - More |= Dynamic->fuzzyFind(Req, [&](const Symbol &S) { DynB.insert(S); }); + unsigned DynamicCount = 0; + unsigned StaticCount = 0; + unsigned MergedCount = 0; + More |= Dynamic->fuzzyFind(Req, [&](const Symbol &S) { + ++DynamicCount; + DynB.insert(S); + }); SymbolSlab Dyn = std::move(DynB).build(); DenseSet<SymbolID> SeenDynamicSymbols; More |= Static->fuzzyFind(Req, [&](const Symbol &S) { auto DynS = Dyn.find(S.ID); + ++StaticCount; if (DynS == Dyn.end()) return Callback(S); + ++MergedCount; SeenDynamicSymbols.insert(S.ID); Callback(mergeSymbol(*DynS, S)); }); + SPAN_ATTACH(Tracer, "dynamic", DynamicCount); + SPAN_ATTACH(Tracer, "static", StaticCount); + SPAN_ATTACH(Tracer, "merged", MergedCount); for (const Symbol &S : Dyn) if (!SeenDynamicSymbols.count(S.ID)) Callback(S); @@ -60,6 +73,7 @@ class MergedIndex : public SymbolIndex { void lookup(const LookupRequest &Req, llvm::function_ref<void(const Symbol &)> Callback) const override { + trace::Span Tracer("MergedIndex lookup"); SymbolSlab::Builder B; Dynamic->lookup(Req, [&](const Symbol &S) { B.insert(S); }); @@ -80,6 +94,7 @@ class MergedIndex : public SymbolIndex { void refs(const RefsRequest &Req, llvm::function_ref<void(const Ref &)> Callback) const override { + trace::Span Tracer("MergedIndex refs"); // We don't want duplicated refs from the static/dynamic indexes, // and we can't reliably duplicate them because offsets may differ slightly. // We consider the dynamic index authoritative and report all its refs, diff --git a/clang-tools-extra/clangd/index/dex/Dex.cpp b/clang-tools-extra/clangd/index/dex/Dex.cpp index 4086d1f00e7..880be3d71e6 100644 --- a/clang-tools-extra/clangd/index/dex/Dex.cpp +++ b/clang-tools-extra/clangd/index/dex/Dex.cpp @@ -12,6 +12,7 @@ #include "FuzzyMatch.h" #include "Logger.h" #include "Quality.h" +#include "Trace.h" #include "llvm/ADT/StringSet.h" #include <algorithm> #include <queue> @@ -139,6 +140,8 @@ bool Dex::fuzzyFind(const FuzzyFindRequest &Req, llvm::function_ref<void(const Symbol &)> Callback) const { assert(!StringRef(Req.Query).contains("::") && "There must be no :: in query."); + // FIXME: attach the query tree to the trace span. + trace::Span Tracer("Dex fuzzyFind"); FuzzyMatcher Filter(Req.Query); bool More = false; @@ -228,6 +231,7 @@ bool Dex::fuzzyFind(const FuzzyFindRequest &Req, void Dex::lookup(const LookupRequest &Req, llvm::function_ref<void(const Symbol &)> Callback) const { + trace::Span Tracer("Dex lookup"); for (const auto &ID : Req.IDs) { auto I = LookupTable.find(ID); if (I != LookupTable.end()) @@ -237,6 +241,7 @@ void Dex::lookup(const LookupRequest &Req, void Dex::refs(const RefsRequest &Req, llvm::function_ref<void(const Ref &)> Callback) const { + trace::Span Tracer("Dex refs"); log("refs is not implemented."); } |