Queue.cpp revision 262187
1877Sache//===-- Queue.cpp -----------------------------------------------*- C++ -*-===// 21019Sache// 31019Sache// The LLVM Compiler Infrastructure 4877Sache// 51019Sache// This file is distributed under the University of Illinois Open Source 61019Sache// License. See LICENSE.TXT for details. 71019Sache// 81019Sache//===----------------------------------------------------------------------===// 91019Sache 101019Sache#include "lldb/Target/Process.h" 111019Sache#include "lldb/Target/Queue.h" 121019Sache#include "lldb/Target/QueueList.h" 13877Sache#include "lldb/Target/Thread.h" 141019Sache#include "lldb/Target/SystemRuntime.h" 151019Sache 161019Sacheusing namespace lldb; 171019Sacheusing namespace lldb_private; 181019Sache 191019SacheQueue::Queue (ProcessSP process_sp, lldb::queue_id_t queue_id, const char *queue_name) : 201019Sache m_process_wp (), 211019Sache m_queue_id (queue_id), 221019Sache m_queue_name (), 231019Sache m_running_work_items_count(0), 241019Sache m_pending_work_items_count(0), 251817Sdg m_pending_items(), 261817Sdg m_dispatch_queue_t_addr(LLDB_INVALID_ADDRESS) 27877Sache{ 28877Sache if (queue_name) 29877Sache m_queue_name = queue_name; 30877Sache 31877Sache m_process_wp = process_sp; 32877Sache} 33877Sache 34877SacheQueue::~Queue () 35877Sache{ 36877Sache} 37877Sache 38877Sachequeue_id_t 39877SacheQueue::GetID () 40877Sache{ 41877Sache return m_queue_id; 42877Sache} 43877Sache 44877Sacheconst char * 45877SacheQueue::GetName () 46877Sache{ 47877Sache const char *result = NULL; 48877Sache if (m_queue_name.size() > 0) 49877Sache result = m_queue_name.c_str(); 50877Sache return result; 51877Sache} 52877Sache 53877Sacheuint32_t 54877SacheQueue::GetIndexID () 55877Sache{ 56877Sache return m_queue_id; 57877Sache} 58877Sache 59877Sachestd::vector<lldb::ThreadSP> 60877SacheQueue::GetThreads () 61877Sache{ 62877Sache std::vector<ThreadSP> result; 63877Sache ProcessSP process_sp = m_process_wp.lock(); 64877Sache if (process_sp.get ()) 65877Sache { 66877Sache for (ThreadSP thread_sp : process_sp->Threads()) 67877Sache { 68877Sache if (thread_sp->GetQueueID() == m_queue_id) 69877Sache { 70877Sache result.push_back (thread_sp); 71877Sache } 72877Sache } 73877Sache } 74877Sache return result; 75877Sache} 76877Sache 77877Sachevoid 78877SacheQueue::SetNumRunningWorkItems (uint32_t count) 79877Sache{ 80877Sache m_running_work_items_count = count; 81877Sache} 82877Sache 83877Sacheuint32_t 84877SacheQueue::GetNumRunningWorkItems () const 85877Sache{ 86877Sache return m_running_work_items_count; 87877Sache} 88877Sache 89877Sache 90877Sachevoid 91877SacheQueue::SetNumPendingWorkItems (uint32_t count) 92877Sache{ 93891Sache m_pending_work_items_count = count; 94891Sache} 95877Sache 96877Sacheuint32_t 97877SacheQueue::GetNumPendingWorkItems () const 98877Sache{ 99877Sache return m_pending_work_items_count; 100877Sache} 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