Queue.cpp revision 269024
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{ 28 if (queue_name) 29 m_queue_name = queue_name; 30 31 m_process_wp = process_sp; 32} 33 34Queue::~Queue () 35{ 36} 37 38queue_id_t 39Queue::GetID () 40{ 41 return m_queue_id; 42} 43 44const char * 45Queue::GetName () 46{ 47 const char *result = NULL; 48 if (m_queue_name.size() > 0) 49 result = m_queue_name.c_str(); 50 return result; 51} 52 53uint32_t 54Queue::GetIndexID () 55{ 56 return m_queue_id; 57} 58 59std::vector<lldb::ThreadSP> 60Queue::GetThreads () 61{ 62 std::vector<ThreadSP> result; 63 ProcessSP process_sp = m_process_wp.lock(); 64 if (process_sp.get ()) 65 { 66 for (ThreadSP thread_sp : process_sp->Threads()) 67 { 68 if (thread_sp->GetQueueID() == m_queue_id) 69 { 70 result.push_back (thread_sp); 71 } 72 } 73 } 74 return result; 75} 76 77void 78Queue::SetNumRunningWorkItems (uint32_t count) 79{ 80 m_running_work_items_count = count; 81} 82 83uint32_t 84Queue::GetNumRunningWorkItems () const 85{ 86 return m_running_work_items_count; 87} 88 89 90void 91Queue::SetNumPendingWorkItems (uint32_t count) 92{ 93 m_pending_work_items_count = count; 94} 95 96uint32_t 97Queue::GetNumPendingWorkItems () const 98{ 99 return m_pending_work_items_count; 100} 101 102void 103Queue::SetLibdispatchQueueAddress (addr_t dispatch_queue_t_addr) 104{ 105 m_dispatch_queue_t_addr = dispatch_queue_t_addr; 106} 107 108addr_t 109Queue::GetLibdispatchQueueAddress () const 110{ 111 return m_dispatch_queue_t_addr; 112} 113 114 115const std::vector<lldb::QueueItemSP> & 116Queue::GetPendingItems () 117{ 118 if (m_pending_items.size() == 0) 119 { 120 ProcessSP process_sp = m_process_wp.lock(); 121 if (process_sp && process_sp->GetSystemRuntime()) 122 { 123 process_sp->GetSystemRuntime()->PopulatePendingItemsForQueue (this); 124 } 125 } 126 return m_pending_items; 127} 128