Path: blob/main/contrib/llvm-project/lldb/source/Target/Queue.cpp
39587 views
//===-- Queue.cpp ---------------------------------------------------------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "lldb/Target/Queue.h"9#include "lldb/Target/Process.h"10#include "lldb/Target/QueueList.h"11#include "lldb/Target/SystemRuntime.h"12#include "lldb/Target/Thread.h"1314using namespace lldb;15using namespace lldb_private;1617Queue::Queue(ProcessSP process_sp, lldb::queue_id_t queue_id,18const char *queue_name)19: m_process_wp(), m_queue_id(queue_id), m_queue_name(),20m_running_work_items_count(0), m_pending_work_items_count(0),21m_pending_items(), m_dispatch_queue_t_addr(LLDB_INVALID_ADDRESS),22m_kind(eQueueKindUnknown) {23if (queue_name)24m_queue_name = queue_name;2526m_process_wp = process_sp;27}2829Queue::~Queue() = default;3031queue_id_t Queue::GetID() { return m_queue_id; }3233const char *Queue::GetName() {34return (m_queue_name.empty() ? nullptr : m_queue_name.c_str());35}3637uint32_t Queue::GetIndexID() { return m_queue_id; }3839std::vector<lldb::ThreadSP> Queue::GetThreads() {40std::vector<ThreadSP> result;41ProcessSP process_sp = m_process_wp.lock();42if (process_sp) {43for (ThreadSP thread_sp : process_sp->Threads()) {44if (thread_sp->GetQueueID() == m_queue_id) {45result.push_back(thread_sp);46}47}48}49return result;50}5152void Queue::SetNumRunningWorkItems(uint32_t count) {53m_running_work_items_count = count;54}5556uint32_t Queue::GetNumRunningWorkItems() const {57return m_running_work_items_count;58}5960void Queue::SetNumPendingWorkItems(uint32_t count) {61m_pending_work_items_count = count;62}6364uint32_t Queue::GetNumPendingWorkItems() const {65return m_pending_work_items_count;66}6768void Queue::SetLibdispatchQueueAddress(addr_t dispatch_queue_t_addr) {69m_dispatch_queue_t_addr = dispatch_queue_t_addr;70}7172addr_t Queue::GetLibdispatchQueueAddress() const {73return m_dispatch_queue_t_addr;74}7576const std::vector<lldb::QueueItemSP> &Queue::GetPendingItems() {77if (m_pending_items.empty()) {78ProcessSP process_sp = m_process_wp.lock();79if (process_sp && process_sp->GetSystemRuntime()) {80process_sp->GetSystemRuntime()->PopulatePendingItemsForQueue(this);81}82}83return m_pending_items;84}8586lldb::QueueKind Queue::GetKind() { return m_kind; }8788void Queue::SetKind(lldb::QueueKind kind) { m_kind = kind; }899091