15ffd83dbSDimitry Andric //===-- SBQueue.cpp -------------------------------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric
9*5f7ddb14SDimitry Andric #include <cinttypes>
100b57cec5SDimitry Andric
110b57cec5SDimitry Andric #include "SBReproducerPrivate.h"
120b57cec5SDimitry Andric #include "lldb/API/SBQueue.h"
130b57cec5SDimitry Andric
140b57cec5SDimitry Andric #include "lldb/API/SBProcess.h"
150b57cec5SDimitry Andric #include "lldb/API/SBQueueItem.h"
160b57cec5SDimitry Andric #include "lldb/API/SBThread.h"
170b57cec5SDimitry Andric
180b57cec5SDimitry Andric #include "lldb/Target/Process.h"
190b57cec5SDimitry Andric #include "lldb/Target/Queue.h"
200b57cec5SDimitry Andric #include "lldb/Target/QueueItem.h"
210b57cec5SDimitry Andric #include "lldb/Target/Thread.h"
220b57cec5SDimitry Andric
230b57cec5SDimitry Andric using namespace lldb;
240b57cec5SDimitry Andric using namespace lldb_private;
250b57cec5SDimitry Andric
260b57cec5SDimitry Andric namespace lldb_private {
270b57cec5SDimitry Andric
280b57cec5SDimitry Andric class QueueImpl {
290b57cec5SDimitry Andric public:
QueueImpl()30*5f7ddb14SDimitry Andric QueueImpl() : m_queue_wp(), m_threads(), m_pending_items() {}
310b57cec5SDimitry Andric
QueueImpl(const lldb::QueueSP & queue_sp)320b57cec5SDimitry Andric QueueImpl(const lldb::QueueSP &queue_sp)
330b57cec5SDimitry Andric : m_queue_wp(), m_threads(), m_thread_list_fetched(false),
340b57cec5SDimitry Andric m_pending_items(), m_pending_items_fetched(false) {
350b57cec5SDimitry Andric m_queue_wp = queue_sp;
360b57cec5SDimitry Andric }
370b57cec5SDimitry Andric
QueueImpl(const QueueImpl & rhs)380b57cec5SDimitry Andric QueueImpl(const QueueImpl &rhs) {
390b57cec5SDimitry Andric if (&rhs == this)
400b57cec5SDimitry Andric return;
410b57cec5SDimitry Andric m_queue_wp = rhs.m_queue_wp;
420b57cec5SDimitry Andric m_threads = rhs.m_threads;
430b57cec5SDimitry Andric m_thread_list_fetched = rhs.m_thread_list_fetched;
440b57cec5SDimitry Andric m_pending_items = rhs.m_pending_items;
450b57cec5SDimitry Andric m_pending_items_fetched = rhs.m_pending_items_fetched;
460b57cec5SDimitry Andric }
470b57cec5SDimitry Andric
485ffd83dbSDimitry Andric ~QueueImpl() = default;
490b57cec5SDimitry Andric
IsValid()500b57cec5SDimitry Andric bool IsValid() { return m_queue_wp.lock() != nullptr; }
510b57cec5SDimitry Andric
Clear()520b57cec5SDimitry Andric void Clear() {
530b57cec5SDimitry Andric m_queue_wp.reset();
540b57cec5SDimitry Andric m_thread_list_fetched = false;
550b57cec5SDimitry Andric m_threads.clear();
560b57cec5SDimitry Andric m_pending_items_fetched = false;
570b57cec5SDimitry Andric m_pending_items.clear();
580b57cec5SDimitry Andric }
590b57cec5SDimitry Andric
SetQueue(const lldb::QueueSP & queue_sp)600b57cec5SDimitry Andric void SetQueue(const lldb::QueueSP &queue_sp) {
610b57cec5SDimitry Andric Clear();
620b57cec5SDimitry Andric m_queue_wp = queue_sp;
630b57cec5SDimitry Andric }
640b57cec5SDimitry Andric
GetQueueID() const650b57cec5SDimitry Andric lldb::queue_id_t GetQueueID() const {
660b57cec5SDimitry Andric lldb::queue_id_t result = LLDB_INVALID_QUEUE_ID;
670b57cec5SDimitry Andric lldb::QueueSP queue_sp = m_queue_wp.lock();
680b57cec5SDimitry Andric if (queue_sp) {
690b57cec5SDimitry Andric result = queue_sp->GetID();
700b57cec5SDimitry Andric }
710b57cec5SDimitry Andric return result;
720b57cec5SDimitry Andric }
730b57cec5SDimitry Andric
GetIndexID() const740b57cec5SDimitry Andric uint32_t GetIndexID() const {
750b57cec5SDimitry Andric uint32_t result = LLDB_INVALID_INDEX32;
760b57cec5SDimitry Andric lldb::QueueSP queue_sp = m_queue_wp.lock();
770b57cec5SDimitry Andric if (queue_sp) {
780b57cec5SDimitry Andric result = queue_sp->GetIndexID();
790b57cec5SDimitry Andric }
800b57cec5SDimitry Andric return result;
810b57cec5SDimitry Andric }
820b57cec5SDimitry Andric
GetName() const830b57cec5SDimitry Andric const char *GetName() const {
840b57cec5SDimitry Andric const char *name = nullptr;
850b57cec5SDimitry Andric lldb::QueueSP queue_sp = m_queue_wp.lock();
860b57cec5SDimitry Andric if (queue_sp.get()) {
870b57cec5SDimitry Andric name = queue_sp->GetName();
880b57cec5SDimitry Andric }
890b57cec5SDimitry Andric return name;
900b57cec5SDimitry Andric }
910b57cec5SDimitry Andric
FetchThreads()920b57cec5SDimitry Andric void FetchThreads() {
930b57cec5SDimitry Andric if (!m_thread_list_fetched) {
940b57cec5SDimitry Andric lldb::QueueSP queue_sp = m_queue_wp.lock();
950b57cec5SDimitry Andric if (queue_sp) {
960b57cec5SDimitry Andric Process::StopLocker stop_locker;
970b57cec5SDimitry Andric if (stop_locker.TryLock(&queue_sp->GetProcess()->GetRunLock())) {
980b57cec5SDimitry Andric const std::vector<ThreadSP> thread_list(queue_sp->GetThreads());
990b57cec5SDimitry Andric m_thread_list_fetched = true;
1000b57cec5SDimitry Andric const uint32_t num_threads = thread_list.size();
1010b57cec5SDimitry Andric for (uint32_t idx = 0; idx < num_threads; ++idx) {
1020b57cec5SDimitry Andric ThreadSP thread_sp = thread_list[idx];
1030b57cec5SDimitry Andric if (thread_sp && thread_sp->IsValid()) {
1040b57cec5SDimitry Andric m_threads.push_back(thread_sp);
1050b57cec5SDimitry Andric }
1060b57cec5SDimitry Andric }
1070b57cec5SDimitry Andric }
1080b57cec5SDimitry Andric }
1090b57cec5SDimitry Andric }
1100b57cec5SDimitry Andric }
1110b57cec5SDimitry Andric
FetchItems()1120b57cec5SDimitry Andric void FetchItems() {
1130b57cec5SDimitry Andric if (!m_pending_items_fetched) {
1140b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
1150b57cec5SDimitry Andric if (queue_sp) {
1160b57cec5SDimitry Andric Process::StopLocker stop_locker;
1170b57cec5SDimitry Andric if (stop_locker.TryLock(&queue_sp->GetProcess()->GetRunLock())) {
1180b57cec5SDimitry Andric const std::vector<QueueItemSP> queue_items(
1190b57cec5SDimitry Andric queue_sp->GetPendingItems());
1200b57cec5SDimitry Andric m_pending_items_fetched = true;
1210b57cec5SDimitry Andric const uint32_t num_pending_items = queue_items.size();
1220b57cec5SDimitry Andric for (uint32_t idx = 0; idx < num_pending_items; ++idx) {
1230b57cec5SDimitry Andric QueueItemSP item = queue_items[idx];
1240b57cec5SDimitry Andric if (item && item->IsValid()) {
1250b57cec5SDimitry Andric m_pending_items.push_back(item);
1260b57cec5SDimitry Andric }
1270b57cec5SDimitry Andric }
1280b57cec5SDimitry Andric }
1290b57cec5SDimitry Andric }
1300b57cec5SDimitry Andric }
1310b57cec5SDimitry Andric }
1320b57cec5SDimitry Andric
GetNumThreads()1330b57cec5SDimitry Andric uint32_t GetNumThreads() {
1340b57cec5SDimitry Andric uint32_t result = 0;
1350b57cec5SDimitry Andric
1360b57cec5SDimitry Andric FetchThreads();
1370b57cec5SDimitry Andric if (m_thread_list_fetched) {
1380b57cec5SDimitry Andric result = m_threads.size();
1390b57cec5SDimitry Andric }
1400b57cec5SDimitry Andric return result;
1410b57cec5SDimitry Andric }
1420b57cec5SDimitry Andric
GetThreadAtIndex(uint32_t idx)1430b57cec5SDimitry Andric lldb::SBThread GetThreadAtIndex(uint32_t idx) {
1440b57cec5SDimitry Andric FetchThreads();
1450b57cec5SDimitry Andric
1460b57cec5SDimitry Andric SBThread sb_thread;
1470b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
1480b57cec5SDimitry Andric if (queue_sp && idx < m_threads.size()) {
1490b57cec5SDimitry Andric ProcessSP process_sp = queue_sp->GetProcess();
1500b57cec5SDimitry Andric if (process_sp) {
1510b57cec5SDimitry Andric ThreadSP thread_sp = m_threads[idx].lock();
1520b57cec5SDimitry Andric if (thread_sp) {
1530b57cec5SDimitry Andric sb_thread.SetThread(thread_sp);
1540b57cec5SDimitry Andric }
1550b57cec5SDimitry Andric }
1560b57cec5SDimitry Andric }
1570b57cec5SDimitry Andric return sb_thread;
1580b57cec5SDimitry Andric }
1590b57cec5SDimitry Andric
GetNumPendingItems()1600b57cec5SDimitry Andric uint32_t GetNumPendingItems() {
1610b57cec5SDimitry Andric uint32_t result = 0;
1620b57cec5SDimitry Andric
1630b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
1640b57cec5SDimitry Andric if (!m_pending_items_fetched && queue_sp) {
1650b57cec5SDimitry Andric result = queue_sp->GetNumPendingWorkItems();
1660b57cec5SDimitry Andric } else {
1670b57cec5SDimitry Andric result = m_pending_items.size();
1680b57cec5SDimitry Andric }
1690b57cec5SDimitry Andric return result;
1700b57cec5SDimitry Andric }
1710b57cec5SDimitry Andric
GetPendingItemAtIndex(uint32_t idx)1720b57cec5SDimitry Andric lldb::SBQueueItem GetPendingItemAtIndex(uint32_t idx) {
1730b57cec5SDimitry Andric SBQueueItem result;
1740b57cec5SDimitry Andric FetchItems();
1750b57cec5SDimitry Andric if (m_pending_items_fetched && idx < m_pending_items.size()) {
1760b57cec5SDimitry Andric result.SetQueueItem(m_pending_items[idx]);
1770b57cec5SDimitry Andric }
1780b57cec5SDimitry Andric return result;
1790b57cec5SDimitry Andric }
1800b57cec5SDimitry Andric
GetNumRunningItems()1810b57cec5SDimitry Andric uint32_t GetNumRunningItems() {
1820b57cec5SDimitry Andric uint32_t result = 0;
1830b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
1840b57cec5SDimitry Andric if (queue_sp)
1850b57cec5SDimitry Andric result = queue_sp->GetNumRunningWorkItems();
1860b57cec5SDimitry Andric return result;
1870b57cec5SDimitry Andric }
1880b57cec5SDimitry Andric
GetProcess()1890b57cec5SDimitry Andric lldb::SBProcess GetProcess() {
1900b57cec5SDimitry Andric SBProcess result;
1910b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
1920b57cec5SDimitry Andric if (queue_sp) {
1930b57cec5SDimitry Andric result.SetSP(queue_sp->GetProcess());
1940b57cec5SDimitry Andric }
1950b57cec5SDimitry Andric return result;
1960b57cec5SDimitry Andric }
1970b57cec5SDimitry Andric
GetKind()1980b57cec5SDimitry Andric lldb::QueueKind GetKind() {
1990b57cec5SDimitry Andric lldb::QueueKind kind = eQueueKindUnknown;
2000b57cec5SDimitry Andric QueueSP queue_sp = m_queue_wp.lock();
2010b57cec5SDimitry Andric if (queue_sp)
2020b57cec5SDimitry Andric kind = queue_sp->GetKind();
2030b57cec5SDimitry Andric
2040b57cec5SDimitry Andric return kind;
2050b57cec5SDimitry Andric }
2060b57cec5SDimitry Andric
2070b57cec5SDimitry Andric private:
2080b57cec5SDimitry Andric lldb::QueueWP m_queue_wp;
2090b57cec5SDimitry Andric std::vector<lldb::ThreadWP>
2100b57cec5SDimitry Andric m_threads; // threads currently executing this queue's items
211*5f7ddb14SDimitry Andric bool m_thread_list_fetched =
212*5f7ddb14SDimitry Andric false; // have we tried to fetch the threads list already?
2130b57cec5SDimitry Andric std::vector<lldb::QueueItemSP> m_pending_items; // items currently enqueued
214*5f7ddb14SDimitry Andric bool m_pending_items_fetched =
215*5f7ddb14SDimitry Andric false; // have we tried to fetch the item list already?
2160b57cec5SDimitry Andric };
2170b57cec5SDimitry Andric }
2180b57cec5SDimitry Andric
SBQueue()2190b57cec5SDimitry Andric SBQueue::SBQueue() : m_opaque_sp(new QueueImpl()) {
2200b57cec5SDimitry Andric LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBQueue);
2210b57cec5SDimitry Andric }
2220b57cec5SDimitry Andric
SBQueue(const QueueSP & queue_sp)2230b57cec5SDimitry Andric SBQueue::SBQueue(const QueueSP &queue_sp)
2240b57cec5SDimitry Andric : m_opaque_sp(new QueueImpl(queue_sp)) {
2250b57cec5SDimitry Andric LLDB_RECORD_CONSTRUCTOR(SBQueue, (const lldb::QueueSP &), queue_sp);
2260b57cec5SDimitry Andric }
2270b57cec5SDimitry Andric
SBQueue(const SBQueue & rhs)2280b57cec5SDimitry Andric SBQueue::SBQueue(const SBQueue &rhs) {
2290b57cec5SDimitry Andric LLDB_RECORD_CONSTRUCTOR(SBQueue, (const lldb::SBQueue &), rhs);
2300b57cec5SDimitry Andric
2310b57cec5SDimitry Andric if (&rhs == this)
2320b57cec5SDimitry Andric return;
2330b57cec5SDimitry Andric
2340b57cec5SDimitry Andric m_opaque_sp = rhs.m_opaque_sp;
2350b57cec5SDimitry Andric }
2360b57cec5SDimitry Andric
operator =(const lldb::SBQueue & rhs)2370b57cec5SDimitry Andric const lldb::SBQueue &SBQueue::operator=(const lldb::SBQueue &rhs) {
2380b57cec5SDimitry Andric LLDB_RECORD_METHOD(const lldb::SBQueue &,
2390b57cec5SDimitry Andric SBQueue, operator=,(const lldb::SBQueue &), rhs);
2400b57cec5SDimitry Andric
2410b57cec5SDimitry Andric m_opaque_sp = rhs.m_opaque_sp;
2420b57cec5SDimitry Andric return LLDB_RECORD_RESULT(*this);
2430b57cec5SDimitry Andric }
2440b57cec5SDimitry Andric
2455ffd83dbSDimitry Andric SBQueue::~SBQueue() = default;
2460b57cec5SDimitry Andric
IsValid() const2470b57cec5SDimitry Andric bool SBQueue::IsValid() const {
2480b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBQueue, IsValid);
2490b57cec5SDimitry Andric return this->operator bool();
2500b57cec5SDimitry Andric }
operator bool() const2510b57cec5SDimitry Andric SBQueue::operator bool() const {
2520b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBQueue, operator bool);
2530b57cec5SDimitry Andric
2540b57cec5SDimitry Andric return m_opaque_sp->IsValid();
2550b57cec5SDimitry Andric }
2560b57cec5SDimitry Andric
Clear()2570b57cec5SDimitry Andric void SBQueue::Clear() {
2580b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(void, SBQueue, Clear);
2590b57cec5SDimitry Andric
2600b57cec5SDimitry Andric m_opaque_sp->Clear();
2610b57cec5SDimitry Andric }
2620b57cec5SDimitry Andric
SetQueue(const QueueSP & queue_sp)2630b57cec5SDimitry Andric void SBQueue::SetQueue(const QueueSP &queue_sp) {
2640b57cec5SDimitry Andric m_opaque_sp->SetQueue(queue_sp);
2650b57cec5SDimitry Andric }
2660b57cec5SDimitry Andric
GetQueueID() const2670b57cec5SDimitry Andric lldb::queue_id_t SBQueue::GetQueueID() const {
2680b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::queue_id_t, SBQueue, GetQueueID);
2690b57cec5SDimitry Andric
2700b57cec5SDimitry Andric return m_opaque_sp->GetQueueID();
2710b57cec5SDimitry Andric }
2720b57cec5SDimitry Andric
GetIndexID() const2730b57cec5SDimitry Andric uint32_t SBQueue::GetIndexID() const {
2740b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBQueue, GetIndexID);
2750b57cec5SDimitry Andric
2760b57cec5SDimitry Andric uint32_t index_id = m_opaque_sp->GetIndexID();
2770b57cec5SDimitry Andric return index_id;
2780b57cec5SDimitry Andric }
2790b57cec5SDimitry Andric
GetName() const2800b57cec5SDimitry Andric const char *SBQueue::GetName() const {
2810b57cec5SDimitry Andric LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBQueue, GetName);
2820b57cec5SDimitry Andric
2830b57cec5SDimitry Andric return m_opaque_sp->GetName();
2840b57cec5SDimitry Andric }
2850b57cec5SDimitry Andric
GetNumThreads()2860b57cec5SDimitry Andric uint32_t SBQueue::GetNumThreads() {
2870b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumThreads);
2880b57cec5SDimitry Andric
2890b57cec5SDimitry Andric return m_opaque_sp->GetNumThreads();
2900b57cec5SDimitry Andric }
2910b57cec5SDimitry Andric
GetThreadAtIndex(uint32_t idx)2920b57cec5SDimitry Andric SBThread SBQueue::GetThreadAtIndex(uint32_t idx) {
2930b57cec5SDimitry Andric LLDB_RECORD_METHOD(lldb::SBThread, SBQueue, GetThreadAtIndex, (uint32_t),
2940b57cec5SDimitry Andric idx);
2950b57cec5SDimitry Andric
2960b57cec5SDimitry Andric SBThread th = m_opaque_sp->GetThreadAtIndex(idx);
2970b57cec5SDimitry Andric return LLDB_RECORD_RESULT(th);
2980b57cec5SDimitry Andric }
2990b57cec5SDimitry Andric
GetNumPendingItems()3000b57cec5SDimitry Andric uint32_t SBQueue::GetNumPendingItems() {
3010b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumPendingItems);
3020b57cec5SDimitry Andric
3030b57cec5SDimitry Andric return m_opaque_sp->GetNumPendingItems();
3040b57cec5SDimitry Andric }
3050b57cec5SDimitry Andric
GetPendingItemAtIndex(uint32_t idx)3060b57cec5SDimitry Andric SBQueueItem SBQueue::GetPendingItemAtIndex(uint32_t idx) {
3070b57cec5SDimitry Andric LLDB_RECORD_METHOD(lldb::SBQueueItem, SBQueue, GetPendingItemAtIndex,
3080b57cec5SDimitry Andric (uint32_t), idx);
3090b57cec5SDimitry Andric
3100b57cec5SDimitry Andric return LLDB_RECORD_RESULT(m_opaque_sp->GetPendingItemAtIndex(idx));
3110b57cec5SDimitry Andric }
3120b57cec5SDimitry Andric
GetNumRunningItems()3130b57cec5SDimitry Andric uint32_t SBQueue::GetNumRunningItems() {
3140b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumRunningItems);
3150b57cec5SDimitry Andric
3160b57cec5SDimitry Andric return m_opaque_sp->GetNumRunningItems();
3170b57cec5SDimitry Andric }
3180b57cec5SDimitry Andric
GetProcess()3190b57cec5SDimitry Andric SBProcess SBQueue::GetProcess() {
3200b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::SBProcess, SBQueue, GetProcess);
3210b57cec5SDimitry Andric
3220b57cec5SDimitry Andric return LLDB_RECORD_RESULT(m_opaque_sp->GetProcess());
3230b57cec5SDimitry Andric }
3240b57cec5SDimitry Andric
GetKind()3250b57cec5SDimitry Andric lldb::QueueKind SBQueue::GetKind() {
3260b57cec5SDimitry Andric LLDB_RECORD_METHOD_NO_ARGS(lldb::QueueKind, SBQueue, GetKind);
3270b57cec5SDimitry Andric
3280b57cec5SDimitry Andric return m_opaque_sp->GetKind();
3290b57cec5SDimitry Andric }
3300b57cec5SDimitry Andric
3310b57cec5SDimitry Andric namespace lldb_private {
3320b57cec5SDimitry Andric namespace repro {
3330b57cec5SDimitry Andric
3340b57cec5SDimitry Andric template <>
RegisterMethods(Registry & R)3350b57cec5SDimitry Andric void RegisterMethods<SBQueue>(Registry &R) {
3360b57cec5SDimitry Andric LLDB_REGISTER_CONSTRUCTOR(SBQueue, ());
3370b57cec5SDimitry Andric LLDB_REGISTER_CONSTRUCTOR(SBQueue, (const lldb::QueueSP &));
3380b57cec5SDimitry Andric LLDB_REGISTER_CONSTRUCTOR(SBQueue, (const lldb::SBQueue &));
3390b57cec5SDimitry Andric LLDB_REGISTER_METHOD(const lldb::SBQueue &,
3400b57cec5SDimitry Andric SBQueue, operator=,(const lldb::SBQueue &));
3410b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(bool, SBQueue, IsValid, ());
3420b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(bool, SBQueue, operator bool, ());
3430b57cec5SDimitry Andric LLDB_REGISTER_METHOD(void, SBQueue, Clear, ());
3440b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(lldb::queue_id_t, SBQueue, GetQueueID, ());
3450b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(uint32_t, SBQueue, GetIndexID, ());
3460b57cec5SDimitry Andric LLDB_REGISTER_METHOD_CONST(const char *, SBQueue, GetName, ());
3470b57cec5SDimitry Andric LLDB_REGISTER_METHOD(uint32_t, SBQueue, GetNumThreads, ());
3480b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBThread, SBQueue, GetThreadAtIndex, (uint32_t));
3490b57cec5SDimitry Andric LLDB_REGISTER_METHOD(uint32_t, SBQueue, GetNumPendingItems, ());
3500b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBQueueItem, SBQueue, GetPendingItemAtIndex,
3510b57cec5SDimitry Andric (uint32_t));
3520b57cec5SDimitry Andric LLDB_REGISTER_METHOD(uint32_t, SBQueue, GetNumRunningItems, ());
3530b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::SBProcess, SBQueue, GetProcess, ());
3540b57cec5SDimitry Andric LLDB_REGISTER_METHOD(lldb::QueueKind, SBQueue, GetKind, ());
3550b57cec5SDimitry Andric }
3560b57cec5SDimitry Andric
3570b57cec5SDimitry Andric }
3580b57cec5SDimitry Andric }
359