Skip to content

[lldb] Emit signpost intervals for progress events (NFC) #108498

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Merged
merged 1 commit into from
Sep 13, 2024

Conversation

JDevlieghere
Copy link
Member

@JDevlieghere JDevlieghere commented Sep 13, 2024

Emit signpost intervals for progress events so that when users report an operation takes a long time, we can investigate the issue with Instruments.

@llvmbot
Copy link
Member

llvmbot commented Sep 13, 2024

@llvm/pr-subscribers-lldb

Author: Jonas Devlieghere (JDevlieghere)

Changes

Emit signpost intervals for progress events so that when users report an operation takes a long time, we can see investigate the issue with Instruments.


Full diff: https://github.com/llvm/llvm-project/pull/108498.diff

1 Files Affected:

  • (modified) lldb/source/Core/Progress.cpp (+10)
diff --git a/lldb/source/Core/Progress.cpp b/lldb/source/Core/Progress.cpp
index e0ba1a63c508e5..08521a98bf9bbf 100644
--- a/lldb/source/Core/Progress.cpp
+++ b/lldb/source/Core/Progress.cpp
@@ -10,6 +10,7 @@
 
 #include "lldb/Core/Debugger.h"
 #include "lldb/Utility/StreamString.h"
+#include "llvm/Support/Signposts.h"
 
 #include <cstdint>
 #include <mutex>
@@ -20,6 +21,9 @@ using namespace lldb_private;
 
 std::atomic<uint64_t> Progress::g_id(0);
 
+// Instrument progress events with singposts when supported.
+static llvm::ManagedStatic<llvm::SignpostEmitter> g_progress_signposts;
+
 Progress::Progress(std::string title, std::string details,
                    std::optional<uint64_t> total,
                    lldb_private::Debugger *debugger)
@@ -39,9 +43,15 @@ Progress::Progress(std::string title, std::string details,
   // Report to the ProgressManager if that subsystem is enabled.
   if (ProgressManager::Enabled())
     ProgressManager::Instance().Increment(m_progress_data);
+
+  // Start signpost interval right before the meaningful work starts.
+  g_progress_signposts->startInterval(this, m_progress_data.title);
 }
 
 Progress::~Progress() {
+  // End signpost interval as soon as possible.
+  g_progress_signposts->endInterval(this, m_progress_data.title);
+
   // Make sure to always report progress completed when this object is
   // destructed so it indicates the progress dialog/activity should go away.
   std::lock_guard<std::mutex> guard(m_mutex);

Emit signpost intervals for progress events so that when users report an
operation takes a long time, we can see investigate the issue with
Instruments.
Copy link
Member

@medismailben medismailben left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@JDevlieghere JDevlieghere merged commit 90f077c into llvm:main Sep 13, 2024
7 checks passed
@JDevlieghere JDevlieghere deleted the progress-signposts branch September 13, 2024 20:42
JDevlieghere added a commit to swiftlang/llvm-project that referenced this pull request Dec 5, 2024
Emit signpost intervals for progress events so that when users report an
operation takes a long time, we can investigate the issue with
Instruments.app.

(cherry picked from commit 90f077c)
JDevlieghere added a commit to swiftlang/llvm-project that referenced this pull request Dec 6, 2024
…90f077cba8f4

[🍒 swift/release/6.1] [lldb] Emit signpost intervals for progress events (NFC) (llvm#108498)
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants