aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Core/Listener.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Core/Listener.h')
-rw-r--r--include/lldb/Core/Listener.h274
1 files changed, 111 insertions, 163 deletions
diff --git a/include/lldb/Core/Listener.h b/include/lldb/Core/Listener.h
index 1057cf35c6db..b82844eabbb8 100644
--- a/include/lldb/Core/Listener.h
+++ b/include/lldb/Core/Listener.h
@@ -12,6 +12,7 @@
// C Includes
// C++ Includes
+#include <chrono>
#include <list>
#include <map>
#include <mutex>
@@ -20,184 +21,131 @@
// Other libraries and framework includes
// Project includes
-#include "lldb/lldb-private.h"
-#include "lldb/Core/Broadcaster.h"
-#include "lldb/Host/Condition.h"
#include "lldb/Core/Event.h"
+#include "lldb/Utility/Timeout.h"
+#include "lldb/lldb-private.h"
namespace lldb_private {
-class Listener :
- public std::enable_shared_from_this<Listener>
-{
+class Listener : public std::enable_shared_from_this<Listener> {
public:
- typedef bool (*HandleBroadcastCallback) (lldb::EventSP &event_sp, void *baton);
-
- friend class Broadcaster;
- friend class BroadcasterManager;
-
- //------------------------------------------------------------------
- // Constructors and Destructors
- //------------------------------------------------------------------
- //
- // Listeners have to be constructed into shared pointers - at least if you want them to listen to
- // Broadcasters,
+ typedef bool (*HandleBroadcastCallback)(lldb::EventSP &event_sp, void *baton);
+
+ friend class Broadcaster;
+ friend class BroadcasterManager;
+
+ //------------------------------------------------------------------
+ // Constructors and Destructors
+ //------------------------------------------------------------------
+ //
+ // Listeners have to be constructed into shared pointers - at least if you
+ // want them to listen to
+ // Broadcasters,
protected:
- Listener (const char *name);
+ Listener(const char *name);
public:
- static lldb::ListenerSP
- MakeListener(const char *name);
-
- ~Listener ();
+ static lldb::ListenerSP MakeListener(const char *name);
- void
- AddEvent (lldb::EventSP &event);
+ ~Listener();
- void
- Clear ();
+ void AddEvent(lldb::EventSP &event);
- const char *
- GetName ()
- {
- return m_name.c_str();
- }
+ void Clear();
- uint32_t
- StartListeningForEventSpec (lldb::BroadcasterManagerSP manager_sp,
- const BroadcastEventSpec &event_spec);
-
- bool
- StopListeningForEventSpec (lldb::BroadcasterManagerSP manager_sp,
+ const char *GetName() { return m_name.c_str(); }
+
+ uint32_t StartListeningForEventSpec(lldb::BroadcasterManagerSP manager_sp,
+ const BroadcastEventSpec &event_spec);
+
+ bool StopListeningForEventSpec(lldb::BroadcasterManagerSP manager_sp,
const BroadcastEventSpec &event_spec);
-
- uint32_t
- StartListeningForEvents (Broadcaster* broadcaster,
- uint32_t event_mask);
-
- uint32_t
- StartListeningForEvents (Broadcaster* broadcaster,
- uint32_t event_mask,
- HandleBroadcastCallback callback,
- void *callback_user_data);
-
- bool
- StopListeningForEvents (Broadcaster* broadcaster,
- uint32_t event_mask);
-
- // Returns true if an event was received, false if we timed out.
- bool
- WaitForEvent (const TimeValue *timeout,
- lldb::EventSP &event_sp);
-
- bool
- WaitForEventForBroadcaster (const TimeValue *timeout,
- Broadcaster *broadcaster,
- lldb::EventSP &event_sp);
-
- bool
- WaitForEventForBroadcasterWithType (const TimeValue *timeout,
- Broadcaster *broadcaster,
- uint32_t event_type_mask,
- lldb::EventSP &event_sp);
-
- Event *
- PeekAtNextEvent ();
-
- Event *
- PeekAtNextEventForBroadcaster (Broadcaster *broadcaster);
-
- Event *
- PeekAtNextEventForBroadcasterWithType (Broadcaster *broadcaster,
- uint32_t event_type_mask);
-
- bool
- GetNextEvent (lldb::EventSP &event_sp);
-
- bool
- GetNextEventForBroadcaster (Broadcaster *broadcaster,
- lldb::EventSP &event_sp);
-
- bool
- GetNextEventForBroadcasterWithType (Broadcaster *broadcaster,
- uint32_t event_type_mask,
- lldb::EventSP &event_sp);
-
- size_t
- HandleBroadcastEvent (lldb::EventSP &event_sp);
+
+ uint32_t StartListeningForEvents(Broadcaster *broadcaster,
+ uint32_t event_mask);
+
+ uint32_t StartListeningForEvents(Broadcaster *broadcaster,
+ uint32_t event_mask,
+ HandleBroadcastCallback callback,
+ void *callback_user_data);
+
+ bool StopListeningForEvents(Broadcaster *broadcaster, uint32_t event_mask);
+
+ Event *PeekAtNextEvent();
+
+ Event *PeekAtNextEventForBroadcaster(Broadcaster *broadcaster);
+
+ Event *PeekAtNextEventForBroadcasterWithType(Broadcaster *broadcaster,
+ uint32_t event_type_mask);
+
+ // Returns true if an event was received, false if we timed out.
+ bool GetEvent(lldb::EventSP &event_sp, const Timeout<std::micro> &timeout);
+
+ bool GetEventForBroadcaster(Broadcaster *broadcaster, lldb::EventSP &event_sp,
+ const Timeout<std::micro> &timeout);
+
+ bool GetEventForBroadcasterWithType(Broadcaster *broadcaster,
+ uint32_t event_type_mask,
+ lldb::EventSP &event_sp,
+ const Timeout<std::micro> &timeout);
+
+ size_t HandleBroadcastEvent(lldb::EventSP &event_sp);
private:
- //------------------------------------------------------------------
- // Classes that inherit from Listener can see and modify these
- //------------------------------------------------------------------
- struct BroadcasterInfo
- {
- BroadcasterInfo(uint32_t mask, HandleBroadcastCallback cb = nullptr, void *ud = nullptr) :
- event_mask (mask),
- callback (cb),
- callback_user_data (ud)
- {
- }
-
- uint32_t event_mask;
- HandleBroadcastCallback callback;
- void *callback_user_data;
- };
-
- typedef std::multimap<Broadcaster::BroadcasterImplWP,
- BroadcasterInfo,
- std::owner_less<Broadcaster::BroadcasterImplWP>> broadcaster_collection;
- typedef std::list<lldb::EventSP> event_collection;
- typedef std::vector<lldb::BroadcasterManagerWP> broadcaster_manager_collection;
-
- bool
- FindNextEventInternal(Mutex::Locker& lock,
- Broadcaster *broadcaster, // nullptr for any broadcaster
- const ConstString *sources, // nullptr for any event
- uint32_t num_sources,
- uint32_t event_type_mask,
- lldb::EventSP &event_sp,
- bool remove);
-
- bool
- GetNextEventInternal(Broadcaster *broadcaster, // nullptr for any broadcaster
- const ConstString *sources, // nullptr for any event
- uint32_t num_sources,
- uint32_t event_type_mask,
- lldb::EventSP &event_sp);
-
- bool
- WaitForEventsInternal(const TimeValue *timeout,
- Broadcaster *broadcaster, // nullptr for any broadcaster
- const ConstString *sources, // nullptr for any event
- uint32_t num_sources,
- uint32_t event_type_mask,
- lldb::EventSP &event_sp);
-
- std::string m_name;
- broadcaster_collection m_broadcasters;
- std::recursive_mutex m_broadcasters_mutex; // Protects m_broadcasters
- event_collection m_events;
- Mutex m_events_mutex; // Protects m_broadcasters and m_events
- Condition m_events_condition;
- broadcaster_manager_collection m_broadcaster_managers;
-
- void
- BroadcasterWillDestruct (Broadcaster *);
-
- void
- BroadcasterManagerWillDestruct (lldb::BroadcasterManagerSP manager_sp);
-
-
-// broadcaster_collection::iterator
-// FindBroadcasterWithMask (Broadcaster *broadcaster,
-// uint32_t event_mask,
-// bool exact);
-
- //------------------------------------------------------------------
- // For Listener only
- //------------------------------------------------------------------
- DISALLOW_COPY_AND_ASSIGN (Listener);
+ //------------------------------------------------------------------
+ // Classes that inherit from Listener can see and modify these
+ //------------------------------------------------------------------
+ struct BroadcasterInfo {
+ BroadcasterInfo(uint32_t mask, HandleBroadcastCallback cb = nullptr,
+ void *ud = nullptr)
+ : event_mask(mask), callback(cb), callback_user_data(ud) {}
+
+ uint32_t event_mask;
+ HandleBroadcastCallback callback;
+ void *callback_user_data;
+ };
+
+ typedef std::multimap<Broadcaster::BroadcasterImplWP, BroadcasterInfo,
+ std::owner_less<Broadcaster::BroadcasterImplWP>>
+ broadcaster_collection;
+ typedef std::list<lldb::EventSP> event_collection;
+ typedef std::vector<lldb::BroadcasterManagerWP>
+ broadcaster_manager_collection;
+
+ bool
+ FindNextEventInternal(std::unique_lock<std::mutex> &lock,
+ Broadcaster *broadcaster, // nullptr for any broadcaster
+ const ConstString *sources, // nullptr for any event
+ uint32_t num_sources, uint32_t event_type_mask,
+ lldb::EventSP &event_sp, bool remove);
+
+ bool GetEventInternal(const Timeout<std::micro> &timeout,
+ Broadcaster *broadcaster, // nullptr for any broadcaster
+ const ConstString *sources, // nullptr for any event
+ uint32_t num_sources, uint32_t event_type_mask,
+ lldb::EventSP &event_sp);
+
+ std::string m_name;
+ broadcaster_collection m_broadcasters;
+ std::recursive_mutex m_broadcasters_mutex; // Protects m_broadcasters
+ event_collection m_events;
+ std::mutex m_events_mutex; // Protects m_broadcasters and m_events
+ std::condition_variable m_events_condition;
+ broadcaster_manager_collection m_broadcaster_managers;
+
+ void BroadcasterWillDestruct(Broadcaster *);
+
+ void BroadcasterManagerWillDestruct(lldb::BroadcasterManagerSP manager_sp);
+
+ // broadcaster_collection::iterator
+ // FindBroadcasterWithMask (Broadcaster *broadcaster,
+ // uint32_t event_mask,
+ // bool exact);
+
+ //------------------------------------------------------------------
+ // For Listener only
+ //------------------------------------------------------------------
+ DISALLOW_COPY_AND_ASSIGN(Listener);
};
} // namespace lldb_private