95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- Queue.cpp -----------------------------------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| // C Includes
 | |
| // C++ Includes
 | |
| // Other libraries and framework includes
 | |
| // Project includes
 | |
| #include "lldb/Target/Queue.h"
 | |
| #include "lldb/Target/Process.h"
 | |
| #include "lldb/Target/QueueList.h"
 | |
| #include "lldb/Target/SystemRuntime.h"
 | |
| #include "lldb/Target/Thread.h"
 | |
| 
 | |
| using namespace lldb;
 | |
| using namespace lldb_private;
 | |
| 
 | |
| Queue::Queue(ProcessSP process_sp, lldb::queue_id_t queue_id,
 | |
|              const char *queue_name)
 | |
|     : m_process_wp(), m_queue_id(queue_id), m_queue_name(),
 | |
|       m_running_work_items_count(0), m_pending_work_items_count(0),
 | |
|       m_pending_items(), m_dispatch_queue_t_addr(LLDB_INVALID_ADDRESS),
 | |
|       m_kind(eQueueKindUnknown) {
 | |
|   if (queue_name)
 | |
|     m_queue_name = queue_name;
 | |
| 
 | |
|   m_process_wp = process_sp;
 | |
| }
 | |
| 
 | |
| Queue::~Queue() = default;
 | |
| 
 | |
| queue_id_t Queue::GetID() { return m_queue_id; }
 | |
| 
 | |
| const char *Queue::GetName() {
 | |
|   return (m_queue_name.empty() ? nullptr : m_queue_name.c_str());
 | |
| }
 | |
| 
 | |
| uint32_t Queue::GetIndexID() { return m_queue_id; }
 | |
| 
 | |
| std::vector<lldb::ThreadSP> Queue::GetThreads() {
 | |
|   std::vector<ThreadSP> result;
 | |
|   ProcessSP process_sp = m_process_wp.lock();
 | |
|   if (process_sp) {
 | |
|     for (ThreadSP thread_sp : process_sp->Threads()) {
 | |
|       if (thread_sp->GetQueueID() == m_queue_id) {
 | |
|         result.push_back(thread_sp);
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return result;
 | |
| }
 | |
| 
 | |
| void Queue::SetNumRunningWorkItems(uint32_t count) {
 | |
|   m_running_work_items_count = count;
 | |
| }
 | |
| 
 | |
| uint32_t Queue::GetNumRunningWorkItems() const {
 | |
|   return m_running_work_items_count;
 | |
| }
 | |
| 
 | |
| void Queue::SetNumPendingWorkItems(uint32_t count) {
 | |
|   m_pending_work_items_count = count;
 | |
| }
 | |
| 
 | |
| uint32_t Queue::GetNumPendingWorkItems() const {
 | |
|   return m_pending_work_items_count;
 | |
| }
 | |
| 
 | |
| void Queue::SetLibdispatchQueueAddress(addr_t dispatch_queue_t_addr) {
 | |
|   m_dispatch_queue_t_addr = dispatch_queue_t_addr;
 | |
| }
 | |
| 
 | |
| addr_t Queue::GetLibdispatchQueueAddress() const {
 | |
|   return m_dispatch_queue_t_addr;
 | |
| }
 | |
| 
 | |
| const std::vector<lldb::QueueItemSP> &Queue::GetPendingItems() {
 | |
|   if (m_pending_items.empty()) {
 | |
|     ProcessSP process_sp = m_process_wp.lock();
 | |
|     if (process_sp && process_sp->GetSystemRuntime()) {
 | |
|       process_sp->GetSystemRuntime()->PopulatePendingItemsForQueue(this);
 | |
|     }
 | |
|   }
 | |
|   return m_pending_items;
 | |
| }
 | |
| 
 | |
| lldb::QueueKind Queue::GetKind() { return m_kind; }
 | |
| 
 | |
| void Queue::SetKind(lldb::QueueKind kind) { m_kind = kind; }
 |