[Lldb-commits] [lldb] Define Telemetry plugin for LLDB. (PR #126588)

Vy Nguyen via lldb-commits lldb-commits at lists.llvm.org
Tue Feb 18 07:01:40 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 01/26] 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 0000000000000..a2ab3b69fde42
--- /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 0000000000000..520a01b9b1c7a
--- /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 02/26] 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 a2ab3b69fde42..a55f06fb9141f 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 fc7456a4b9a32..2f2a4ec86a1fb 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 520a01b9b1c7a..0005848981f3b 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() {

>From b0335138dc728f7edf8708184e3a414a14bebf39 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Tue, 11 Feb 2025 10:51:00 -0500
Subject: [PATCH 03/26] use header guard

---
 lldb/include/lldb/Core/TelemetryVendor.h | 3 +++
 lldb/source/Core/TelemetryVendor.cpp     | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index a55f06fb9141f..12a214c233d6c 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -5,6 +5,7 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
+#ifdef LLDB_BUILD_TELEMETRY
 
 #ifndef LLDB_CORE_TELEMETRYVENDOR_H
 #define LLDB_CORE_TELEMETRYVENDOR_H
@@ -38,3 +39,5 @@ class TelemetryVendor : public PluginInterface {
 
 } // namespace lldb_private
 #endif // LLDB_CORE_TELEMETRYVENDOR_H
+
+#endif // LLDB_BUILD_TELEMETRY
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
index 0005848981f3b..2fc68a5fa1b28 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -5,6 +5,7 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
+#ifdef LLDB_BUILD_TELEMETRY
 
 #include "lldb/Core/TelemetryVendor.h"
 
@@ -41,3 +42,5 @@ void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp) {
 }
 
 } // namespace lldb_private
+
+#ifdef LLDB_BUILD_TELEMETRY

>From 58e1d0f6feb72da6b77b15301c3c6c474443bd0d Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Tue, 11 Feb 2025 10:59:52 -0500
Subject: [PATCH 04/26] fix cmake

---
 lldb/source/Core/CMakeLists.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt
index cf5f6ac9da489..db43d6132c595 100644
--- a/lldb/source/Core/CMakeLists.txt
+++ b/lldb/source/Core/CMakeLists.txt
@@ -58,6 +58,7 @@ add_lldb_library(lldbCore
   SourceManager.cpp
   StreamAsynchronousIO.cpp
   Telemetry.cpp
+  TelemetryVendor.cpp
   ThreadedCommunication.cpp
   UserSettingsController.cpp
   Value.cpp

>From b767a2efb6f1d39e83523cfdf330ddd26a8cf892 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Tue, 11 Feb 2025 13:11:30 -0500
Subject: [PATCH 05/26] add header incl

---
 lldb/include/lldb/lldb-forward.h | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index 2f2a4ec86a1fb..b1696f520a55f 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -11,6 +11,11 @@
 
 #include <memory>
 
+#ifdef LLVM_BUILD_TELEMETRY
+#include "llvm/Telemetry/Telemetry.h"
+#include "lldb/Core/Telemetry.h"
+#endif
+
 // lldb forward declarations
 namespace lldb_private {
 

>From bfc954b1b047330a80b58606193cb035dbf50e42 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 10:20:36 -0500
Subject: [PATCH 06/26] review comment

---
 lldb/include/lldb/Core/TelemetryVendor.h | 20 ++++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index 12a214c233d6c..31275a150fb7e 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -5,11 +5,13 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-#ifdef LLDB_BUILD_TELEMETRY
-
 #ifndef LLDB_CORE_TELEMETRYVENDOR_H
 #define LLDB_CORE_TELEMETRYVENDOR_H
 
+#include "llvm/Config/llvm-config.h"
+
+#ifdef LLVM_BUILD_TELEMETRY
+
 #include "lldb/Core/PluginInterface.h"
 #include "lldb/Core/Telemetry.h"
 #include "llvm/Telemetry/Telemetry.h"
@@ -23,21 +25,19 @@ class TelemetryVendor : public PluginInterface {
   TelemetryVendor() = default;
 
   llvm::StringRef GetPluginName() override;
-
   static void Initialize();
-
   static void Terminate();
-
   static lldb::TelemetryConfig GetTelemetryConfig();
-
-  static void SetTelemetryConfig(const lldb::TelemetryConfigSP &config);
-
   static lldb::TelemetryManagerSP GetTelemetryManager();
 
+
+protected:
+  static void SetTelemetryConfig(const lldb::TelemetryConfigSP &config);
   static void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp);
 };
 
 } // namespace lldb_private
-#endif // LLDB_CORE_TELEMETRYVENDOR_H
 
-#endif // LLDB_BUILD_TELEMETRY
+#endif // LLVM_BUILD_TELEMETRY
+
+#endif // LLDB_CORE_TELEMETRYVENDOR_H

>From b3c50f1706bacdfa8fdecfd865c0be370f6cddab Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 10:36:29 -0500
Subject: [PATCH 07/26] addressed review commeht

---
 lldb/include/lldb/Core/TelemetryVendor.h |  9 ++++----
 lldb/include/lldb/lldb-forward.h         | 11 +++++----
 lldb/source/Core/TelemetryVendor.cpp     | 29 +++++++++++++-----------
 3 files changed, 26 insertions(+), 23 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index 31275a150fb7e..d906a9a26ea49 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -27,13 +27,12 @@ class TelemetryVendor : public PluginInterface {
   llvm::StringRef GetPluginName() override;
   static void Initialize();
   static void Terminate();
-  static lldb::TelemetryConfig GetTelemetryConfig();
-  static lldb::TelemetryManagerSP GetTelemetryManager();
-
+  static llvm::telemetry::Config *GetTelemetryConfig();
+  static telemetry::TelemetryManager *GetTelemetryManager();
 
 protected:
-  static void SetTelemetryConfig(const lldb::TelemetryConfigSP &config);
-  static void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp);
+  static void SetTelemetryConfig(const lldb::TelemetryConfigUP &config);
+  static void SetTelemetryManager(const lldb::TelemetryManagerUP &manager_sp);
 };
 
 } // namespace lldb_private
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index b1696f520a55f..7b5cd1e82951b 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -11,6 +11,7 @@
 
 #include <memory>
 
+#include "llvm/Config/llvm-config.h"
 #ifdef LLVM_BUILD_TELEMETRY
 #include "llvm/Telemetry/Telemetry.h"
 #include "lldb/Core/Telemetry.h"
@@ -483,11 +484,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
+#ifdef LLVM_BUILD_TELEMETRY
+typedef std::unique_ptr<llvm::telemetry::Config> TelemetryConfigUP;
+typedef std::unique_ptr<lldb_private::telemetry::TelemetryManager>
+    TelemetryManagerUP;
+#endif // LLVM_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 2fc68a5fa1b28..588063c2f82e0 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -5,7 +5,10 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-#ifdef LLDB_BUILD_TELEMETRY
+
+#include "llvm/Config/llvm-config.h"
+
+#ifdef LLVM_BUILD_TELEMETRY
 
 #include "lldb/Core/TelemetryVendor.h"
 
@@ -22,25 +25,25 @@ void TelemetryVendor::Initialize() {
   SetTelemetryManager(nullptr);
 }
 
-lldb::TelemetryConfigSP TelemetryVendor::GetTelemetryConfig() {
-  static lldb::TelemetryConfigSP g_config_sp;
-  return g_config_sp;
+static lldb::TelemetryConfigUP g_config_up =
+    std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false);
+lldb::TelemetryConfig *TelemetryVendor::GetTelemetryConfig() {
+  return g_config_up.get();
 }
 
