[Lldb-commits] [PATCH] D117632: Instrument SB API with signposts

Jonas Devlieghere via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Jan 19 12:27:57 PST 2022


JDevlieghere updated this revision to Diff 401369.
JDevlieghere retitled this revision from "Instrument SBAPI with scoped timers" to "Instrument SB API with signposts".
JDevlieghere edited the summary of this revision.

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D117632/new/

https://reviews.llvm.org/D117632

Files:
  lldb/include/lldb/Utility/Instrumentation.h
  lldb/source/Utility/Instrumentation.cpp


Index: lldb/source/Utility/Instrumentation.cpp
===================================================================
--- lldb/source/Utility/Instrumentation.cpp
+++ lldb/source/Utility/Instrumentation.cpp
@@ -6,6 +6,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "lldb/Utility/Instrumentation.h"
+#include "llvm/Support/Signposts.h"
+
 #include <cstdio>
 #include <cstdlib>
 #include <limits>
@@ -16,6 +18,9 @@
 // Whether we're currently across the API boundary.
 static thread_local bool g_global_boundary = false;
 
+// Instrument SB API calls with singposts when supported.
+static llvm::ManagedStatic<llvm::SignpostEmitter> g_api_signposts;
+
 Instrumenter::Instrumenter() {
   if (!g_global_boundary) {
     g_global_boundary = true;
@@ -25,19 +30,22 @@
 
 Instrumenter::Instrumenter(llvm::StringRef pretty_func,
                            std::string &&pretty_args)
-    : m_local_boundary(false) {
+    : m_pretty_func(pretty_func), m_local_boundary(false) {
   if (!g_global_boundary) {
     g_global_boundary = true;
     m_local_boundary = true;
+    g_api_signposts->startInterval(this, m_pretty_func);
   }
   LLDB_LOG(GetLogIfAllCategoriesSet(LIBLLDB_LOG_API), "[{0}] {1} ({2})",
-           m_local_boundary ? "external" : "internal", pretty_func,
+           m_local_boundary ? "external" : "internal", m_pretty_func,
            pretty_args);
 }
 
 Instrumenter::~Instrumenter() { UpdateBoundary(); }
 
 void Instrumenter::UpdateBoundary() {
-  if (m_local_boundary)
+  if (m_local_boundary) {
     g_global_boundary = false;
+    g_api_signposts->endInterval(this, m_pretty_func);
+  }
 }
Index: lldb/include/lldb/Utility/Instrumentation.h
===================================================================
--- lldb/include/lldb/Utility/Instrumentation.h
+++ lldb/include/lldb/Utility/Instrumentation.h
@@ -87,6 +87,8 @@
 private:
   void UpdateBoundary();
 
+  llvm::StringRef m_pretty_func;
+
   /// Whether this function call was the one crossing the API boundary.
   bool m_local_boundary = false;
 };


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117632.401369.patch
Type: text/x-patch
Size: 2076 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20220119/7c36f778/attachment-0001.bin>


More information about the lldb-commits mailing list