[Lldb-commits] [lldb] [LLDB][Telemetry]Define DebuggerTelemetryInfo and related methods (PR #127696)
Vy Nguyen via lldb-commits
lldb-commits at lists.llvm.org
Thu Feb 27 10:04:33 PST 2025
================
@@ -73,9 +104,46 @@ class TelemetryManager : public llvm::telemetry::Manager {
private:
std::unique_ptr<llvm::telemetry::Config> m_config;
+ // Each instance of a TelemetryManager is assigned a unique ID.
+ const std::string m_id;
+
static std::unique_ptr<TelemetryManager> g_instance;
};
+/// Helper RAII class for collecting telemetry.
+class ScopeTelemetryCollector {
+public:
+ ScopeTelemetryCollector() {
+ if (TelemetryEnabled())
+ m_start = std::chrono::steady_clock::now();
+ }
+
+ ~ScopeTelemetryCollector() {
+ while (!m_exit_funcs.empty()) {
+ (m_exit_funcs.top())();
+ m_exit_funcs.pop();
+ }
+ }
+
+ bool TelemetryEnabled() {
+ TelemetryManager *instance = TelemetryManager::GetInstance();
+ return instance != nullptr && instance->GetConfig()->EnableTelemetry;
+ }
+
+ SteadyTimePoint GetStartTime() { return m_start; }
+ SteadyTimePoint GetCurrentTime() { return std::chrono::steady_clock::now(); }
+
+ template <typename Fp> void RunAtScopeExit(Fp &&F) {
+ assert(llvm::telemetry::Config::BuildTimeEnableTelemetry &&
+ "Telemetry should have been enabled");
+ m_exit_funcs.push(std::forward<Fp>(F));
+ }
+
+private:
+ SteadyTimePoint m_start;
+ std::stack<std::function<void()>> m_exit_funcs;
----------------
oontvoo wrote:
no, just wanted to communicate the fact that cleanup functions are executed in the reverse order in which they were created/queued .
https://github.com/llvm/llvm-project/pull/127696
More information about the lldb-commits
mailing list