[PATCH] D112835: [clangd] Record time spent in tidy checks

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Oct 29 10:20:43 PDT 2021


kadircet created this revision.
kadircet added a reviewer: sammccall.
Herald added subscribers: usaxena95, arphaman.
kadircet requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang-tools-extra.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112835

Files:
  clang-tools-extra/clangd/ParsedAST.cpp
  clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp


Index: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
+++ clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp
@@ -21,6 +21,7 @@
 #include "index/MemIndex.h"
 #include "support/Context.h"
 #include "support/Path.h"
+#include "support/TestTracer.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/DiagnosticSema.h"
 #include "llvm/Support/ScopedPrinter.h"
@@ -305,6 +306,7 @@
                                        "modernize-use-trailing-return-type,"
                                        "misc-no-recursion");
   TU.ExtraArgs.push_back("-Wno-unsequenced");
+  trace::TestTracer Tracer;
   EXPECT_THAT(
       *TU.build().getDiagnostics(),
       ifTidyChecks(UnorderedElementsAre(
@@ -336,6 +338,11 @@
                "function 'foo' is within a recursive call chain"),
           Diag(Test.range("bar"),
                "function 'bar' is within a recursive call chain"))));
+  if (CLANGD_TIDY_CHECKS) {
+    EXPECT_THAT(Tracer.takeMetric("tidy_check_latency",
+                                  "modernize-use-trailing-return-type"),
+                Not(IsEmpty()));
+  }
 }
 
 TEST(DiagnosticsTest, ClangTidyEOF) {
Index: clang-tools-extra/clangd/ParsedAST.cpp
===================================================================
--- clang-tools-extra/clangd/ParsedAST.cpp
+++ clang-tools-extra/clangd/ParsedAST.cpp
@@ -29,6 +29,7 @@
 #include "support/Trace.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/Decl.h"
+#include "clang/ASTMatchers/ASTMatchFinder.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/LangOptions.h"
 #include "clang/Basic/SourceLocation.h"
@@ -54,7 +55,9 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Timer.h"
 #include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <memory>
@@ -341,7 +344,10 @@
   //    ancestors outside this scope).
   // In practice almost all checks work well without modifications.
   std::vector<std::unique_ptr<tidy::ClangTidyCheck>> CTChecks;
-  ast_matchers::MatchFinder CTFinder;
+  llvm::StringMap<llvm::TimeRecord> CTCheckTimings;
+  ast_matchers::MatchFinder::MatchFinderOptions CTFinderOpts;
+  CTFinderOpts.CheckProfiling.emplace(CTCheckTimings);
+  ast_matchers::MatchFinder CTFinder(CTFinderOpts);
   llvm::Optional<tidy::ClangTidyContext> CTContext;
   llvm::Optional<IncludeFixer> FixIncludes;
   // No need to run clang-tidy or IncludeFixerif we are not going to surface
@@ -492,6 +498,10 @@
     // (The preprocessor part ran already, via PPCallbacks).
     trace::Span Tracer("ClangTidyMatch");
     CTFinder.matchAST(Clang->getASTContext());
+    static constexpr trace::Metric TidyCheckLatencies(
+        "tidy_check_latency", trace::Metric::Distribution, "check_name");
+    for (auto &Elem : CTCheckTimings)
+      TidyCheckLatencies.record(Elem.second.getWallTime(), Elem.first());
   }
 
   // XXX: This is messy: clang-tidy checks flush some diagnostics at EOF.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D112835.383417.patch
Type: text/x-patch
Size: 3184 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20211029/7355ccc4/attachment.bin>


More information about the cfe-commits mailing list