-void TelemetryVendor::SetTelemetryConfig(
-    const lldb::TelemetryConfigSP &config) {
-  GetTelemetryCOnfig() = config;
+static lldb::TelemteryManagerUP g_telemetry_manager_up = nullptr;
+lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {
+  return g_telemetry_manager_sp.get();
 }
 
-lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {
-  static TelemteryManagerSP g_telemetry_manager_sp;
-  return g_telemetry_manager_sp;
+void TelemetryVendor::SetTelemetryConfig(lldb::TelemetryConfigUP config) {
+  g_config_up = std::move(config);
 }
 
-void SetTelemetryManager(const lldb::TelemetryManagerSP &manager_sp) {
-  GetTelemetryManager() = manager_sp;
+void SetTelemetryManager(lldb::TelemetryManagerUP &manager) {
+  g_telemetry_manger_up = std::move(manager);
 }
 
 } // namespace lldb_private
 
-#ifdef LLDB_BUILD_TELEMETRY
+#endif LLVM_BUILD_TELEMETRY

>From 0a43bd9e882487d29341d9d3089c5b26d592a4fa Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 10:38:26 -0500
Subject: [PATCH 08/26] remove getpluginname

---
 lldb/include/lldb/Core/TelemetryVendor.h | 3 ---
 lldb/source/Core/TelemetryVendor.cpp     | 4 ----
 2 files changed, 7 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index d906a9a26ea49..6509f7d8536da 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -22,9 +22,6 @@ namespace lldb_private {
 
 class TelemetryVendor : public PluginInterface {
 public:
-  TelemetryVendor() = default;
-
-  llvm::StringRef GetPluginName() override;
   static void Initialize();
   static void Terminate();
   static llvm::telemetry::Config *GetTelemetryConfig();
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
index 588063c2f82e0..7f69a93324a6a 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -14,10 +14,6 @@
 
 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_shared<new llvm::telemetry::Config>(

>From 5d80f30770553772f41813493eb22d296d305f9c Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 10:40:16 -0500
Subject: [PATCH 09/26] simplified init/terminate

---
 lldb/include/lldb/Core/TelemetryVendor.h | 4 ++--
 lldb/source/Core/TelemetryVendor.cpp     | 7 -------
 2 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index 6509f7d8536da..07f45538b7457 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -22,8 +22,8 @@ namespace lldb_private {
 
 class TelemetryVendor : public PluginInterface {
 public:
-  static void Initialize();
-  static void Terminate();
+  static void Initialize() {}
+  static void Terminate() {}
   static llvm::telemetry::Config *GetTelemetryConfig();
   static telemetry::TelemetryManager *GetTelemetryManager();
 
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
index 7f69a93324a6a..cc9d01cf1772f 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -14,13 +14,6 @@
 
 namespace lldb_private {
 
-void TelemetryVendor::Initialize() {
-  // The default (upstream) impl will have telemetry disabled by default.
-  SetTelemetryConfig(std::make_shared<new llvm::telemetry::Config>(
-      /*enable_telemetry*/ false));
-  SetTelemetryManager(nullptr);
-}
-
 static lldb::TelemetryConfigUP g_config_up =
     std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false);
 lldb::TelemetryConfig *TelemetryVendor::GetTelemetryConfig() {

>From 57f8e863fbafaf4b47b39a3e022ec7dedda823a6 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 10:47:41 -0500
Subject: [PATCH 10/26] fix namespace

---
 lldb/include/lldb/Core/TelemetryVendor.h |  4 ++--
 lldb/include/lldb/lldb-forward.h         | 10 +++++-----
 lldb/source/Core/TelemetryVendor.cpp     |  8 ++++----
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
index 07f45538b7457..54aba3bd14422 100644
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ b/lldb/include/lldb/Core/TelemetryVendor.h
@@ -28,8 +28,8 @@ class TelemetryVendor : public PluginInterface {
   static telemetry::TelemetryManager *GetTelemetryManager();
 
 protected:
-  static void SetTelemetryConfig(const lldb::TelemetryConfigUP &config);
-  static void SetTelemetryManager(const lldb::TelemetryManagerUP &manager_sp);
+  static void SetTelemetryConfig(const TelemetryConfigUP &config);
+  static void SetTelemetryManager(const TelemetryManagerUP &manager_sp);
 };
 
 } // namespace lldb_private
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index 7b5cd1e82951b..71dd1e34ebc3b 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -243,6 +243,11 @@ class Progress;
 class Target;
 class TargetList;
 class TargetProperties;
+#ifdef LLVM_BUILD_TELEMETRY
+typedef std::unique_ptr<llvm::telemetry::Config> TelemetryConfigUP;
+typedef std::unique_ptr<lldb_private::telemetry::TelemetryManager>
+    TelemetryManagerUP;
+#endif // LLVM_BUILD_TELEMETRY
 class Thread;
 class ThreadCollection;
 class ThreadList;
@@ -484,11 +489,6 @@ 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 LLVM_BUILD_TELEMETRY
-typedef std::unique_ptr<llvm::telemetry::Config> TelemetryConfigUP;
-typedef std::unique_ptr<lldb_private::telemetry::TelemetryManager>
-    TelemetryManagerUP;
-#endif // LLVM_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 cc9d01cf1772f..5598526e3a55b 100644
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ b/lldb/source/Core/TelemetryVendor.cpp
@@ -14,22 +14,22 @@
 
 namespace lldb_private {
 
-static lldb::TelemetryConfigUP g_config_up =
+static TelemetryConfigUP g_config_up =
     std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false);
 lldb::TelemetryConfig *TelemetryVendor::GetTelemetryConfig() {
   return g_config_up.get();
 }
 
-static lldb::TelemteryManagerUP g_telemetry_manager_up = nullptr;
+static TelemteryManagerUP g_telemetry_manager_up = nullptr;
 lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {
   return g_telemetry_manager_sp.get();
 }
 
-void TelemetryVendor::SetTelemetryConfig(lldb::TelemetryConfigUP config) {
+void TelemetryVendor::SetTelemetryConfig(TelemetryConfigUP config) {
   g_config_up = std::move(config);
 }
 
-void SetTelemetryManager(lldb::TelemetryManagerUP &manager) {
+void SetTelemetryManager(TelemetryManagerUP &manager) {
   g_telemetry_manger_up = std::move(manager);
 }
 

>From 5f14bc53d2f9f983d14965a50d05b50b199c90c7 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 11:19:38 -0500
Subject: [PATCH 11/26] remove TelemetryVendor

---
 lldb/include/lldb/Core/Telemetry.h       |  8 ++++-
 lldb/include/lldb/Core/TelemetryVendor.h | 39 ------------------------
 lldb/include/lldb/lldb-forward.h         | 11 -------
 lldb/source/Core/CMakeLists.txt          |  1 -
 lldb/source/Core/Telemetry.cpp           |  7 +++++
 lldb/source/Core/TelemetryVendor.cpp     | 38 -----------------------
 6 files changed, 14 insertions(+), 90 deletions(-)
 delete mode 100644 lldb/include/lldb/Core/TelemetryVendor.h
 delete mode 100644 lldb/source/Core/TelemetryVendor.cpp

diff --git a/lldb/include/lldb/Core/Telemetry.h b/lldb/include/lldb/Core/Telemetry.h
index 60a7097de5eee..97a654ecfba9b 100644
--- a/lldb/include/lldb/Core/Telemetry.h
+++ b/lldb/include/lldb/Core/Telemetry.h
@@ -61,9 +61,15 @@ struct LLDBBaseTelemetryInfo : public llvm::telemetry::TelemetryInfo {
 /// applicable to LLDB.
 class TelemetryManager : public llvm::telemetry::Manager {
 public:
+  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
+
+  static TelemetryManager *getInstance();
+
+protected:
   TelemetryManager(std::unique_ptr<llvm::telemetry::Config> config);
 
-  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
+  static std::unique_ptr<TelemetryManager> g_instance;
+  static void SetInstance(std::unique_ptr<TelemetryManager> manger);
 
 private:
   std::unique_ptr<llvm::telemetry::Config> m_config;
diff --git a/lldb/include/lldb/Core/TelemetryVendor.h b/lldb/include/lldb/Core/TelemetryVendor.h
deleted file mode 100644
index 54aba3bd14422..0000000000000
--- a/lldb/include/lldb/Core/TelemetryVendor.h
+++ /dev/null
@@ -1,39 +0,0 @@
-//===-- 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 "llvm/Config/llvm-config.h"
-
-#ifdef LLVM_BUILD_TELEMETRY
-
-#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:
-  static void Initialize() {}
-  static void Terminate() {}
-  static llvm::telemetry::Config *GetTelemetryConfig();
-  static telemetry::TelemetryManager *GetTelemetryManager();
-
-protected:
-  static void SetTelemetryConfig(const TelemetryConfigUP &config);
-  static void SetTelemetryManager(const TelemetryManagerUP &manager_sp);
-};
-
-} // namespace lldb_private
-
-#endif // LLVM_BUILD_TELEMETRY
-
-#endif // LLDB_CORE_TELEMETRYVENDOR_H
diff --git a/lldb/include/lldb/lldb-forward.h b/lldb/include/lldb/lldb-forward.h
index 71dd1e34ebc3b..fc7456a4b9a32 100644
--- a/lldb/include/lldb/lldb-forward.h
+++ b/lldb/include/lldb/lldb-forward.h
@@ -11,12 +11,6 @@
 
 #include <memory>
 
-#include "llvm/Config/llvm-config.h"
-#ifdef LLVM_BUILD_TELEMETRY
-#include "llvm/Telemetry/Telemetry.h"
-#include "lldb/Core/Telemetry.h"
-#endif
-
 // lldb forward declarations
 namespace lldb_private {
 
@@ -243,11 +237,6 @@ class Progress;
 class Target;
 class TargetList;
 class TargetProperties;
-#ifdef LLVM_BUILD_TELEMETRY
-typedef std::unique_ptr<llvm::telemetry::Config> TelemetryConfigUP;
-typedef std::unique_ptr<lldb_private::telemetry::TelemetryManager>
-    TelemetryManagerUP;
-#endif // LLVM_BUILD_TELEMETRY
 class Thread;
 class ThreadCollection;
 class ThreadList;
diff --git a/lldb/source/Core/CMakeLists.txt b/lldb/source/Core/CMakeLists.txt
index 46f240865d565..82fb5f42f9f4b 100644
--- a/lldb/source/Core/CMakeLists.txt
+++ b/lldb/source/Core/CMakeLists.txt
@@ -57,7 +57,6 @@ add_lldb_library(lldbCore
   SourceManager.cpp
   StreamAsynchronousIO.cpp
   Telemetry.cpp
-  TelemetryVendor.cpp
   ThreadedCommunication.cpp
   UserSettingsController.cpp
   Value.cpp
diff --git a/lldb/source/Core/Telemetry.cpp b/lldb/source/Core/Telemetry.cpp
index 0d0d7c1df3bb9..be6cec203d758 100644
--- a/lldb/source/Core/Telemetry.cpp
+++ b/lldb/source/Core/Telemetry.cpp
@@ -70,6 +70,13 @@ llvm::Error TelemetryManager::preDispatch(TelemetryInfo *entry) {
   return Error::success();
 }
 
+std::unique_ptr<TelemetryManager> TelemetryManager::g_instance = nullptr;
+TelemetryManager *TelemetryManager::getInstance() { return g_instance.get(); }
+
+void TelemetryManager::SetInstance(std::unique_ptr<TelemetryManager> manager) {
+  g_instance = std::move(manager);
+}
+
 } // namespace telemetry
 } // namespace lldb_private
 
diff --git a/lldb/source/Core/TelemetryVendor.cpp b/lldb/source/Core/TelemetryVendor.cpp
deleted file mode 100644
index 5598526e3a55b..0000000000000
--- a/lldb/source/Core/TelemetryVendor.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-//===-- 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 "llvm/Config/llvm-config.h"
-
-#ifdef LLVM_BUILD_TELEMETRY
-
-#include "lldb/Core/TelemetryVendor.h"
-
-namespace lldb_private {
-
-static TelemetryConfigUP g_config_up =
-    std::make_unique<llvm::telemetry::Config>(/*enable_telemetry*/ false);
-lldb::TelemetryConfig *TelemetryVendor::GetTelemetryConfig() {
-  return g_config_up.get();
-}
-
-static TelemteryManagerUP g_telemetry_manager_up = nullptr;
-lldb::TelemetryManagerSP TelemetryVendor::GetTelemetryManager() {
-  return g_telemetry_manager_sp.get();
-}
-
-void TelemetryVendor::SetTelemetryConfig(TelemetryConfigUP config) {
-  g_config_up = std::move(config);
-}
-
-void SetTelemetryManager(TelemetryManagerUP &manager) {
-  g_telemetry_manger_up = std::move(manager);
-}
-
-} // namespace lldb_private
-
-#endif LLVM_BUILD_TELEMETRY

>From d19a9d407bc1443a70f886e3709f04f49433419a Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 14:11:19 -0500
Subject: [PATCH 12/26] add unittest

---
 lldb/include/lldb/Core/Telemetry.h            |  4 +-
 .../unittests/telemetry_plugin/CMakeLists.txt | 27 +++++++++++++
 .../unittests/telemetry_plugin/FakePlugin.cpp | 35 +++++++++++++++++
 lldb/unittests/telemetry_plugin/FakePlugin.h  | 39 +++++++++++++++++++
 .../telemetry_plugin/TestFakePlugin.cpp       | 25 ++++++++++++
 5 files changed, 129 insertions(+), 1 deletion(-)
 create mode 100644 lldb/unittests/telemetry_plugin/CMakeLists.txt
 create mode 100644 lldb/unittests/telemetry_plugin/FakePlugin.cpp
 create mode 100644 lldb/unittests/telemetry_plugin/FakePlugin.h
 create mode 100644 lldb/unittests/telemetry_plugin/TestFakePlugin.cpp

diff --git a/lldb/include/lldb/Core/Telemetry.h b/lldb/include/lldb/Core/Telemetry.h
index 97a654ecfba9b..037cd9aa8f49b 100644
--- a/lldb/include/lldb/Core/Telemetry.h
+++ b/lldb/include/lldb/Core/Telemetry.h
@@ -9,6 +9,7 @@
 #ifndef LLDB_CORE_TELEMETRY_H
 #define LLDB_CORE_TELEMETRY_H
 
+#include "lldb/Core/PluginInterface.h"
 #include "lldb/Core/StructuredDataImpl.h"
 #include "lldb/Interpreter/CommandReturnObject.h"
 #include "lldb/Utility/StructuredData.h"
@@ -59,7 +60,8 @@ struct LLDBBaseTelemetryInfo : public llvm::telemetry::TelemetryInfo {
 /// The base Telemetry manager instance in LLDB
 /// This class declares additional instrumentation points
 /// applicable to LLDB.
-class TelemetryManager : public llvm::telemetry::Manager {
+class TelemetryManager : public llvm::telemetry::Manager,
+                         public PluginInterface {
 public:
   llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
 
diff --git a/lldb/unittests/telemetry_plugin/CMakeLists.txt b/lldb/unittests/telemetry_plugin/CMakeLists.txt
new file mode 100644
index 0000000000000..4b8b3dc859a99
--- /dev/null
+++ b/lldb/unittests/telemetry_plugin/CMakeLists.txt
@@ -0,0 +1,27 @@
+if (LLVM_BUILD_TELEMETRY)
+  add_lldb_library(lldbPluginTelemetryFakePlugin PLUGIN
+                   FakePlugin.cpp
+
+  LINK_LIBS
+    lldbCore
+    lldbUtility
+    lldbPluginProcessUtility
+  LINK_COMPONENTS
+    Support
+    Telemetry                   
+  )
+
+  add_lldb_unittest(TestFakePlugin
+  TestFakePlugin.cpp
+
+  LINK_LIBS
+    lldbPluginTelemetryFakePlugin
+    lldbCore
+    lldbUtilityHelpers
+    LLVMTestingSupport
+
+  LINK_COMPONENTS
+    Support
+    Telemetry                   
+  )
+endif()
diff --git a/lldb/unittests/telemetry_plugin/FakePlugin.cpp b/lldb/unittests/telemetry_plugin/FakePlugin.cpp
new file mode 100644
index 0000000000000..7ee562da98db7
--- /dev/null
+++ b/lldb/unittests/telemetry_plugin/FakePlugin.cpp
@@ -0,0 +1,35 @@
+//===-- FakePlugin.cpp ------------------------------------------*- C++ -*-===//
+//
+// 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/PluginInterface.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Core/Telemetry.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Telemetry/Telemetry.h"
+
+#include "FakePlugin.h"
+
+#include <memory>
+
+LLDB_PLUGIN_DEFINE(FakePlugin)
+
+llvm::Error FakePlugin::preDispatch(TelemetryInfo *entry) {
+  dynamic_cast<FakeTelemetryInfo>(entry)->msg = "In FakePlugin";
+  return Error::success();
+}
+
+void FakePlugin::Initialize() {
+  lldb_private::telemetry::TelemetryManager::setInstance(
+      std::make_unique<FakePlugin>());
+  // TODO: do we need all the PluginManagerL::RegisterPlugin()  stuff???
+}
+
+void FakePlugin::Terminate() {
+  // nothing to do?
+}
diff --git a/lldb/unittests/telemetry_plugin/FakePlugin.h b/lldb/unittests/telemetry_plugin/FakePlugin.h
new file mode 100644
index 0000000000000..75e4b7bf116d3
--- /dev/null
+++ b/lldb/unittests/telemetry_plugin/FakePlugin.h
@@ -0,0 +1,39 @@
+//===-- FakePlugin.h --------------------------------------------*- C++ -*-===//
+//
+// 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_SOURCE_PLUGINS_TELEMETRY_FAKE_PLUGIN_H
+#define LLDB_SOURCE_PLUGINS_TELEMETRY_FAKE_PLUGIN_H
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/Telemetry.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Telemetry/Telemetry.h"
+
+struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
+  std::string msg;
+};
+
+class FakePlugin : public lldb_private::TelemetryManager {
+public:
+  FakePlugin() = default;
+
+  // TelemetryManager interface
+  llvm::Error preDistpatch(TelemetryInfo *entry) override;
+
+  // Plugin interface
+  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
+
+  static void Initialize();
+
+  static void Terminate();
+
+  static llvm::StringRef GetPluginNameStatic() { return "FakeTelemetryPlugin"; }
+};
+
+#endif
diff --git a/lldb/unittests/telemetry_plugin/TestFakePlugin.cpp b/lldb/unittests/telemetry_plugin/TestFakePlugin.cpp
new file mode 100644
index 0000000000000..593599f2c46a3
--- /dev/null
+++ b/lldb/unittests/telemetry_plugin/TestFakePlugin.cpp
@@ -0,0 +1,25 @@
+//===-- TestFakePlugin.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 "FakePlugin.h"
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Core/Telemetry.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Telemetry/Telemetry.h"
+#include "gtest/gtest.h"
+
+#include <memory>
+
+TEST(SmokeTest) {
+
+  auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
+
+  ASSERT_NE(ins, nullptr);
+}

>From 7ac7268561a3907961ea6269839dd836ba35e2b9 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 14:17:48 -0500
Subject: [PATCH 13/26] fixup cmake file

---
 lldb/unittests/CMakeLists.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt
index cc9d45ebf981d..1010358981fed 100644
--- a/lldb/unittests/CMakeLists.txt
+++ b/lldb/unittests/CMakeLists.txt
@@ -79,3 +79,7 @@ add_subdirectory(ValueObject)
 if(LLDB_CAN_USE_DEBUGSERVER AND LLDB_TOOL_DEBUGSERVER_BUILD AND NOT LLDB_USE_SYSTEM_DEBUGSERVER)
   add_subdirectory(debugserver)
 endif()
+
+if(LLVM_BUILD_TELEMETRY)
+  add_subdirectory(telemetry_plugin)
+endif()

>From 2e859c1a91f8311d09a572179553ee7d6af6c396 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 14:26:15 -0500
Subject: [PATCH 14/26] reorg dir

---
 lldb/unittests/CMakeLists.txt                   |  2 +-
 lldb/unittests/telemetry/CMakeLists.txt         | 17 +++++++++++++++++
 .../TestFakePlugin.cpp                          |  0
 .../plugin}/CMakeLists.txt                      | 14 --------------
 .../plugin}/FakePlugin.cpp                      |  0
 .../plugin}/FakePlugin.h                        |  0
 6 files changed, 18 insertions(+), 15 deletions(-)
 create mode 100644 lldb/unittests/telemetry/CMakeLists.txt
 rename lldb/unittests/{telemetry_plugin => telemetry}/TestFakePlugin.cpp (100%)
 rename lldb/unittests/{telemetry_plugin => telemetry/plugin}/CMakeLists.txt (53%)
 rename lldb/unittests/{telemetry_plugin => telemetry/plugin}/FakePlugin.cpp (100%)
 rename lldb/unittests/{telemetry_plugin => telemetry/plugin}/FakePlugin.h (100%)

diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt
index 1010358981fed..2023aa6d08a33 100644
--- a/lldb/unittests/CMakeLists.txt
+++ b/lldb/unittests/CMakeLists.txt
@@ -81,5 +81,5 @@ if(LLDB_CAN_USE_DEBUGSERVER AND LLDB_TOOL_DEBUGSERVER_BUILD AND NOT LLDB_USE_SYS
 endif()
 
 if(LLVM_BUILD_TELEMETRY)
-  add_subdirectory(telemetry_plugin)
+  add_subdirectory(telemetry)
 endif()
diff --git a/lldb/unittests/telemetry/CMakeLists.txt b/lldb/unittests/telemetry/CMakeLists.txt
new file mode 100644
index 0000000000000..a3fd0196e0d42
--- /dev/null
+++ b/lldb/unittests/telemetry/CMakeLists.txt
@@ -0,0 +1,17 @@
+if (LLVM_BUILD_TELEMETRY)
+   add_subdirectory(plugin)
+
+  add_lldb_unittest(FakePluginTests
+  TestFakePlugin.cpp
+
+  LINK_LIBS
+    lldbPluginTelemetryFakePlugin
+    lldbCore
+    lldbUtilityHelpers
+    LLVMTestingSupport
+
+  LINK_COMPONENTS
+    Support
+    Telemetry                   
+  )
+endif()
diff --git a/lldb/unittests/telemetry_plugin/TestFakePlugin.cpp b/lldb/unittests/telemetry/TestFakePlugin.cpp
similarity index 100%
rename from lldb/unittests/telemetry_plugin/TestFakePlugin.cpp
rename to lldb/unittests/telemetry/TestFakePlugin.cpp
diff --git a/lldb/unittests/telemetry_plugin/CMakeLists.txt b/lldb/unittests/telemetry/plugin/CMakeLists.txt
similarity index 53%
rename from lldb/unittests/telemetry_plugin/CMakeLists.txt
rename to lldb/unittests/telemetry/plugin/CMakeLists.txt
index 4b8b3dc859a99..0d515d5a5afee 100644
--- a/lldb/unittests/telemetry_plugin/CMakeLists.txt
+++ b/lldb/unittests/telemetry/plugin/CMakeLists.txt
@@ -10,18 +10,4 @@ if (LLVM_BUILD_TELEMETRY)
     Support
     Telemetry                   
   )
-
-  add_lldb_unittest(TestFakePlugin
-  TestFakePlugin.cpp
-
-  LINK_LIBS
-    lldbPluginTelemetryFakePlugin
-    lldbCore
-    lldbUtilityHelpers
-    LLVMTestingSupport
-
-  LINK_COMPONENTS
-    Support
-    Telemetry                   
-  )
 endif()
diff --git a/lldb/unittests/telemetry_plugin/FakePlugin.cpp b/lldb/unittests/telemetry/plugin/FakePlugin.cpp
similarity index 100%
rename from lldb/unittests/telemetry_plugin/FakePlugin.cpp
rename to lldb/unittests/telemetry/plugin/FakePlugin.cpp
diff --git a/lldb/unittests/telemetry_plugin/FakePlugin.h b/lldb/unittests/telemetry/plugin/FakePlugin.h
similarity index 100%
rename from lldb/unittests/telemetry_plugin/FakePlugin.h
rename to lldb/unittests/telemetry/plugin/FakePlugin.h

>From 2a3143d62d9139f0bf5b730674da65e734c0f595 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 14:48:43 -0500
Subject: [PATCH 15/26] fix test

---
 lldb/unittests/telemetry/TestFakePlugin.cpp   |  4 ++--
 .../unittests/telemetry/plugin/FakePlugin.cpp | 24 +++++++++++++------
 lldb/unittests/telemetry/plugin/FakePlugin.h  | 10 +++++---
 3 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/lldb/unittests/telemetry/TestFakePlugin.cpp b/lldb/unittests/telemetry/TestFakePlugin.cpp
index 593599f2c46a3..e337a0eaff7bd 100644
--- a/lldb/unittests/telemetry/TestFakePlugin.cpp
+++ b/lldb/unittests/telemetry/TestFakePlugin.cpp
@@ -6,10 +6,10 @@
 //
 //===----------------------------------------------------------------------===//
 
-#include "FakePlugin.h"
 #include "lldb/Core/PluginInterface.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Core/Telemetry.h"
+#include "plugin/FakePlugin.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Telemetry/Telemetry.h"
@@ -17,7 +17,7 @@
 
 #include <memory>
 
-TEST(SmokeTest) {
+TEST(SmokeTest, Test) {
 
   auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
 
diff --git a/lldb/unittests/telemetry/plugin/FakePlugin.cpp b/lldb/unittests/telemetry/plugin/FakePlugin.cpp
index 7ee562da98db7..dc91aa15132b4 100644
--- a/lldb/unittests/telemetry/plugin/FakePlugin.cpp
+++ b/lldb/unittests/telemetry/plugin/FakePlugin.cpp
@@ -6,30 +6,40 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "FakePlugin.h"
 #include "lldb/Core/PluginInterface.h"
 #include "lldb/Core/PluginManager.h"
 #include "lldb/Core/Telemetry.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Casting.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Telemetry/Telemetry.h"
 
-#include "FakePlugin.h"
-
 #include <memory>
 
 LLDB_PLUGIN_DEFINE(FakePlugin)
 
-llvm::Error FakePlugin::preDispatch(TelemetryInfo *entry) {
-  dynamic_cast<FakeTelemetryInfo>(entry)->msg = "In FakePlugin";
-  return Error::success();
+namespace lldb_private {
+
+FakePlugin::FakePlugin()
+    : telemetry::TelemetryManager(
+          std::make_unique<llvm::telemetry::Config>(true)) {}
+
+llvm::Error FakePlugin::preDispatch(llvm::telemetry::TelemetryInfo *entry) {
+  if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry)) {
+    fake_entry->msg = "In FakePlugin";
+  }
+
+  return llvm::Error::success();
 }
 
 void FakePlugin::Initialize() {
-  lldb_private::telemetry::TelemetryManager::setInstance(
-      std::make_unique<FakePlugin>());
+  telemetry::TelemetryManager::setInstance(std::make_unique<FakePlugin>());
   // TODO: do we need all the PluginManagerL::RegisterPlugin()  stuff???
 }
 
 void FakePlugin::Terminate() {
   // nothing to do?
 }
+
+} // namespace lldb_private
diff --git a/lldb/unittests/telemetry/plugin/FakePlugin.h b/lldb/unittests/telemetry/plugin/FakePlugin.h
index 75e4b7bf116d3..62bffe21ee3e6 100644
--- a/lldb/unittests/telemetry/plugin/FakePlugin.h
+++ b/lldb/unittests/telemetry/plugin/FakePlugin.h
@@ -15,16 +15,18 @@
 #include "llvm/Support/Error.h"
 #include "llvm/Telemetry/Telemetry.h"
 
+namespace lldb_private {
+
 struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
   std::string msg;
 };
 
-class FakePlugin : public lldb_private::TelemetryManager {
+class FakePlugin : public telemetry::TelemetryManager {
 public:
-  FakePlugin() = default;
+  FakePlugin();
 
   // TelemetryManager interface
-  llvm::Error preDistpatch(TelemetryInfo *entry) override;
+  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
 
   // Plugin interface
   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
@@ -36,4 +38,6 @@ class FakePlugin : public lldb_private::TelemetryManager {
   static llvm::StringRef GetPluginNameStatic() { return "FakeTelemetryPlugin"; }
 };
 
+} // namespace lldb_private
+
 #endif

>From be5670f8a1ec285d013d9c5f0e52696b8e45d1b0 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 15:02:07 -0500
Subject: [PATCH 16/26] rename test for using with gunit filter

---
 lldb/include/lldb/Core/Telemetry.h          | 5 ++++-
 lldb/source/Core/Telemetry.cpp              | 2 +-
 lldb/unittests/telemetry/TestFakePlugin.cpp | 9 +++++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/lldb/include/lldb/Core/Telemetry.h b/lldb/include/lldb/Core/Telemetry.h
index 037cd9aa8f49b..8e370f0ffefd1 100644
--- a/lldb/include/lldb/Core/Telemetry.h
+++ b/lldb/include/lldb/Core/Telemetry.h
@@ -65,13 +65,16 @@ class TelemetryManager : public llvm::telemetry::Manager,
 public:
   llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
 
+  // Plugin interface
+  llvm::StringRef GetPluginName() override { return "TelemetryManager"; }
+
   static TelemetryManager *getInstance();
 
 protected:
   TelemetryManager(std::unique_ptr<llvm::telemetry::Config> config);
 
   static std::unique_ptr<TelemetryManager> g_instance;
-  static void SetInstance(std::unique_ptr<TelemetryManager> manger);
+  static void setInstance(std::unique_ptr<TelemetryManager> manger);
 
 private:
   std::unique_ptr<llvm::telemetry::Config> m_config;
diff --git a/lldb/source/Core/Telemetry.cpp b/lldb/source/Core/Telemetry.cpp
index be6cec203d758..f2a9d4bd00dad 100644
--- a/lldb/source/Core/Telemetry.cpp
+++ b/lldb/source/Core/Telemetry.cpp
@@ -73,7 +73,7 @@ llvm::Error TelemetryManager::preDispatch(TelemetryInfo *entry) {
 std::unique_ptr<TelemetryManager> TelemetryManager::g_instance = nullptr;
 TelemetryManager *TelemetryManager::getInstance() { return g_instance.get(); }
 
-void TelemetryManager::SetInstance(std::unique_ptr<TelemetryManager> manager) {
+void TelemetryManager::setInstance(std::unique_ptr<TelemetryManager> manager) {
   g_instance = std::move(manager);
 }
 
diff --git a/lldb/unittests/telemetry/TestFakePlugin.cpp b/lldb/unittests/telemetry/TestFakePlugin.cpp
index e337a0eaff7bd..c86c6da67ecdd 100644
--- a/lldb/unittests/telemetry/TestFakePlugin.cpp
+++ b/lldb/unittests/telemetry/TestFakePlugin.cpp
@@ -17,9 +17,14 @@
 
 #include <memory>
 
-TEST(SmokeTest, Test) {
-
+TEST(TelemetryTest, PluginTest) {
   auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
 
   ASSERT_NE(ins, nullptr);
+  lldb_private::FakeTelemetryInfo entry;
+  entry.msg = "";
+
+  auto stat = ins->preDispatch(&entry);
+  ASSERT_FALSE(stat);
+  ASSERT_EQ("In FakePlugin", entry.msg);
 }

>From e7f425f66862ee2486916cfba9d62d290e140b39 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Wed, 12 Feb 2025 15:48:22 -0500
Subject: [PATCH 17/26] call Init directly

---
 lldb/unittests/telemetry/TestFakePlugin.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/lldb/unittests/telemetry/TestFakePlugin.cpp b/lldb/unittests/telemetry/TestFakePlugin.cpp
index c86c6da67ecdd..d8bf4b35139e3 100644
--- a/lldb/unittests/telemetry/TestFakePlugin.cpp
+++ b/lldb/unittests/telemetry/TestFakePlugin.cpp
@@ -18,6 +18,10 @@
 #include <memory>
 
 TEST(TelemetryTest, PluginTest) {
+  // This would have been called by the plugin reg in a "real" plugin
+  // For tests, we just call it directly.
+  lldb_private::FakePlugin::Initialize();
+
   auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
 
   ASSERT_NE(ins, nullptr);

>From 17338f1894ab334a85575982bd5ea3273a625941 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 09:27:53 -0500
Subject: [PATCH 18/26] fixed test

---
 lldb/include/lldb/Core/Telemetry.h            |  4 +-
 lldb/unittests/CMakeLists.txt                 |  4 -
 lldb/unittests/Core/CMakeLists.txt            |  6 ++
 lldb/unittests/Core/TelemetryTest.cpp         | 74 +++++++++++++++++++
 lldb/unittests/telemetry/CMakeLists.txt       | 17 -----
 lldb/unittests/telemetry/TestFakePlugin.cpp   | 34 ---------
 .../unittests/telemetry/plugin/CMakeLists.txt | 13 ----
 .../unittests/telemetry/plugin/FakePlugin.cpp | 45 -----------
 lldb/unittests/telemetry/plugin/FakePlugin.h  | 43 -----------
 9 files changed, 81 insertions(+), 159 deletions(-)
 create mode 100644 lldb/unittests/Core/TelemetryTest.cpp
 delete mode 100644 lldb/unittests/telemetry/CMakeLists.txt
 delete mode 100644 lldb/unittests/telemetry/TestFakePlugin.cpp
 delete mode 100644 lldb/unittests/telemetry/plugin/CMakeLists.txt
 delete mode 100644 lldb/unittests/telemetry/plugin/FakePlugin.cpp
 delete mode 100644 lldb/unittests/telemetry/plugin/FakePlugin.h

diff --git a/lldb/include/lldb/Core/Telemetry.h b/lldb/include/lldb/Core/Telemetry.h
index 8e370f0ffefd1..0445a4a0a0c3f 100644
--- a/lldb/include/lldb/Core/Telemetry.h
+++ b/lldb/include/lldb/Core/Telemetry.h
@@ -66,18 +66,16 @@ class TelemetryManager : public llvm::telemetry::Manager,
   llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
 
   // Plugin interface
-  llvm::StringRef GetPluginName() override { return "TelemetryManager"; }
-
   static TelemetryManager *getInstance();
 
 protected:
   TelemetryManager(std::unique_ptr<llvm::telemetry::Config> config);
 
-  static std::unique_ptr<TelemetryManager> g_instance;
   static void setInstance(std::unique_ptr<TelemetryManager> manger);
 
 private:
   std::unique_ptr<llvm::telemetry::Config> m_config;
+  static std::unique_ptr<TelemetryManager> g_instance;
 };
 
 } // namespace telemetry
diff --git a/lldb/unittests/CMakeLists.txt b/lldb/unittests/CMakeLists.txt
index 2023aa6d08a33..cc9d45ebf981d 100644
--- a/lldb/unittests/CMakeLists.txt
+++ b/lldb/unittests/CMakeLists.txt
@@ -79,7 +79,3 @@ add_subdirectory(ValueObject)
 if(LLDB_CAN_USE_DEBUGSERVER AND LLDB_TOOL_DEBUGSERVER_BUILD AND NOT LLDB_USE_SYSTEM_DEBUGSERVER)
   add_subdirectory(debugserver)
 endif()
-
-if(LLVM_BUILD_TELEMETRY)
-  add_subdirectory(telemetry)
-endif()
diff --git a/lldb/unittests/Core/CMakeLists.txt b/lldb/unittests/Core/CMakeLists.txt
index 949963fd40346..d4d3764b67ae3 100644
--- a/lldb/unittests/Core/CMakeLists.txt
+++ b/lldb/unittests/Core/CMakeLists.txt
@@ -1,3 +1,7 @@
+if (LLVM_BUILD_TELEMETRY)
+  set(TELEMETRY_DEPS Telemetry)
+endif()
+
 add_lldb_unittest(LLDBCoreTests
   CommunicationTest.cpp
   DiagnosticEventTest.cpp
@@ -10,6 +14,7 @@ add_lldb_unittest(LLDBCoreTests
   RichManglingContextTest.cpp
   SourceLocationSpecTest.cpp
   SourceManagerTest.cpp
+  TelemetryTest.cpp
   UniqueCStringMapTest.cpp
 
   LINK_LIBS
@@ -26,4 +31,5 @@ add_lldb_unittest(LLDBCoreTests
     LLVMTestingSupport
   LINK_COMPONENTS
     Support
+    ${TELEMETRY_DEPS}
   )
diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
new file mode 100644
index 0000000000000..7e1911c9fe1b5
--- /dev/null
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -0,0 +1,74 @@
+//===-- TelemetryTest.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 "llvm/Config/llvm-config.h"
+
+#ifdef LLVM_BUILD_TELEMETRY
+
+#include "lldb/Core/PluginInterface.h"
+#include "lldb/Core/PluginManager.h"
+#include "lldb/Core/Telemetry.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Telemetry/Telemetry.h"
+#include "gtest/gtest.h"
+
+#include <memory>
+
+namespace lldb_private {
+
+struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
+  std::string msg;
+};
+
+class FakePlugin : public telemetry::TelemetryManager {
+public:
+  FakePlugin()
+      : telemetry::TelemetryManager(
+            std::make_unique<llvm::telemetry::Config>(true)) {}
+
+  // TelemetryManager interface
+  llvm::Error dispatch(llvm::telemetry::TelemetryInfo *entry) override {
+    if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry)) {
+      fake_entry->msg = "In FakePlugin";
+    }
+
+    return llvm::Error::success();
+  }
+
+  // Plugin interface
+  llvm::StringRef GetPluginName() override { return "FakeTelemetryPlugin"; }
+
+  static void Initialize() {
+    telemetry::TelemetryManager::setInstance(std::make_unique<FakePlugin>());
+  }
+
+  static void Terminate() { telemetry::TelemetryManager::setInstance(nullptr); }
+};
+
+} // namespace lldb_private
+
+TEST(TelemetryTest, PluginTest) {
+  // This would have been called by the plugin reg in a "real" plugin
+  // For tests, we just call it directly.
+  lldb_private::FakePlugin::Initialize();
+
+  auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
+
+  ASSERT_NE(ins, nullptr);
+  lldb_private::FakeTelemetryInfo entry;
+  entry.msg = "";
+
+  auto stat = ins->dispatch(&entry);
+  ASSERT_FALSE(stat);
+  ASSERT_EQ("In FakePlugin", entry.msg);
+
+  ASSERT_EQ("FakeTelemetryPlugin", ins->GetPluginName());
+}
+
+#endif // LLVM_BUILD_TELEMETRY
diff --git a/lldb/unittests/telemetry/CMakeLists.txt b/lldb/unittests/telemetry/CMakeLists.txt
deleted file mode 100644
index a3fd0196e0d42..0000000000000
--- a/lldb/unittests/telemetry/CMakeLists.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-if (LLVM_BUILD_TELEMETRY)
-   add_subdirectory(plugin)
-
-  add_lldb_unittest(FakePluginTests
-  TestFakePlugin.cpp
-
-  LINK_LIBS
-    lldbPluginTelemetryFakePlugin
-    lldbCore
-    lldbUtilityHelpers
-    LLVMTestingSupport
-
-  LINK_COMPONENTS
-    Support
-    Telemetry                   
-  )
-endif()
diff --git a/lldb/unittests/telemetry/TestFakePlugin.cpp b/lldb/unittests/telemetry/TestFakePlugin.cpp
deleted file mode 100644
index d8bf4b35139e3..0000000000000
--- a/lldb/unittests/telemetry/TestFakePlugin.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-//===-- TestFakePlugin.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/PluginInterface.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Core/Telemetry.h"
-#include "plugin/FakePlugin.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Telemetry/Telemetry.h"
-#include "gtest/gtest.h"
-
-#include <memory>
-
-TEST(TelemetryTest, PluginTest) {
-  // This would have been called by the plugin reg in a "real" plugin
-  // For tests, we just call it directly.
-  lldb_private::FakePlugin::Initialize();
-
-  auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
-
-  ASSERT_NE(ins, nullptr);
-  lldb_private::FakeTelemetryInfo entry;
-  entry.msg = "";
-
-  auto stat = ins->preDispatch(&entry);
-  ASSERT_FALSE(stat);
-  ASSERT_EQ("In FakePlugin", entry.msg);
-}
diff --git a/lldb/unittests/telemetry/plugin/CMakeLists.txt b/lldb/unittests/telemetry/plugin/CMakeLists.txt
deleted file mode 100644
index 0d515d5a5afee..0000000000000
--- a/lldb/unittests/telemetry/plugin/CMakeLists.txt
+++ /dev/null
@@ -1,13 +0,0 @@
-if (LLVM_BUILD_TELEMETRY)
-  add_lldb_library(lldbPluginTelemetryFakePlugin PLUGIN
-                   FakePlugin.cpp
-
-  LINK_LIBS
-    lldbCore
-    lldbUtility
-    lldbPluginProcessUtility
-  LINK_COMPONENTS
-    Support
-    Telemetry                   
-  )
-endif()
diff --git a/lldb/unittests/telemetry/plugin/FakePlugin.cpp b/lldb/unittests/telemetry/plugin/FakePlugin.cpp
deleted file mode 100644
index dc91aa15132b4..0000000000000
--- a/lldb/unittests/telemetry/plugin/FakePlugin.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-//===-- FakePlugin.cpp ------------------------------------------*- C++ -*-===//
-//
-// 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 "FakePlugin.h"
-#include "lldb/Core/PluginInterface.h"
-#include "lldb/Core/PluginManager.h"
-#include "lldb/Core/Telemetry.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Casting.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Telemetry/Telemetry.h"
-
-#include <memory>
-
-LLDB_PLUGIN_DEFINE(FakePlugin)
-
-namespace lldb_private {
-
-FakePlugin::FakePlugin()
-    : telemetry::TelemetryManager(
-          std::make_unique<llvm::telemetry::Config>(true)) {}
-
-llvm::Error FakePlugin::preDispatch(llvm::telemetry::TelemetryInfo *entry) {
-  if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry)) {
-    fake_entry->msg = "In FakePlugin";
-  }
-
-  return llvm::Error::success();
-}
-
-void FakePlugin::Initialize() {
-  telemetry::TelemetryManager::setInstance(std::make_unique<FakePlugin>());
-  // TODO: do we need all the PluginManagerL::RegisterPlugin()  stuff???
-}
-
-void FakePlugin::Terminate() {
-  // nothing to do?
-}
-
-} // namespace lldb_private
diff --git a/lldb/unittests/telemetry/plugin/FakePlugin.h b/lldb/unittests/telemetry/plugin/FakePlugin.h
deleted file mode 100644
index 62bffe21ee3e6..0000000000000
--- a/lldb/unittests/telemetry/plugin/FakePlugin.h
+++ /dev/null
@@ -1,43 +0,0 @@
-//===-- FakePlugin.h --------------------------------------------*- C++ -*-===//
-//
-// 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_SOURCE_PLUGINS_TELEMETRY_FAKE_PLUGIN_H
-#define LLDB_SOURCE_PLUGINS_TELEMETRY_FAKE_PLUGIN_H
-
-#include "lldb/Core/PluginInterface.h"
-#include "lldb/Core/Telemetry.h"
-#include "llvm/ADT/StringRef.h"
-#include "llvm/Support/Error.h"
-#include "llvm/Telemetry/Telemetry.h"
-
-namespace lldb_private {
-
-struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
-  std::string msg;
-};
-
-class FakePlugin : public telemetry::TelemetryManager {
-public:
-  FakePlugin();
-
-  // TelemetryManager interface
-  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
-
-  // Plugin interface
-  llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
-
-  static void Initialize();
-
-  static void Terminate();
-
-  static llvm::StringRef GetPluginNameStatic() { return "FakeTelemetryPlugin"; }
-};
-
-} // namespace lldb_private
-
-#endif

>From c3df4c80f96091431b543df640c230098424feb8 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 10:40:06 -0500
Subject: [PATCH 19/26] Update lldb/unittests/Core/TelemetryTest.cpp

Co-authored-by: Pavel Labath <pavel at labath.sk>
---
 lldb/unittests/Core/TelemetryTest.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index 7e1911c9fe1b5..72617932b08ac 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -64,8 +64,7 @@ TEST(TelemetryTest, PluginTest) {
   lldb_private::FakeTelemetryInfo entry;
   entry.msg = "";
 
-  auto stat = ins->dispatch(&entry);
-  ASSERT_FALSE(stat);
+  ASSERT_THAT_ERROR(ins->dispatch(&entry), llvm::Succeeded());
   ASSERT_EQ("In FakePlugin", entry.msg);
 
   ASSERT_EQ("FakeTelemetryPlugin", ins->GetPluginName());

>From 189af049ffbff0008793d971bcd6a532f106612e Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 10:40:17 -0500
Subject: [PATCH 20/26] Update lldb/unittests/Core/TelemetryTest.cpp

Co-authored-by: Pavel Labath <pavel at labath.sk>
---
 lldb/unittests/Core/TelemetryTest.cpp | 1 -
 1 file changed, 1 deletion(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index 72617932b08ac..af138110b6662 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -17,7 +17,6 @@
 #include "llvm/Support/Error.h"
 #include "llvm/Telemetry/Telemetry.h"
 #include "gtest/gtest.h"
-
 #include <memory>
 
 namespace lldb_private {

>From 8b84a5e213786ea87690b53255e0c20406217c09 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 10:41:02 -0500
Subject: [PATCH 21/26] Update lldb/unittests/Core/TelemetryTest.cpp

Co-authored-by: Pavel Labath <pavel at labath.sk>
---
 lldb/unittests/Core/TelemetryTest.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index af138110b6662..ccc3b26c61dd4 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -57,7 +57,7 @@ TEST(TelemetryTest, PluginTest) {
   // For tests, we just call it directly.
   lldb_private::FakePlugin::Initialize();
 
-  auto ins = lldb_private::telemetry::TelemetryManager::getInstance();
+  auto *ins = lldb_private::telemetry::TelemetryManager::getInstance();
 
   ASSERT_NE(ins, nullptr);
   lldb_private::FakeTelemetryInfo entry;

>From 96d02bf5522e24ec365250cbd61570baed7126f7 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 10:41:10 -0500
Subject: [PATCH 22/26] Update lldb/unittests/Core/TelemetryTest.cpp

Co-authored-by: Pavel Labath <pavel at labath.sk>
---
 lldb/unittests/Core/TelemetryTest.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index ccc3b26c61dd4..5e2cea7e4be11 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -33,9 +33,8 @@ class FakePlugin : public telemetry::TelemetryManager {
 
   // TelemetryManager interface
   llvm::Error dispatch(llvm::telemetry::TelemetryInfo *entry) override {
-    if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry)) {
+    if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry))
       fake_entry->msg = "In FakePlugin";
-    }
 
     return llvm::Error::success();
   }

>From 7405add2c6e297e3d6954773f50e0c72e0dfb733 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 13:40:30 -0500
Subject: [PATCH 23/26] added include

---
 lldb/unittests/Core/TelemetryTest.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index 5e2cea7e4be11..340c1c85c843e 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -16,6 +16,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Telemetry/Telemetry.h"
+#include "llvm/Testing/Support/Error.h"
 #include "gtest/gtest.h"
 #include <memory>
 
@@ -62,7 +63,7 @@ TEST(TelemetryTest, PluginTest) {
   lldb_private::FakeTelemetryInfo entry;
   entry.msg = "";
 
-  ASSERT_THAT_ERROR(ins->dispatch(&entry), llvm::Succeeded());
+  ASSERT_THAT_ERROR(ins->dispatch(&entry), ::llvm::Succeeded());
   ASSERT_EQ("In FakePlugin", entry.msg);
 
   ASSERT_EQ("FakeTelemetryPlugin", ins->GetPluginName());

>From cf180bb595e03982979121817fa728a8fee33e23 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 14:02:34 -0500
Subject: [PATCH 24/26] add Destination test

---
 lldb/unittests/Core/TelemetryTest.cpp | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index 340c1c85c843e..8cf42033aa4ed 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -19,6 +19,7 @@
 #include "llvm/Testing/Support/Error.h"
 #include "gtest/gtest.h"
 #include <memory>
+#include <vector>
 
 namespace lldb_private {
 
@@ -26,6 +27,22 @@ struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
   std::string msg;
 };
 
+class TestDestination : public llvm::telemetry::Destination {
+ public:
+  TestDestination(std::vector<const llvm::telemetry::TelemetryInfo*>* entries):
+      received_entries(entries) {}
+
+  llvm::Error receiveEntry(const llvm::telemetry::TelemetryInfo *entry) override {
+    received_entries->push_back(entry);
+    return llvm::Error::success();
+  }
+
+  llvm::StringLiteral name() const override { return "TestDestination";}
+
+ private:
+  std::vector<const llvm::telemetry::TelemetryInfo*>* received_entries;
+};
+
 class FakePlugin : public telemetry::TelemetryManager {
 public:
   FakePlugin()
@@ -33,7 +50,7 @@ class FakePlugin : public telemetry::TelemetryManager {
             std::make_unique<llvm::telemetry::Config>(true)) {}
 
   // TelemetryManager interface
-  llvm::Error dispatch(llvm::telemetry::TelemetryInfo *entry) override {
+  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override {
     if (auto *fake_entry = llvm::dyn_cast<FakeTelemetryInfo>(entry))
       fake_entry->msg = "In FakePlugin";
 
@@ -58,13 +75,17 @@ TEST(TelemetryTest, PluginTest) {
   lldb_private::FakePlugin::Initialize();
 
   auto *ins = lldb_private::telemetry::TelemetryManager::getInstance();
-
   ASSERT_NE(ins, nullptr);
+
+  std::vector<const ::llvm::telemetry::TelemetryInfo*> expected_entries;
+  ins->addDestination(std::make_unique<lldb_private::TestDestination>(&expected_entries));
+
   lldb_private::FakeTelemetryInfo entry;
   entry.msg = "";
 
   ASSERT_THAT_ERROR(ins->dispatch(&entry), ::llvm::Succeeded());
-  ASSERT_EQ("In FakePlugin", entry.msg);
+  ASSERT_EQ(1, expected_entries.size());
+  EXPECT_EQ("In FakePlugin", llvm::dyn_cast<lldb_private::FakeTelemetryInfo>(expected_entries[0])->msg);
 
   ASSERT_EQ("FakeTelemetryPlugin", ins->GetPluginName());
 }

>From 9a361d1698f523d793fe08e00620fc7d882225d5 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Thu, 13 Feb 2025 14:41:34 -0500
Subject: [PATCH 25/26] reformat code

---
 lldb/unittests/Core/TelemetryTest.cpp | 24 ++++++++++++++----------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index 8cf42033aa4ed..a640ef4666f90 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -28,19 +28,20 @@ struct FakeTelemetryInfo : public llvm::telemetry::TelemetryInfo {
 };
 
 class TestDestination : public llvm::telemetry::Destination {
- public:
-  TestDestination(std::vector<const llvm::telemetry::TelemetryInfo*>* entries):
-      received_entries(entries) {}
+public:
+  TestDestination(std::vector<const llvm::telemetry::TelemetryInfo *> *entries)
+      : received_entries(entries) {}
 
-  llvm::Error receiveEntry(const llvm::telemetry::TelemetryInfo *entry) override {
+  llvm::Error
+  receiveEntry(const llvm::telemetry::TelemetryInfo *entry) override {
     received_entries->push_back(entry);
     return llvm::Error::success();
   }
 
-  llvm::StringLiteral name() const override { return "TestDestination";}
+  llvm::StringLiteral name() const override { return "TestDestination"; }
 
- private:
-  std::vector<const llvm::telemetry::TelemetryInfo*>* received_entries;
+private:
+  std::vector<const llvm::telemetry::TelemetryInfo *> *received_entries;
 };
 
 class FakePlugin : public telemetry::TelemetryManager {
@@ -77,15 +78,18 @@ TEST(TelemetryTest, PluginTest) {
   auto *ins = lldb_private::telemetry::TelemetryManager::getInstance();
   ASSERT_NE(ins, nullptr);
 
-  std::vector<const ::llvm::telemetry::TelemetryInfo*> expected_entries;
-  ins->addDestination(std::make_unique<lldb_private::TestDestination>(&expected_entries));
+  std::vector<const ::llvm::telemetry::TelemetryInfo *> expected_entries;
+  ins->addDestination(
+      std::make_unique<lldb_private::TestDestination>(&expected_entries));
 
   lldb_private::FakeTelemetryInfo entry;
   entry.msg = "";
 
   ASSERT_THAT_ERROR(ins->dispatch(&entry), ::llvm::Succeeded());
   ASSERT_EQ(1, expected_entries.size());
-  EXPECT_EQ("In FakePlugin", llvm::dyn_cast<lldb_private::FakeTelemetryInfo>(expected_entries[0])->msg);
+  EXPECT_EQ("In FakePlugin",
+            llvm::dyn_cast<lldb_private::FakeTelemetryInfo>(expected_entries[0])
+                ->msg);
 
   ASSERT_EQ("FakeTelemetryPlugin", ins->GetPluginName());
 }

>From b05f7d42ee62711fe62e9b554c01ffc0b6f923c6 Mon Sep 17 00:00:00 2001
From: Vy Nguyen <vyng at google.com>
Date: Tue, 18 Feb 2025 10:01:02 -0500
Subject: [PATCH 26/26] remove inhertiance from PluginInterface

---
 lldb/include/lldb/Core/Telemetry.h    | 12 +++++-------
 lldb/unittests/Core/TelemetryTest.cpp |  5 +++--
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/lldb/include/lldb/Core/Telemetry.h b/lldb/include/lldb/Core/Telemetry.h
index 0445a4a0a0c3f..ee9c111abe942 100644
--- a/lldb/include/lldb/Core/Telemetry.h
+++ b/lldb/include/lldb/Core/Telemetry.h
@@ -9,7 +9,6 @@
 #ifndef LLDB_CORE_TELEMETRY_H
 #define LLDB_CORE_TELEMETRY_H
 
-#include "lldb/Core/PluginInterface.h"
 #include "lldb/Core/StructuredDataImpl.h"
 #include "lldb/Interpreter/CommandReturnObject.h"
 #include "lldb/Utility/StructuredData.h"
@@ -60,13 +59,12 @@ struct LLDBBaseTelemetryInfo : public llvm::telemetry::TelemetryInfo {
 /// The base Telemetry manager instance in LLDB
 /// This class declares additional instrumentation points
 /// applicable to LLDB.
-class TelemetryManager : public llvm::telemetry::Manager,
-                         public PluginInterface {
-public:
-  llvm::Error preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
+class TelemetryManager : public llvm::telemetry::Manager public
+    : llvm::Error
+      preDispatch(llvm::telemetry::TelemetryInfo *entry) override;
 
-  // Plugin interface
-  static TelemetryManager *getInstance();
+virtual llvm::StringRef GetInstanceName() const = 0;
+static TelemetryManager *getInstance();
 
 protected:
   TelemetryManager(std::unique_ptr<llvm::telemetry::Config> config);
diff --git a/lldb/unittests/Core/TelemetryTest.cpp b/lldb/unittests/Core/TelemetryTest.cpp
index a640ef4666f90..0b5bd32383b1c 100644
--- a/lldb/unittests/Core/TelemetryTest.cpp
+++ b/lldb/unittests/Core/TelemetryTest.cpp
@@ -58,8 +58,9 @@ class FakePlugin : public telemetry::TelemetryManager {
     return llvm::Error::success();
   }
 
-  // Plugin interface
-  llvm::StringRef GetPluginName() override { return "FakeTelemetryPlugin"; }
+  llvm::StringRef GetInstanceName() const override {
+    return "FakeTelemetryPlugin";
+  }
 
   static void Initialize() {
     telemetry::TelemetryManager::setInstance(std::make_unique<FakePlugin>());



More information about the lldb-commits mailing list