[Lldb-commits] [lldb] r361597 - [Utility] Small improvements to the Broadcaster class (NFC)

Jonas Devlieghere via lldb-commits lldb-commits at lists.llvm.org
Thu May 23 21:41:47 PDT 2019


Author: jdevlieghere
Date: Thu May 23 21:41:47 2019
New Revision: 361597

URL: http://llvm.org/viewvc/llvm-project?rev=361597&view=rev
Log:
[Utility] Small improvements to the Broadcaster class (NFC)

I touched the Broadcaster class earlier today (r361544) and noticed a
few things that could be improved. This patch includes variety of small
fixes: use early returns, use LLDB_LOG macro, use doxygen comments and
finally format the class.

Modified:
    lldb/trunk/include/lldb/Utility/Broadcaster.h
    lldb/trunk/source/Utility/Broadcaster.cpp

Modified: lldb/trunk/include/lldb/Utility/Broadcaster.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Utility/Broadcaster.h?rev=361597&r1=361596&r2=361597&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Utility/Broadcaster.h (original)
+++ lldb/trunk/include/lldb/Utility/Broadcaster.h Thu May 23 21:41:47 2019
@@ -29,14 +29,14 @@ class Broadcaster;
 class EventData;
 class Listener;
 class Stream;
-}
+} // namespace lldb_private
 
 namespace lldb_private {
 
-// lldb::BroadcastEventSpec
-//
-// This class is used to specify a kind of event to register for.  The Debugger
-// maintains a list of BroadcastEventSpec's and when it is made
+/// lldb::BroadcastEventSpec
+///
+/// This class is used to specify a kind of event to register for.  The
+/// Debugger maintains a list of BroadcastEventSpec's and when it is made
 class BroadcastEventSpec {
 public:
   BroadcastEventSpec(ConstString broadcaster_class, uint32_t event_bits)
@@ -48,19 +48,19 @@ public:
 
   uint32_t GetEventBits() const { return m_event_bits; }
 
-  // Tell whether this BroadcastEventSpec is contained in in_spec. That is: (a)
-  // the two spec's share the same broadcaster class (b) the event bits of this
-  // spec are wholly contained in those of in_spec.
+  /// Tell whether this BroadcastEventSpec is contained in in_spec. That is:
+  /// (a) the two spec's share the same broadcaster class (b) the event bits of
+  /// this spec are wholly contained in those of in_spec.
   bool IsContainedIn(const BroadcastEventSpec &in_spec) const {
     if (m_broadcaster_class != in_spec.GetBroadcasterClass())
       return false;
     uint32_t in_bits = in_spec.GetEventBits();
     if (in_bits == m_event_bits)
       return true;
-    else {
-      if ((m_event_bits & in_bits) != 0 && (m_event_bits & ~in_bits) == 0)
-        return true;
-    }
+
+    if ((m_event_bits & in_bits) != 0 && (m_event_bits & ~in_bits) == 0)
+      return true;
+
     return false;
   }
 
@@ -81,10 +81,9 @@ protected:
   BroadcasterManager();
 
 public:
-  // Listeners hold onto weak pointers to their broadcaster managers.  So they
-  // must be made into shared pointers, which you do with
-  // MakeBroadcasterManager.
-
+  /// Listeners hold onto weak pointers to their broadcaster managers.  So they
+  /// must be made into shared pointers, which you do with
+  /// MakeBroadcasterManager.
   static lldb::BroadcasterManagerSP MakeBroadcasterManager();
 
   ~BroadcasterManager() = default;
@@ -179,8 +178,8 @@ private:
     bool operator()(const event_listener_key &input) const {
       if (input.second == m_listener_sp)
         return true;
-      else
-        return false;
+
+      return false;
     }
 
   private:
@@ -197,15 +196,15 @@ private:
     bool operator()(const event_listener_key &input) const {
       if (input.second.get() == m_listener)
         return true;
-      else
-        return false;
+
+      return false;
     }
 
     bool operator()(const lldb::ListenerSP &input) const {
       if (input.get() == m_listener)
         return true;
-      else
-        return false;
+
+      return false;
     }
 
   private:
@@ -413,32 +412,30 @@ public:
   }
 
   /// Restore the state of the Broadcaster from a previous hijack attempt.
-  ///
   void RestoreBroadcaster() { m_broadcaster_sp->RestoreBroadcaster(); }
 
-  // This needs to be filled in if you are going to register the broadcaster
-  // with the broadcaster manager and do broadcaster class matching.
-  // FIXME: Probably should make a ManagedBroadcaster subclass with all the bits
-  // needed to work
-  // with the BroadcasterManager, so that it is clearer how to add one.
+  /// This needs to be filled in if you are going to register the broadcaster
+  /// with the broadcaster manager and do broadcaster class matching.
+  /// FIXME: Probably should make a ManagedBroadcaster subclass with all the
+  /// bits needed to work with the BroadcasterManager, so that it is clearer
+  /// how to add one.
   virtual ConstString &GetBroadcasterClass() const;
 
   lldb::BroadcasterManagerSP GetManager();
 
 protected:
-  // BroadcasterImpl contains the actual Broadcaster implementation.  The
-  // Broadcaster makes a BroadcasterImpl which lives as long as it does.  The
-  // Listeners & the Events hold a weak pointer to the BroadcasterImpl, so that
-  // they can survive if a Broadcaster they were listening to is destroyed w/o
-  // their being able to unregister from it (which can happen if the
-  // Broadcasters & Listeners are being destroyed on separate threads
-  // simultaneously. The Broadcaster itself can't be shared out as a weak
-  // pointer, because some things that are broadcasters (e.g. the Target and
-  // the Process) are shared in their own right.
-  //
-  // For the most part, the Broadcaster functions dispatch to the
-  // BroadcasterImpl, and are documented in the public Broadcaster API above.
-
+  /// BroadcasterImpl contains the actual Broadcaster implementation.  The
+  /// Broadcaster makes a BroadcasterImpl which lives as long as it does.  The
+  /// Listeners & the Events hold a weak pointer to the BroadcasterImpl, so
+  /// that they can survive if a Broadcaster they were listening to is
+  /// destroyed w/o their being able to unregister from it (which can happen if
+  /// the Broadcasters & Listeners are being destroyed on separate threads
+  /// simultaneously. The Broadcaster itself can't be shared out as a weak
+  /// pointer, because some things that are broadcasters (e.g. the Target and
+  /// the Process) are shared in their own right.
+  ///
+  /// For the most part, the Broadcaster functions dispatch to the
+  /// BroadcasterImpl, and are documented in the public Broadcaster API above.
   class BroadcasterImpl {
     friend class Listener;
     friend class Broadcaster;
@@ -505,7 +502,6 @@ protected:
 
     const char *GetHijackingListenerName();
 
-    //
     typedef llvm::SmallVector<std::pair<lldb::ListenerWP, uint32_t>, 4>
         collection;
     typedef std::map<uint32_t, std::string> event_names_map;
@@ -513,22 +509,28 @@ protected:
     llvm::SmallVector<std::pair<lldb::ListenerSP, uint32_t &>, 4>
     GetListeners();
 
-    Broadcaster &m_broadcaster;    ///< The broadcaster that this implements
-    event_names_map m_event_names; ///< Optionally define event names for
-                                   ///readability and logging for each event bit
-    collection m_listeners; ///< A list of Listener / event_mask pairs that are
-                            ///listening to this broadcaster.
-    std::recursive_mutex
-        m_listeners_mutex; ///< A mutex that protects \a m_listeners.
-    std::vector<lldb::ListenerSP> m_hijacking_listeners; // A simple mechanism
-                                                         // to intercept events
-                                                         // from a broadcaster
-    std::vector<uint32_t> m_hijacking_masks; // At some point we may want to
-                                             // have a stack or Listener
-    // collections, but for now this is just for private hijacking.
+    /// The broadcaster that this implements.
+    Broadcaster &m_broadcaster;
+
+    /// Optionally define event names for readability and logging for each
+    /// event bit.
+    event_names_map m_event_names;
+
+    /// A list of Listener / event_mask pairs that are listening to this
+    /// broadcaster.
+    collection m_listeners;
+
+    /// A mutex that protects \a m_listeners.
+    std::recursive_mutex m_listeners_mutex;
+
+    /// A simple mechanism to intercept events from a broadcaster
+    std::vector<lldb::ListenerSP> m_hijacking_listeners;
+
+    /// At some point we may want to have a stack or Listener collections, but
+    /// for now this is just for private hijacking.
+    std::vector<uint32_t> m_hijacking_masks;
 
   private:
-    // For Broadcaster only
     DISALLOW_COPY_AND_ASSIGN(BroadcasterImpl);
   };
 
@@ -540,14 +542,13 @@ protected:
   const char *GetHijackingListenerName() {
     return m_broadcaster_sp->GetHijackingListenerName();
   }
-  // Classes that inherit from Broadcaster can see and modify these
 
 private:
-  // For Broadcaster only
   BroadcasterImplSP m_broadcaster_sp;
   lldb::BroadcasterManagerSP m_manager_sp;
-  const ConstString
-      m_broadcaster_name; ///< The name of this broadcaster object.
+
+  /// The name of this broadcaster object.
+  const ConstString m_broadcaster_name;
 
   DISALLOW_COPY_AND_ASSIGN(Broadcaster);
 };

