Queue.cpp revision 276479
1//===-- Queue.cpp -----------------------------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10#include "lldb/Target/Process.h" 11#include "lldb/Target/Queue.h" 12#include "lldb/Target/QueueList.h" 13#include "lldb/Target/Thread.h" 14#include "lldb/Target/SystemRuntime.h" 15 16using namespace lldb; 17using namespace lldb_private; 18 19Queue::Queue (ProcessSP process_sp, lldb::queue_id_t queue_id, const char *queue_name) : 20 m_process_wp (), 21 m_queue_id (queue_id), 22 m_queue_name (), 23 m_running_work_items_count(0), 24 m_pending_work_items_count(0), 25 m_pending_items(), 26 m_dispatch_queue_t_addr(LLDB_INVALID_ADDRESS), 27 m_kind (eQueueKindUnknown) 28{ 29 if (queue_name) 30 m_queue_name = queue_name; 31 32 m_process_wp = process_sp; 33} 34 35Queue::~Queue () 36{ 37} 38 39queue_id_t 40Queue::GetID () 41{ 42 return m_queue_id; 43} 44 45const char * 46Queue::GetName () 47{ 48 const char *result = NULL; 49 if (m_queue_name.size() > 0) 50 result = m_queue_name.c_str(); 51 return result; 52} 53 54uint32_t 55Queue::GetIndexID () 56{ 57 return m_queue_id; 58} 59 60std::vector<lldb::ThreadSP> 61Queue::GetThreads () 62{ 63 std::vector<ThreadSP> result; 64 ProcessSP process_sp = m_process_wp.lock(); 65 if (process_sp.get ()) 66 { 67 for (ThreadSP thread_sp : process_sp->Threads()) 68 { 69 if (thread_sp->GetQueueID() == m_queue_id) 70 { 71 result.push_back (thread_sp); 72 } 73 } 74 } 75 return result; 76} 77 78void 79Queue::SetNumRunningWorkItems (uint32_t count) 80{ 81 m_running_work_items_count = count; 82} 83 84uint32_t 85Queue::GetNumRunningWorkItems () const 86{ 87 return m_running_work_items_count; 88} 89 90 91void 92Queue::SetNumPendingWorkItems (uint32_t count) 93{ 94 m_pending_work_items_count = count; 95} 96 97uint32_t 98Queue::GetNumPendingWorkItems () const 99{ 100 return m_pending_work_items_count; 101} 102 103void 104Queue::SetLibdispatchQueueAddress (addr_t dispatch_queue_t_addr) 105{ 106 m_dispatch_queue_t_addr = dispatch_queue_t_addr; 107} 108 109addr_t 110Queue::GetLibdispatchQueueAddress () const 111{ 112 return m_dispatch_queue_t_addr; 113} 114 115 116const std::vector<lldb::QueueItemSP> & 117Queue::GetPendingItems () 118{ 119 if (m_pending_items.size() == 0) 120 { 121 ProcessSP process_sp = m_process_wp.lock(); 122 if (process_sp && process_sp->GetSystemRuntime()) 123 { 124 process_sp->GetSystemRuntime()->PopulatePendingItemsForQueue (this); 125 } 126 } 127 return m_pending_items; 128} 129 130lldb::QueueKind 131Queue::GetKind () 132{ 133 return m_kind; 134} 135 136void 137Queue::SetKind (lldb::QueueKind kind) 138{ 139 m_kind = kind; 140} 141