diff options
Diffstat (limited to 'source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h')
-rw-r--r-- | source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h b/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h new file mode 100644 index 000000000000..7eaab127c3f3 --- /dev/null +++ b/source/Plugins/StructuredData/DarwinLog/StructuredDataDarwinLog.h @@ -0,0 +1,138 @@ +//===-- StructuredDataDarwinLog.h -------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#ifndef StructuredDataDarwinLog_h +#define StructuredDataDarwinLog_h + +#include "lldb/Target/StructuredDataPlugin.h" + +#include <mutex> + +// Forward declarations +namespace sddarwinlog_private { +class EnableCommand; +} + +namespace lldb_private { + +class StructuredDataDarwinLog : public StructuredDataPlugin { + friend sddarwinlog_private::EnableCommand; + +public: + // ------------------------------------------------------------------------- + // Public static API + // ------------------------------------------------------------------------- + + static void Initialize(); + + static void Terminate(); + + static const ConstString &GetStaticPluginName(); + + // ------------------------------------------------------------------------- + /// Return whether the DarwinLog functionality is enabled. + /// + /// The DarwinLog functionality is enabled if the user expicitly enabled + /// it with the enable command, or if the user has the setting set + /// that controls if we always enable it for newly created/attached + /// processes. + /// + /// @return + /// True if DarwinLog support is/will be enabled for existing or + /// newly launched/attached processes. + // ------------------------------------------------------------------------- + static bool IsEnabled(); + + // ------------------------------------------------------------------------- + // PluginInterface API + // ------------------------------------------------------------------------- + + ConstString GetPluginName() override; + + uint32_t GetPluginVersion() override; + + // ------------------------------------------------------------------------- + // StructuredDataPlugin API + // ------------------------------------------------------------------------- + + bool SupportsStructuredDataType(const ConstString &type_name) override; + + void HandleArrivalOfStructuredData( + Process &process, const ConstString &type_name, + const StructuredData::ObjectSP &object_sp) override; + + Error GetDescription(const StructuredData::ObjectSP &object_sp, + lldb_private::Stream &stream) override; + + bool GetEnabled(const ConstString &type_name) const override; + + void ModulesDidLoad(Process &process, ModuleList &module_list) override; + + ~StructuredDataDarwinLog(); + +private: + // ------------------------------------------------------------------------- + // Private constructors + // ------------------------------------------------------------------------- + + StructuredDataDarwinLog(const lldb::ProcessWP &process_wp); + + // ------------------------------------------------------------------------- + // Private static methods + // ------------------------------------------------------------------------- + + static lldb::StructuredDataPluginSP CreateInstance(Process &process); + + static void DebuggerInitialize(Debugger &debugger); + + static bool InitCompletionHookCallback(void *baton, + StoppointCallbackContext *context, + lldb::user_id_t break_id, + lldb::user_id_t break_loc_id); + + static Error FilterLaunchInfo(ProcessLaunchInfo &launch_info, Target *target); + + // ------------------------------------------------------------------------- + // Internal helper methods used by friend classes + // ------------------------------------------------------------------------- + void SetEnabled(bool enabled); + + void AddInitCompletionHook(Process &process); + + // ------------------------------------------------------------------------- + // Private methods + // ------------------------------------------------------------------------- + + void DumpTimestamp(Stream &stream, uint64_t timestamp); + + size_t DumpHeader(Stream &stream, const StructuredData::Dictionary &event); + + size_t HandleDisplayOfEvent(const StructuredData::Dictionary &event, + Stream &stream); + + // ------------------------------------------------------------------------- + /// Call the enable command again, using whatever settings were initially + /// made. + // ------------------------------------------------------------------------- + + void EnableNow(); + + // ------------------------------------------------------------------------- + // Private data + // ------------------------------------------------------------------------- + bool m_recorded_first_timestamp; + uint64_t m_first_timestamp_seen; + bool m_is_enabled; + std::mutex m_added_breakpoint_mutex; + bool m_added_breakpoint; + lldb::user_id_t m_breakpoint_id; +}; +} + +#endif /* StructuredDataPluginDarwinLog_hpp */ |