aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/Target/QueueItem.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Target/QueueItem.h')
-rw-r--r--include/lldb/Target/QueueItem.h324
1 files changed, 140 insertions, 184 deletions
diff --git a/include/lldb/Target/QueueItem.h b/include/lldb/Target/QueueItem.h
index aea506644c37..f6378502c19c 100644
--- a/include/lldb/Target/QueueItem.h
+++ b/include/lldb/Target/QueueItem.h
@@ -18,9 +18,9 @@
// Other libraries and framework includes
// Project includes
-#include "lldb/lldb-private.h"
#include "lldb/lldb-enumerations.h"
#include "lldb/lldb-forward.h"
+#include "lldb/lldb-private.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/ConstString.h"
@@ -33,197 +33,153 @@ namespace lldb_private {
// Grand Central Dispatch (GCD) queue. Most often, this will be a
// function or block.
// "enqueued" here means that the work item has been added to a queue
-// but it has not yet started executing. When it is "dequeued",
+// but it has not yet started executing. When it is "dequeued",
// execution of the item begins.
//------------------------------------------------------------------
-class QueueItem :
- public std::enable_shared_from_this<QueueItem>
-{
+class QueueItem : public std::enable_shared_from_this<QueueItem> {
public:
- QueueItem (lldb::QueueSP queue_sp, lldb::ProcessSP process_sp, lldb::addr_t item_ref, lldb_private::Address address);
-
- ~QueueItem ();
-
- //------------------------------------------------------------------
- /// Get the kind of work item this is
- ///
- /// @return
- /// The type of work item that this QueueItem object
- /// represents. eQueueItemKindUnknown may be returned.
- //------------------------------------------------------------------
- lldb::QueueItemKind
- GetKind ();
-
- //------------------------------------------------------------------
- /// Set the type of work item this is
- ///
- /// @param [in] item_kind
- /// Set the kind of this work item object.
- //------------------------------------------------------------------
- void
- SetKind (lldb::QueueItemKind item_kind);
-
- //------------------------------------------------------------------
- /// Get the code address that will be executed when this work item
- /// is executed.
- ///
- /// @return
- /// The address that will be invoked when this work item is
- /// executed. Not all types of QueueItems will have an
- /// address associated with them; check that the returned
- /// Address is valid, or check that the WorkItemKind is a
- /// kind that involves an address, such as eQueueItemKindFunction
- /// or eQueueItemKindBlock.
- //------------------------------------------------------------------
- lldb_private::Address &
- GetAddress ();
-
- //------------------------------------------------------------------
- /// Set the work item address for this object
- ///
- /// @param [in] addr
- /// The address that will be invoked when this work item
- /// is executed.
- //------------------------------------------------------------------
- void
- SetAddress (lldb_private::Address addr);
-
- //------------------------------------------------------------------
- /// Check if this QueueItem object is valid
- ///
- /// If the weak pointer to the parent Queue cannot be revivified,
- /// it is invalid.
- ///
- /// @return
- /// True if this object is valid.
- //------------------------------------------------------------------
- bool
- IsValid ()
- {
- return m_queue_wp.lock() != nullptr;
- }
-
- //------------------------------------------------------------------
- /// Get an extended backtrace thread for this queue item, if available
- ///
- /// If the backtrace/thread information was collected when this item
- /// was enqueued, this call will provide it.
- ///
- /// @param [in] type
- /// The type of extended backtrace being requested, e.g. "libdispatch"
- /// or "pthread".
- ///
- /// @return
- /// A thread shared pointer which will have a reference to an extended
- /// thread if one was available.
- //------------------------------------------------------------------
- lldb::ThreadSP
- GetExtendedBacktraceThread (ConstString type);
-
- void
- SetItemThatEnqueuedThis (lldb::addr_t address_of_item)
- {
- m_item_that_enqueued_this_ref = address_of_item;
- }
-
- lldb::addr_t
- GetItemThatEnqueuedThis ();
-
- void
- SetEnqueueingThreadID (lldb::tid_t tid)
- {
- m_enqueueing_thread_id = tid;
- }
-
- lldb::tid_t
- GetEnqueueingThreadID ();
-
- void
- SetEnqueueingQueueID (lldb::queue_id_t qid)
- {
- m_enqueueing_queue_id = qid;
- }
-
- lldb::queue_id_t
- GetEnqueueingQueueID ();
-
- void
- SetTargetQueueID (lldb::queue_id_t qid)
- {
- m_target_queue_id = qid;
- }
-
- void
- SetStopID (uint32_t stop_id)
- {
- m_stop_id = stop_id;
- }
-
- uint32_t
- GetStopID ();
-
- void
- SetEnqueueingBacktrace (std::vector<lldb::addr_t> backtrace)
- {
- m_backtrace = backtrace;
- }
-
- std::vector<lldb::addr_t> &
- GetEnqueueingBacktrace ();
-
- void
- SetThreadLabel (std::string thread_name)
- {
- m_thread_label = thread_name;
- }
-
- std::string
- GetThreadLabel ();
-
- void
- SetQueueLabel (std::string queue_name)
- {
- m_queue_label = queue_name;
- }
-
- std::string
- GetQueueLabel ();
-
- void
- SetTargetQueueLabel (std::string queue_name)
- {
- m_target_queue_label = queue_name;
- }
-
- lldb::ProcessSP
- GetProcessSP ();
+ QueueItem(lldb::QueueSP queue_sp, lldb::ProcessSP process_sp,
+ lldb::addr_t item_ref, lldb_private::Address address);
+
+ ~QueueItem();
+
+ //------------------------------------------------------------------
+ /// Get the kind of work item this is
+ ///
+ /// @return
+ /// The type of work item that this QueueItem object
+ /// represents. eQueueItemKindUnknown may be returned.
+ //------------------------------------------------------------------
+ lldb::QueueItemKind GetKind();
+
+ //------------------------------------------------------------------
+ /// Set the type of work item this is
+ ///
+ /// @param [in] item_kind
+ /// Set the kind of this work item object.
+ //------------------------------------------------------------------
+ void SetKind(lldb::QueueItemKind item_kind);
+
+ //------------------------------------------------------------------
+ /// Get the code address that will be executed when this work item
+ /// is executed.
+ ///
+ /// @return
+ /// The address that will be invoked when this work item is
+ /// executed. Not all types of QueueItems will have an
+ /// address associated with them; check that the returned
+ /// Address is valid, or check that the WorkItemKind is a
+ /// kind that involves an address, such as eQueueItemKindFunction
+ /// or eQueueItemKindBlock.
+ //------------------------------------------------------------------
+ lldb_private::Address &GetAddress();
+
+ //------------------------------------------------------------------
+ /// Set the work item address for this object
+ ///
+ /// @param [in] addr
+ /// The address that will be invoked when this work item
+ /// is executed.
+ //------------------------------------------------------------------
+ void SetAddress(lldb_private::Address addr);
+
+ //------------------------------------------------------------------
+ /// Check if this QueueItem object is valid
+ ///
+ /// If the weak pointer to the parent Queue cannot be revivified,
+ /// it is invalid.
+ ///
+ /// @return
+ /// True if this object is valid.
+ //------------------------------------------------------------------
+ bool IsValid() { return m_queue_wp.lock() != nullptr; }
+
+ //------------------------------------------------------------------
+ /// Get an extended backtrace thread for this queue item, if available
+ ///
+ /// If the backtrace/thread information was collected when this item
+ /// was enqueued, this call will provide it.
+ ///
+ /// @param [in] type
+ /// The type of extended backtrace being requested, e.g. "libdispatch"
+ /// or "pthread".
+ ///
+ /// @return
+ /// A thread shared pointer which will have a reference to an extended
+ /// thread if one was available.
+ //------------------------------------------------------------------
+ lldb::ThreadSP GetExtendedBacktraceThread(ConstString type);
+
+ void SetItemThatEnqueuedThis(lldb::addr_t address_of_item) {
+ m_item_that_enqueued_this_ref = address_of_item;
+ }
+
+ lldb::addr_t GetItemThatEnqueuedThis();
+
+ void SetEnqueueingThreadID(lldb::tid_t tid) { m_enqueueing_thread_id = tid; }
+
+ lldb::tid_t GetEnqueueingThreadID();
+
+ void SetEnqueueingQueueID(lldb::queue_id_t qid) {
+ m_enqueueing_queue_id = qid;
+ }
+
+ lldb::queue_id_t GetEnqueueingQueueID();
+
+ void SetTargetQueueID(lldb::queue_id_t qid) { m_target_queue_id = qid; }
+
+ void SetStopID(uint32_t stop_id) { m_stop_id = stop_id; }
+
+ uint32_t GetStopID();
+
+ void SetEnqueueingBacktrace(std::vector<lldb::addr_t> backtrace) {
+ m_backtrace = backtrace;
+ }
+
+ std::vector<lldb::addr_t> &GetEnqueueingBacktrace();
+
+ void SetThreadLabel(std::string thread_name) { m_thread_label = thread_name; }
+
+ std::string GetThreadLabel();
+
+ void SetQueueLabel(std::string queue_name) { m_queue_label = queue_name; }
+
+ std::string GetQueueLabel();
+
+ void SetTargetQueueLabel(std::string queue_name) {
+ m_target_queue_label = queue_name;
+ }
+
+ lldb::ProcessSP GetProcessSP();
protected:
- void
- FetchEntireItem ();
-
- lldb::QueueWP m_queue_wp;
- lldb::ProcessWP m_process_wp;
-
- lldb::addr_t m_item_ref; // the token we can be used to fetch more information about this queue item
- lldb_private::Address m_address;
- bool m_have_fetched_entire_item;
-
- lldb::QueueItemKind m_kind;
- lldb::addr_t m_item_that_enqueued_this_ref; // a handle that we can pass into libBacktraceRecording
- // to get the QueueItem that enqueued this item
- lldb::tid_t m_enqueueing_thread_id; // thread that enqueued this item
- lldb::queue_id_t m_enqueueing_queue_id; // Queue that enqueued this item, if it was a queue
- lldb::queue_id_t m_target_queue_id;
- uint32_t m_stop_id; // indicates when this backtrace was recorded in time
- std::vector<lldb::addr_t> m_backtrace;
- std::string m_thread_label;
- std::string m_queue_label;
- std::string m_target_queue_label;
+ void FetchEntireItem();
+
+ lldb::QueueWP m_queue_wp;
+ lldb::ProcessWP m_process_wp;
+
+ lldb::addr_t m_item_ref; // the token we can be used to fetch more information
+ // about this queue item
+ lldb_private::Address m_address;
+ bool m_have_fetched_entire_item;
+
+ lldb::QueueItemKind m_kind;
+ lldb::addr_t m_item_that_enqueued_this_ref; // a handle that we can pass into
+ // libBacktraceRecording
+ // to get the QueueItem that enqueued this item
+ lldb::tid_t m_enqueueing_thread_id; // thread that enqueued this item
+ lldb::queue_id_t
+ m_enqueueing_queue_id; // Queue that enqueued this item, if it was a queue
+ lldb::queue_id_t m_target_queue_id;
+ uint32_t m_stop_id; // indicates when this backtrace was recorded in time
+ std::vector<lldb::addr_t> m_backtrace;
+ std::string m_thread_label;
+ std::string m_queue_label;
+ std::string m_target_queue_label;
private:
- DISALLOW_COPY_AND_ASSIGN (QueueItem);
+ DISALLOW_COPY_AND_ASSIGN(QueueItem);
};
} // namespace lldb_private