Add StructuredData plugin type; showcase with new DarwinLog feature
Take 2, with missing cmake line fixed. Build tested on
Ubuntu 14.04 with clang-3.6.
See docs/structured_data/StructuredDataPlugins.md for details.
differential review: https://reviews.llvm.org/D22976
reviewers: clayborg, jingham
llvm-svn: 279202
diff --git a/lldb/source/Core/Event.cpp b/lldb/source/Core/Event.cpp
index 6b07e4d..96c1c56 100644
--- a/lldb/source/Core/Event.cpp
+++ b/lldb/source/Core/Event.cpp
@@ -25,6 +25,13 @@
using namespace lldb;
using namespace lldb_private;
+#pragma mark -
+#pragma mark Event
+
+//------------------------------------------------------------------
+// Event functions
+//------------------------------------------------------------------
+
Event::Event (Broadcaster *broadcaster, uint32_t event_type, EventData *data) :
m_broadcaster_wp(broadcaster->GetBroadcasterImpl()),
m_type(event_type),
@@ -101,6 +108,13 @@
m_data_sp->DoOnRemoval (this);
}
+#pragma mark -
+#pragma mark EventData
+
+//------------------------------------------------------------------
+// EventData functions
+//------------------------------------------------------------------
+
EventData::EventData() = default;
EventData::~EventData() = default;
@@ -111,6 +125,14 @@
s->PutCString ("Generic Event Data");
}
+#pragma mark -
+#pragma mark EventDataBytes
+
+//------------------------------------------------------------------
+// EventDataBytes functions
+//------------------------------------------------------------------
+
+
EventDataBytes::EventDataBytes () :
m_bytes()
{
@@ -224,3 +246,150 @@
{
m_bytes.swap (new_bytes);
}
+
+#pragma mark -
+#pragma mark EventStructuredData
+
+//------------------------------------------------------------------
+// EventDataStructuredData definitions
+//------------------------------------------------------------------
+
+EventDataStructuredData::EventDataStructuredData() :
+ EventData(),
+ m_process_sp(),
+ m_object_sp(),
+ m_plugin_sp()
+{
+}
+
+EventDataStructuredData::EventDataStructuredData(const ProcessSP &process_sp,
+ const StructuredData::ObjectSP
+ &object_sp,
+ const
+ lldb::StructuredDataPluginSP
+ &plugin_sp) :
+ EventData(),
+ m_process_sp(process_sp),
+ m_object_sp(object_sp),
+ m_plugin_sp(plugin_sp)
+{
+}
+
+EventDataStructuredData::~EventDataStructuredData()
+{
+}
+
+//------------------------------------------------------------------
+// EventDataStructuredData member functions
+//------------------------------------------------------------------
+
+const ConstString &
+EventDataStructuredData::GetFlavor() const
+{
+ return EventDataStructuredData::GetFlavorString();
+}
+
+void
+EventDataStructuredData::Dump(Stream *s) const
+{
+ if (!s)
+ return;
+
+ if (m_object_sp)
+ m_object_sp->Dump(*s);
+}
+
+const ProcessSP&
+EventDataStructuredData::GetProcess() const
+{
+ return m_process_sp;
+}
+
+const StructuredData::ObjectSP&
+EventDataStructuredData::GetObject() const
+{
+ return m_object_sp;
+}
+
+const lldb::StructuredDataPluginSP&
+EventDataStructuredData::GetStructuredDataPlugin() const
+{
+ return m_plugin_sp;
+}
+
+void
+EventDataStructuredData::SetProcess(const ProcessSP &process_sp)
+{
+ m_process_sp = process_sp;
+}
+
+void
+EventDataStructuredData::SetObject(const StructuredData::ObjectSP &object_sp)
+{
+ m_object_sp = object_sp;
+}
+
+void
+EventDataStructuredData::SetStructuredDataPlugin(const
+ lldb::StructuredDataPluginSP
+ &plugin_sp)
+{
+ m_plugin_sp = plugin_sp;
+}
+
+//------------------------------------------------------------------
+// EventDataStructuredData static functions
+//------------------------------------------------------------------
+
+const EventDataStructuredData*
+EventDataStructuredData::GetEventDataFromEvent(const Event *event_ptr)
+{
+ if (event_ptr == nullptr)
+ return nullptr;
+
+ const EventData *event_data = event_ptr->GetData();
+ if (!event_data || event_data->GetFlavor() !=
+ EventDataStructuredData::GetFlavorString())
+ return nullptr;
+
+ return static_cast<const EventDataStructuredData*>(event_data);
+}
+
+ProcessSP
+EventDataStructuredData::GetProcessFromEvent(const Event *event_ptr)
+{
+ auto event_data = EventDataStructuredData::GetEventDataFromEvent(event_ptr);
+ if (event_data)
+ return event_data->GetProcess();
+ else
+ return ProcessSP();
+}
+
+StructuredData::ObjectSP
+EventDataStructuredData::GetObjectFromEvent(const Event *event_ptr)
+{
+ auto event_data = EventDataStructuredData::GetEventDataFromEvent(event_ptr);
+ if (event_data)
+ return event_data->GetObject();
+ else
+ return StructuredData::ObjectSP();
+}
+
+lldb::StructuredDataPluginSP
+EventDataStructuredData::GetPluginFromEvent(const Event *event_ptr)
+{
+ auto event_data = EventDataStructuredData::GetEventDataFromEvent(event_ptr);
+ if (event_data)
+ return event_data->GetStructuredDataPlugin();
+ else
+ return StructuredDataPluginSP();
+}
+
+const ConstString &
+EventDataStructuredData::GetFlavorString ()
+{
+ static ConstString s_flavor("EventDataStructuredData");
+ return s_flavor;
+}
+
+