Skip to content

Commit 04b7da8

Browse files
committed
change the data type from json to structureddata
1 parent 42781f7 commit 04b7da8

File tree

7 files changed

+48
-21
lines changed

7 files changed

+48
-21
lines changed

lldb/include/lldb/API/SBDebugger.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#include "lldb/API/SBDefines.h"
1515
#include "lldb/API/SBPlatform.h"
1616
#include "lldb/API/SBStructuredData.h"
17-
#include "llvm/Support/JSON.h"
1817

1918
namespace lldb_private {
2019
class CommandPluginInterfaceImplementation;
@@ -247,7 +246,7 @@ class LLDB_API SBDebugger {
247246

248247
lldb::SBTarget GetDummyTarget();
249248

250-
void SendTelemetry(const llvm::json::Object &entry);
249+
void SendTelemetry(const lldb::SBStructuredData &entry);
251250

252251
// Return true if target is deleted from the target list of the debugger.
253252
bool DeleteTarget(lldb::SBTarget &target);

lldb/include/lldb/Core/Debugger.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "lldb/Core/FormatEntity.h"
2020
#include "lldb/Core/IOHandler.h"
2121
#include "lldb/Core/SourceManager.h"
22+
#include "lldb/Core/StructuredDataImpl.h"
2223
#include "lldb/Core/Telemetry.h"
2324
#include "lldb/Core/UserSettingsController.h"
2425
#include "lldb/Host/HostThread.h"
@@ -47,7 +48,6 @@
4748
#include "llvm/ADT/StringRef.h"
4849
#include "llvm/Support/DynamicLibrary.h"
4950
#include "llvm/Support/FormatVariadic.h"
50-
#include "llvm/Support/JSON.h"
5151
#include "llvm/Support/Threading.h"
5252
#include "llvm/Telemetry/Telemetry.h"
5353

@@ -155,7 +155,7 @@ class Debugger : public std::enable_shared_from_this<Debugger>,
155155

156156
LldbTelemeter *GetTelemeter() { return m_telemeter.get(); }
157157

158-
void SendClientTelemetry(const llvm::json::Object &entry);
158+
void SendClientTelemetry(const lldb_private::StructuredDataImpl &entry);
159159

160160
Status SetInputString(const char *data);
161161

lldb/include/lldb/Core/Telemetry.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include <string>
1818
#include <unordered_map>
1919

20+
#include "lldb/Core/StructuredDataImpl.h"
2021
#include "lldb/Interpreter/CommandReturnObject.h"
2122
#include "lldb/Utility/StructuredData.h"
2223
#include "lldb/lldb-forward.h"
@@ -258,7 +259,8 @@ class LldbTelemeter : public llvm::telemetry::Telemeter {
258259
virtual std::string GetNextUUID() = 0;
259260

260261
// For client (eg., SB API) to send telemetry entries.
261-
virtual void LogClientTelemetry(const llvm::json::Object &entry) = 0;
262+
virtual void
263+
LogClientTelemetry(const lldb_private::StructuredDataImpl &entry) = 0;
262264
};
263265

264266
// Logger configs: LLDB users can also supply their own configs via:

lldb/source/API/SBDebugger.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -972,9 +972,9 @@ SBTarget SBDebugger::GetDummyTarget() {
972972
return sb_target;
973973
}
974974

975-
void SBDebugger::SendTelemetry(const llvm::json::Object &entry) {
975+
void SBDebugger::SendTelemetry(const lldb::SBStructuredData &entry) {
976976
if (lldb_private::Debugger *debugger = this->get()) {
977-
debugger->SendClientTelemetry(entry);
977+
debugger->SendClientTelemetry(*(entry.m_impl_up.get()));
978978
} else {
979979
Log *log = GetLog(LLDBLog::API);
980980
LLDB_LOGF(log,

lldb/source/Core/Debugger.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2256,6 +2256,7 @@ llvm::ThreadPoolInterface &Debugger::GetThreadPool() {
22562256
return *g_thread_pool;
22572257
}
22582258

2259-
void Debugger::SendClientTelemetry(const llvm::json::Object &entry) {
2259+
void Debugger::SendClientTelemetry(
2260+
const lldb_private::StructuredDataImpl &entry) {
22602261
m_telemeter->LogClientTelemetry(entry);
22612262
}

lldb/source/Core/Telemetry.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,8 @@ class NoOpTelemeter : public LldbTelemeter {
332332
Target *target_ptr, CommandReturnObject *result) override {
333333
}
334334

335-
void LogClientTelemetry(const llvm::json::Object &entry) override {}
335+
void
336+
LogClientTelemetry(const lldb_private::StructuredDataImpl &entry) override {}
336337

337338
void addDestination(llvm::telemetry::Destination *destination) override {}
338339
std::string GetNextUUID() override { return ""; }
@@ -360,7 +361,8 @@ class BasicTelemeter : public LldbTelemeter {
360361
llvm::StringRef command_args, EventStats stats,
361362
Target *target_ptr, CommandReturnObject *result) override;
362363

363-
void LogClientTelemetry(const llvm::json::Object &entry) override;
364+
void
365+
LogClientTelemetry(const lldb_private::StructuredDataImpl &entry) override;
364366

365367
void addDestination(Destination *destination) override {
366368
m_destinations.push_back(destination);
@@ -563,9 +565,11 @@ void BasicTelemeter::LogMainExecutableLoadEnd(lldb::ModuleSP exec_mod,
563565
EmitToDestinations(&misc_info);
564566
}
565567

566-
void BasicTelemeter::LogClientTelemetry(const llvm::json::Object &entry) {
568+
void BasicTelemeter::LogClientTelemetry(
569+
const lldb_private::StructuredDataImpl &entry) {
570+
// TODO: pull the dictionary out of entry
567571
ClientTelemetryInfo client_info = MakeBaseEntry<ClientTelemetryInfo>();
568-
572+
/*
569573
std::optional<llvm::StringRef> request_name = entry.getString("request_name");
570574
if (!request_name.has_value()) {
571575
MiscTelemetryInfo misc_info = MakeBaseEntry<MiscTelemetryInfo>();
@@ -597,6 +601,7 @@ void BasicTelemeter::LogClientTelemetry(const llvm::json::Object &entry) {
597601
std::optional<llvm::StringRef> error_msg = entry.getString("error");
598602
if (error_msg.has_value())
599603
client_info.error_msg = error_msg->str();
604+
*/
600605

601606
EmitToDestinations(&client_info);
602607
}

lldb/tools/lldb-dap/DAP.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <sstream>
1414

1515
#include "DAP.h"
16+
#include "JSONUtils.h"
1617
#include "LLDBUtils.h"
1718
#include "lldb/API/SBCommandInterpreter.h"
1819
#include "llvm/ADT/StringExtras.h"
@@ -687,26 +688,45 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
687688
if (packet_type == "request") {
688689
const auto command = GetString(object, "command");
689690
auto handler_pos = request_handlers.find(std::string(command));
690-
llvm::json::Object telemetry_entry;
691-
telemetry_entry.insert({"request_name", std::string(command)});
692-
telemetry_entry.insert(
693-
{"start_time", start_time.time_since_epoch().count()});
691+
lldb::SBStructuredData telemetry_entry;
692+
693+
// There does not seem to be a direct way to construct an SBStructuredData.
694+
// So we first create a json::Array object,
695+
// then we serialize it to a string,
696+
// and finally call SBStructuredData::SetFromJSON(string).
697+
//
698+
// TODO: This seems unnecessarily complex. Ideally, we should be able to
699+
// just send a json::Object directly? Does the SB API allow json?
700+
//
701+
llvm::json::Array telemetry_array({
702+
{"request_name", std::string(command)},
703+
{"start_time", start_time.time_since_epoch().count()},
704+
});
694705

695706
if (handler_pos != request_handlers.end()) {
696707
handler_pos->second(object);
697708
auto end_time = std::chrono::steady_clock::now();
698-
telemetry_entry.insert({"end_time", end_time.time_since_epoch().count()});
709+
telemetry_array.push_back(
710+
llvm::json::Value{"end_time", end_time.time_since_epoch().count()});
711+
712+
llvm::json::Value val(std::move(telemetry_array));
713+
std::string string_rep = lldb_dap::JSONToString(val);
714+
telemetry_entry.SetFromJSON(string_rep.c_str());
699715
debugger.SendTelemetry(telemetry_entry);
700716
return true; // Success
701717
} else {
702718
if (log)
703719
*log << "error: unhandled command \"" << command.data() << "\""
704720
<< std::endl;
705721
auto end_time = std::chrono::steady_clock::now();
706-
telemetry_entry.insert({"end_time", end_time.time_since_epoch().count()});
707-
telemetry_entry.insert(
708-
{"error", "unhandled-command:" + std::string(command)});
709-
debugger.SendTelemetry(telemetry_entry);
722+
telemetry_array.push_back(
723+
llvm::json::Value{"end_time", end_time.time_since_epoch().count()});
724+
telemetry_array.push_back(llvm::json::Value{
725+
"error", llvm::Twine("unhandled-command:" + command).str()});
726+
727+
llvm::json::Value val(std::move(telemetry_array));
728+
std::string string_rep = lldb_dap::JSONToString(val);
729+
telemetry_entry.SetFromJSON(string_rep.c_str());
710730
debugger.SendTelemetry(telemetry_entry);
711731
return false; // Fail
712732
}

0 commit comments

Comments
 (0)