summaryrefslogtreecommitdiff
path: root/clang-tools-extra
diff options
context:
space:
mode:
authorEric Liu <ioeric@google.com>2018-09-27 18:23:23 +0000
committerEric Liu <ioeric@google.com>2018-09-27 18:23:23 +0000
commita353bd5a2f5c5f259c95c6eda26255ffd52f07a0 (patch)
tree00362f0005dc5e4297abd6a441889011739f445c /clang-tools-extra
parent9707b1307dcf73c49c44db35da296b07c0d1553f (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.cpp8
-rw-r--r--clang-tools-extra/clangd/index/Merge.cpp17
-rw-r--r--clang-tools-extra/clangd/index/dex/Dex.cpp5
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.");
}