[Lldb-commits] [lldb] Define TelemetryVendor plugin. (PR #126588)

Vy Nguyen via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 11 07:31:12 PST 2025


https://github.com/oontvoo updated https://github.com/llvm/llvm-project/pull/126588

>From c7734011094995c64137de6f8122033d2a981610 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Mon, 10 Feb 2025 14:44:11 -0500
Subject: [PATCH 1/2] Define TelemetryVendor plugin.

Details:

Upstream in LLDB, we will have a default TelemetryVendor plugin will provide a default Config and NULL TelemetryManager.
Downstream vendors can extend this to provide a vendor-specific Config along with a functional TelemetryManager instance.
---
 lldb/include/lldb/Core/TelemetryVendor.h | 39 +++++++++++++++++++++
 lldb/source/Core/TelemetryVendor.cpp     | 43 ++++++++++++++++++++++++
 2 files changed, 82 insertions(+)
 create mode 100644 lldb/include/lldb/Core/TelemetryVendor.h
 create mode 100644 lldb/source/Core/TelemetryVendor.cpp

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
new file mode 100644
index 00000000000000..a2ab3b69fde422
--- /dev/null
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -0,0 +1,39 @@
+//===-- TelemetryVendor.h -------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_CORE_TELEMETRYVENDOR_H
+#define LLDB_CORE_TELEMETRYVENDOR_H
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/Telemetry.h"
+#include "llvm/Telemetry/Telemetry.h"
+
+#include <memory>
+
+namespace lldb_private {
+
+class TelemetryVendor : public PluginInterface {
+public:
+  TelemetryVendor() = default;
+
+  llvm::StringRef GetPluginName() override;
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static std::unique_ptr<llvm::telemetry::Config> GetTelemetryConfig();
+  static void
+  SetTelemetryConfig(std::unique_ptr<llvm::telemetry::Config> config);
+
+  static lldb::TelemetryManagerSP GetTelemetryManager();
+  static void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp);
+};
+
+} // namespace lldb_private
+#endif // LLDB_CORE_TELEMETRYVENDOR_H
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
new file mode 100644
index 00000000000000..520a01b9b1c7a3
--- /dev/null
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -0,0 +1,43 @@
+//===-- TelemetryVendor.cpp -----------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "lldb/Core/TelemetryVendor.h"
+
+namespace lldb_private {
+
+llvm::StringRef TelemetryVendor::GetPluginName() {
+  return "UpstreamTelemetryVendor";
+}
+
+void TelemetryVendor::Initialize() {
+  // The default (upstream) impl will have telemetry disabled by default.
+  SetTelemetryConfig(
+      std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false));
+  SetTelemetryManager(nullptr);
+}
+
+static std::unique_ptr<llvm::telemetry::Config> current_config;
+std::unique_ptr<llvm::telemetry::Config> TelemetryVendor::GetTelemetryConfig() {
+  return current_config;
+}
+
+void TelemetryVendor::SetTelemetryConfig(
+    std::unique_ptr<llvm::telemetry::Config> config) {
+  current_config = std::move(config);
+}
+
+lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {
+  static TelemteryManagerSP g_telemetry_manager_sp;
+  return g_telemetry_manager_sp;
+}
+
+void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp) {
+  GetTelemetryManager() = manager_sp;
+}
+
+} // namespace lldb_private

>From 5f6a04de76a5bf633ca9d14d9907d535301c5c59 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Tue, 11 Feb 2025 10:31:00 -0500
Subject: [PATCH 2/2] use shared ptr

---
 lldb/include/lldb/Core/TelemetryVendor.h |  7 ++++---
 lldb/include/lldb/lldb-forward.h         |  5 +++++
 lldb/source/Core/TelemetryVendor.cpp     | 14 +++++++-------
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index a2ab3b69fde422..a55f06fb9141f0 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -27,11 +27,12 @@ class TelemetryVendor : public PluginInterface {
 
   static void Terminate();
 
-  static std::unique_ptr<llvm::telemetry::Config> GetTelemetryConfig();
-  static void
-  SetTelemetryConfig(std::unique_ptr<llvm::telemetry::Config> config);
+  static lldb::TelemetryConfig GetTelemetryConfig();
+
+  static void SetTelemetryConfig(const lldb::TelemetryConfigSP &config);
 
   static lldb::TelemetryManagerSP GetTelemetryManager();
+
   static void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp);
 };
 
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index fc7456a4b9a32e..2f2a4ec86a1fb8 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -478,6 +478,11 @@ typedef std::shared_ptr<lldb_private::TypeSummaryOptions> TypeSummaryOptionsSP;
 typedef std::shared_ptr<lldb_private::ScriptedSyntheticChildren>
     ScriptedSyntheticChildrenSP;
 typedef std::shared_ptr<lldb_private::SupportFile> SupportFileSP;
+#ifdef LLDB_BUILD_TELEMETRY
+typedef std::shared_ptr<llvm::telemetry::Config> TelemetryConfigSP;
+typedef std::shared_ptr<lldb_private::telemetry::TelemetryManager>
+    TelemetryManagerSP;
+#endif // LLDB_BUILD_TELEMETRY
 typedef std::shared_ptr<lldb_private::UnixSignals> UnixSignalsSP;
 typedef std::weak_ptr<lldb_private::UnixSignals> UnixSignalsWP;
 typedef std::shared_ptr<lldb_private::UnwindAssembly> UnwindAssemblySP;
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
index 520a01b9b1c7a3..0005848981f3bc 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -16,19 +16,19 @@ llvm::StringRef TelemetryVendor::GetPluginName() {
 
 void TelemetryVendor::Initialize() {
   // The default (upstream) impl will have telemetry disabled by default.
-  SetTelemetryConfig(
-      std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false));
+  SetTelemetryConfig(std::make_shared<new llvm::telemetry::Config>(
+      /*enable_telemetry*/ false));
   SetTelemetryManager(nullptr);
 }
 
-static std::unique_ptr<llvm::telemetry::Config> current_config;
-std::unique_ptr<llvm::telemetry::Config> TelemetryVendor::GetTelemetryConfig() {
-  return current_config;
+lldb::TelemetryConfigSP TelemetryVendor::GetTelemetryConfig() {
+  static lldb::TelemetryConfigSP g_config_sp;
+  return g_config_sp;
 }
 
 void TelemetryVendor::SetTelemetryConfig(
-    std::unique_ptr<llvm::telemetry::Config> config) {
-  current_config = std::move(config);
+    const lldb::TelemetryConfigSP &config) {
+  GetTelemetryCOnfig() = config;
 }
 
 lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {



More information about the lldb-commits mailing list