Modified: lldb/trunk/source/Utility/Broadcaster.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/Broadcaster.cpp?rev=361597&r1=361596&r2=361597&view=diff
==============================================================================
--- lldb/trunk/source/Utility/Broadcaster.cpp (original)
+++ lldb/trunk/source/Utility/Broadcaster.cpp Thu May 23 21:41:47 2019
@@ -30,9 +30,8 @@ Broadcaster::Broadcaster(BroadcasterMana
     : m_broadcaster_sp(std::make_shared<BroadcasterImpl>(*this)),
       m_manager_sp(std::move(manager_sp)), m_broadcaster_name(name) {
   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_OBJECT));
-  if (log)
-    log->Printf("%p Broadcaster::Broadcaster(\"%s\")",
-                static_cast<void *>(this), GetBroadcasterName().AsCString());
+  LLDB_LOG(log, "{0} Broadcaster::Broadcaster(\"{1}\")",
+           static_cast<void *>(this), GetBroadcasterName().AsCString());
 }
 
 Broadcaster::BroadcasterImpl::BroadcasterImpl(Broadcaster &broadcaster)
@@ -41,9 +40,8 @@ Broadcaster::BroadcasterImpl::Broadcaste
 
 Broadcaster::~Broadcaster() {
   Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_OBJECT));
-  if (log)
-    log->Printf("%p Broadcaster::~Broadcaster(\"%s\")",
-                static_cast<void *>(this), m_broadcaster_name.AsCString());
+  LLDB_LOG(log, "{0} Broadcaster::~Broadcaster(\"{1}\")",
+           static_cast<void *>(this), GetBroadcasterName().AsCString());
 
   Clear();
 }
@@ -213,8 +211,7 @@ void Broadcaster::BroadcasterImpl::Priva
       hijacking_listener_sp.reset();
   }
 
-  Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EVENTS));
-  if (log) {
+  if (Log *log = lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EVENTS)) {
     StreamString event_description;
     event_sp->Dump(&event_description);
     log->Printf("%p Broadcaster(\"%s\")::BroadcastEvent (event_sp = {%s}, "
@@ -225,18 +222,16 @@ void Broadcaster::BroadcasterImpl::Priva
   }
 
   if (hijacking_listener_sp) {
-    if (unique &&
-        hijacking_listener_sp->PeekAtNextEventForBroadcasterWithType(
-            &m_broadcaster, event_type))
+    if (unique && hijacking_listener_sp->PeekAtNextEventForBroadcasterWithType(
+                      &m_broadcaster, event_type))
       return;
     hijacking_listener_sp->AddEvent(event_sp);
   } else {
     for (auto &pair : GetListeners()) {
       if (!(pair.second & event_type))
         continue;
-      if (unique &&
-          pair.first->PeekAtNextEventForBroadcasterWithType(&m_broadcaster,
-                                                            event_type))
+      if (unique && pair.first->PeekAtNextEventForBroadcasterWithType(
+                        &m_broadcaster, event_type))
         continue;
 
       pair.first->AddEvent(event_sp);
@@ -267,11 +262,11 @@ bool Broadcaster::BroadcasterImpl::Hijac
   std::lock_guard<std::recursive_mutex> guard(m_listeners_mutex);
 
   Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EVENTS));
-  if (log)
-    log->Printf(
-        "%p Broadcaster(\"%s\")::HijackBroadcaster (listener(\"%s\")=%p)",
-        static_cast<void *>(this), GetBroadcasterName(),
-        listener_sp->m_name.c_str(), static_cast<void *>(listener_sp.get()));
+  LLDB_LOG(
+      log,
+      "{0} Broadcaster(\"{1}\")::HijackBroadcaster (listener(\"{2}\")={3})",
+      static_cast<void *>(this), GetBroadcasterName(),
+      listener_sp->m_name.c_str(), static_cast<void *>(listener_sp.get()));
   m_hijacking_listeners.push_back(listener_sp);
   m_hijacking_masks.push_back(event_mask);
   return true;
@@ -288,24 +283,22 @@ bool Broadcaster::BroadcasterImpl::IsHij
 const char *Broadcaster::BroadcasterImpl::GetHijackingListenerName() {
   if (m_hijacking_listeners.size()) {
     return m_hijacking_listeners.back()->GetName();
-  } else {
-    return nullptr;
   }
+  return nullptr;
 }
 
 void Broadcaster::BroadcasterImpl::RestoreBroadcaster() {
   std::lock_guard<std::recursive_mutex> guard(m_listeners_mutex);
 
   if (!m_hijacking_listeners.empty()) {
+    ListenerSP listener_sp = m_hijacking_listeners.back();
     Log *log(lldb_private::GetLogIfAnyCategoriesSet(LIBLLDB_LOG_EVENTS));
-    if (log) {
-      ListenerSP listener_sp = m_hijacking_listeners.back();
-      log->Printf("%p Broadcaster(\"%s\")::RestoreBroadcaster (about to pop "
-                  "listener(\"%s\")=%p)",
-                  static_cast<void *>(this), GetBroadcasterName(),
-                  listener_sp->m_name.c_str(),
-                  static_cast<void *>(listener_sp.get()));
-    }
+    LLDB_LOG(log,
+             "{0} Broadcaster(\"{1}\")::RestoreBroadcaster (about to pop "
+             "listener(\"{2}\")={3})",
+             static_cast<void *>(this), GetBroadcasterName(),
+             listener_sp->m_name.c_str(),
+             static_cast<void *>(listener_sp.get()));
     m_hijacking_listeners.pop_back();
   }
   if (!m_hijacking_masks.empty())
@@ -320,9 +313,8 @@ ConstString &Broadcaster::GetBroadcaster
 bool BroadcastEventSpec::operator<(const BroadcastEventSpec &rhs) const {
   if (GetBroadcasterClass() == rhs.GetBroadcasterClass()) {
     return GetEventBits() < rhs.GetEventBits();
-  } else {
-    return GetBroadcasterClass() < rhs.GetBroadcasterClass();
   }
+  return GetBroadcasterClass() < rhs.GetBroadcasterClass();
 }
 
 BroadcastEventSpec &BroadcastEventSpec::
@@ -378,17 +370,16 @@ bool BroadcasterManager::UnregisterListe
     iter = find_if(m_event_map.begin(), end_iter, predicate);
     if (iter == end_iter) {
       break;
-    } else {
-      uint32_t iter_event_bits = (*iter).first.GetEventBits();
-      removed_some = true;
-
-      if (event_bits_to_remove != iter_event_bits) {
-        uint32_t new_event_bits = iter_event_bits & ~event_bits_to_remove;
-        to_be_readded.push_back(BroadcastEventSpec(
-            event_spec.GetBroadcasterClass(), new_event_bits));
-      }
-      m_event_map.erase(iter);
     }
+    uint32_t iter_event_bits = (*iter).first.GetEventBits();
+    removed_some = true;
+
+    if (event_bits_to_remove != iter_event_bits) {
+      uint32_t new_event_bits = iter_event_bits & ~event_bits_to_remove;
+      to_be_readded.push_back(
+          BroadcastEventSpec(event_spec.GetBroadcasterClass(), new_event_bits));
+    }
+    m_event_map.erase(iter);
   }
 
   // Okay now add back the bits that weren't completely removed:
@@ -408,8 +399,8 @@ ListenerSP BroadcasterManager::GetListen
                  BroadcastEventSpecMatches(event_spec));
   if (iter != end_iter)
     return (*iter).second;
-  else
-    return nullptr;
+
+  return nullptr;
 }
 
 void BroadcasterManager::RemoveListener(Listener *listener) {
@@ -427,8 +418,8 @@ void BroadcasterManager::RemoveListener(
     iter = find_if(m_event_map.begin(), end_iter, predicate);
     if (iter == end_iter)
       break;
-    else
-      m_event_map.erase(iter);
+
+    m_event_map.erase(iter);
   }
 }
 
@@ -444,8 +435,8 @@ void BroadcasterManager::RemoveListener(
     iter = find_if(m_event_map.begin(), end_iter, predicate);
     if (iter == end_iter)
       break;
-    else
-      m_event_map.erase(iter);
+
+    m_event_map.erase(iter);
   }
 }
 




More information about the lldb-commits mailing list