15e8dce4dSJason Molenda //===-- SBQueue.cpp ---------------------------------------------*- C++ -*-===// 25e8dce4dSJason Molenda // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65e8dce4dSJason Molenda // 75e8dce4dSJason Molenda //===----------------------------------------------------------------------===// 85e8dce4dSJason Molenda 9da0fc76eSVirgile Bello #include <inttypes.h> 10da0fc76eSVirgile Bello 11*baf5664fSJonas Devlieghere #include "SBReproducerPrivate.h" 125e8dce4dSJason Molenda #include "lldb/API/SBQueue.h" 135e8dce4dSJason Molenda 145e8dce4dSJason Molenda #include "lldb/API/SBProcess.h" 15b9ffa98cSJason Molenda #include "lldb/API/SBQueueItem.h" 16b9c1b51eSKate Stone #include "lldb/API/SBThread.h" 17b9ffa98cSJason Molenda 185e8dce4dSJason Molenda #include "lldb/Target/Process.h" 195e8dce4dSJason Molenda #include "lldb/Target/Queue.h" 205e8dce4dSJason Molenda #include "lldb/Target/QueueItem.h" 215e8dce4dSJason Molenda #include "lldb/Target/Thread.h" 226f9e6901SZachary Turner #include "lldb/Utility/Log.h" 235e8dce4dSJason Molenda 245e8dce4dSJason Molenda using namespace lldb; 255e8dce4dSJason Molenda using namespace lldb_private; 265e8dce4dSJason Molenda 27b9c1b51eSKate Stone namespace lldb_private { 28c8064ac6SJason Molenda 29b9c1b51eSKate Stone class QueueImpl { 30c8064ac6SJason Molenda public: 31b9c1b51eSKate Stone QueueImpl() 32b9c1b51eSKate Stone : m_queue_wp(), m_threads(), m_thread_list_fetched(false), 33b9c1b51eSKate Stone m_pending_items(), m_pending_items_fetched(false) {} 345e8dce4dSJason Molenda 35b9c1b51eSKate Stone QueueImpl(const lldb::QueueSP &queue_sp) 36b9c1b51eSKate Stone : m_queue_wp(), m_threads(), m_thread_list_fetched(false), 37b9c1b51eSKate Stone m_pending_items(), m_pending_items_fetched(false) { 38b97f44d9SJason Molenda m_queue_wp = queue_sp; 395e8dce4dSJason Molenda } 405e8dce4dSJason Molenda 41b9c1b51eSKate Stone QueueImpl(const QueueImpl &rhs) { 42c8064ac6SJason Molenda if (&rhs == this) 43c8064ac6SJason Molenda return; 44c8064ac6SJason Molenda m_queue_wp = rhs.m_queue_wp; 45c8064ac6SJason Molenda m_threads = rhs.m_threads; 46c8064ac6SJason Molenda m_thread_list_fetched = rhs.m_thread_list_fetched; 472fd83355SJason Molenda m_pending_items = rhs.m_pending_items; 482fd83355SJason Molenda m_pending_items_fetched = rhs.m_pending_items_fetched; 49c8064ac6SJason Molenda } 50c8064ac6SJason Molenda 51b9c1b51eSKate Stone ~QueueImpl() {} 525e8dce4dSJason Molenda 53b9c1b51eSKate Stone bool IsValid() { return m_queue_wp.lock() != NULL; } 545e8dce4dSJason Molenda 55b9c1b51eSKate Stone void Clear() { 565e8dce4dSJason Molenda m_queue_wp.reset(); 575e8dce4dSJason Molenda m_thread_list_fetched = false; 585e8dce4dSJason Molenda m_threads.clear(); 592fd83355SJason Molenda m_pending_items_fetched = false; 602fd83355SJason Molenda m_pending_items.clear(); 615e8dce4dSJason Molenda } 625e8dce4dSJason Molenda 63b9c1b51eSKate Stone void SetQueue(const lldb::QueueSP &queue_sp) { 64c8064ac6SJason Molenda Clear(); 655e8dce4dSJason Molenda m_queue_wp = queue_sp; 665e8dce4dSJason Molenda } 675e8dce4dSJason Molenda 68b9c1b51eSKate Stone lldb::queue_id_t GetQueueID() const { 69c8064ac6SJason Molenda lldb::queue_id_t result = LLDB_INVALID_QUEUE_ID; 70c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 71b9c1b51eSKate Stone if (queue_sp) { 725e8dce4dSJason Molenda result = queue_sp->GetID(); 735e8dce4dSJason Molenda } 745e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 755e8dce4dSJason Molenda if (log) 76324a1036SSaleem Abdulrasool log->Printf("SBQueue(%p)::GetQueueID () => 0x%" PRIx64, 77324a1036SSaleem Abdulrasool static_cast<const void *>(this), result); 785e8dce4dSJason Molenda return result; 795e8dce4dSJason Molenda } 805e8dce4dSJason Molenda 81b9c1b51eSKate Stone uint32_t GetIndexID() const { 825e8dce4dSJason Molenda uint32_t result = LLDB_INVALID_INDEX32; 83c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 84b9c1b51eSKate Stone if (queue_sp) { 855e8dce4dSJason Molenda result = queue_sp->GetIndexID(); 865e8dce4dSJason Molenda } 875e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 885e8dce4dSJason Molenda if (log) 89324a1036SSaleem Abdulrasool log->Printf("SBQueueImpl(%p)::GetIndexID () => %d", 90324a1036SSaleem Abdulrasool static_cast<const void *>(this), result); 915e8dce4dSJason Molenda return result; 925e8dce4dSJason Molenda } 935e8dce4dSJason Molenda 94b9c1b51eSKate Stone const char *GetName() const { 955e8dce4dSJason Molenda const char *name = NULL; 96c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 97b9c1b51eSKate Stone if (queue_sp.get()) { 985e8dce4dSJason Molenda name = queue_sp->GetName(); 995e8dce4dSJason Molenda } 1005e8dce4dSJason Molenda 1015e8dce4dSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 1025e8dce4dSJason Molenda if (log) 103324a1036SSaleem Abdulrasool log->Printf("SBQueueImpl(%p)::GetName () => %s", 104b9c1b51eSKate Stone static_cast<const void *>(this), name ? name : "NULL"); 1055e8dce4dSJason Molenda 1065e8dce4dSJason Molenda return name; 1075e8dce4dSJason Molenda } 1085e8dce4dSJason Molenda 109b9c1b51eSKate Stone void FetchThreads() { 110a6682a41SJonas Devlieghere if (!m_thread_list_fetched) { 111c8064ac6SJason Molenda lldb::QueueSP queue_sp = m_queue_wp.lock(); 112b9c1b51eSKate Stone if (queue_sp) { 1135e8dce4dSJason Molenda Process::StopLocker stop_locker; 114b9c1b51eSKate Stone if (stop_locker.TryLock(&queue_sp->GetProcess()->GetRunLock())) { 1155e8dce4dSJason Molenda const std::vector<ThreadSP> thread_list(queue_sp->GetThreads()); 1165e8dce4dSJason Molenda m_thread_list_fetched = true; 1175e8dce4dSJason Molenda const uint32_t num_threads = thread_list.size(); 118b9c1b51eSKate Stone for (uint32_t idx = 0; idx < num_threads; ++idx) { 1195e8dce4dSJason Molenda ThreadSP thread_sp = thread_list[idx]; 120b9c1b51eSKate Stone if (thread_sp && thread_sp->IsValid()) { 1215e8dce4dSJason Molenda m_threads.push_back(thread_sp); 1225e8dce4dSJason Molenda } 1235e8dce4dSJason Molenda } 1245e8dce4dSJason Molenda } 1255e8dce4dSJason Molenda } 1265e8dce4dSJason Molenda } 1275e8dce4dSJason Molenda } 1285e8dce4dSJason Molenda 129b9c1b51eSKate Stone void FetchItems() { 130a6682a41SJonas Devlieghere if (!m_pending_items_fetched) { 1315e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 132b9c1b51eSKate Stone if (queue_sp) { 1335e8dce4dSJason Molenda Process::StopLocker stop_locker; 134b9c1b51eSKate Stone if (stop_locker.TryLock(&queue_sp->GetProcess()->GetRunLock())) { 135b9c1b51eSKate Stone const std::vector<QueueItemSP> queue_items( 136b9c1b51eSKate Stone queue_sp->GetPendingItems()); 1372fd83355SJason Molenda m_pending_items_fetched = true; 1382fd83355SJason Molenda const uint32_t num_pending_items = queue_items.size(); 139b9c1b51eSKate Stone for (uint32_t idx = 0; idx < num_pending_items; ++idx) { 1405e8dce4dSJason Molenda QueueItemSP item = queue_items[idx]; 141b9c1b51eSKate Stone if (item && item->IsValid()) { 1422fd83355SJason Molenda m_pending_items.push_back(item); 1435e8dce4dSJason Molenda } 1445e8dce4dSJason Molenda } 1455e8dce4dSJason Molenda } 1465e8dce4dSJason Molenda } 1475e8dce4dSJason Molenda } 1485e8dce4dSJason Molenda } 1495e8dce4dSJason Molenda 150b9c1b51eSKate Stone uint32_t GetNumThreads() { 1515e8dce4dSJason Molenda uint32_t result = 0; 1525e8dce4dSJason Molenda 1535e8dce4dSJason Molenda FetchThreads(); 154b9c1b51eSKate Stone if (m_thread_list_fetched) { 1555e8dce4dSJason Molenda result = m_threads.size(); 1565e8dce4dSJason Molenda } 1575e8dce4dSJason Molenda return result; 1585e8dce4dSJason Molenda } 1595e8dce4dSJason Molenda 160b9c1b51eSKate Stone lldb::SBThread GetThreadAtIndex(uint32_t idx) { 1615e8dce4dSJason Molenda FetchThreads(); 1625e8dce4dSJason Molenda 1635e8dce4dSJason Molenda SBThread sb_thread; 1645e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 165b9c1b51eSKate Stone if (queue_sp && idx < m_threads.size()) { 1665e8dce4dSJason Molenda ProcessSP process_sp = queue_sp->GetProcess(); 167b9c1b51eSKate Stone if (process_sp) { 1685e8dce4dSJason Molenda ThreadSP thread_sp = m_threads[idx].lock(); 169b9c1b51eSKate Stone if (thread_sp) { 1705e8dce4dSJason Molenda sb_thread.SetThread(thread_sp); 1715e8dce4dSJason Molenda } 1725e8dce4dSJason Molenda } 1735e8dce4dSJason Molenda } 1745e8dce4dSJason Molenda return sb_thread; 1755e8dce4dSJason Molenda } 1765e8dce4dSJason Molenda 177b9c1b51eSKate Stone uint32_t GetNumPendingItems() { 1785e8dce4dSJason Molenda uint32_t result = 0; 1795e8dce4dSJason Molenda 180fe95dc95SJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 181a6682a41SJonas Devlieghere if (!m_pending_items_fetched && queue_sp) { 182fe95dc95SJason Molenda result = queue_sp->GetNumPendingWorkItems(); 183b9c1b51eSKate Stone } else { 1842fd83355SJason Molenda result = m_pending_items.size(); 1855e8dce4dSJason Molenda } 1865e8dce4dSJason Molenda return result; 1875e8dce4dSJason Molenda } 1885e8dce4dSJason Molenda 189b9c1b51eSKate Stone lldb::SBQueueItem GetPendingItemAtIndex(uint32_t idx) { 1905e8dce4dSJason Molenda SBQueueItem result; 1915e8dce4dSJason Molenda FetchItems(); 192b9c1b51eSKate Stone if (m_pending_items_fetched && idx < m_pending_items.size()) { 1932fd83355SJason Molenda result.SetQueueItem(m_pending_items[idx]); 1945e8dce4dSJason Molenda } 1955e8dce4dSJason Molenda return result; 1965e8dce4dSJason Molenda } 1975e8dce4dSJason Molenda 198b9c1b51eSKate Stone uint32_t GetNumRunningItems() { 199fe95dc95SJason Molenda uint32_t result = 0; 200fe95dc95SJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 201fe95dc95SJason Molenda if (queue_sp) 202fe95dc95SJason Molenda result = queue_sp->GetNumRunningWorkItems(); 203fe95dc95SJason Molenda return result; 204fe95dc95SJason Molenda } 205fe95dc95SJason Molenda 206b9c1b51eSKate Stone lldb::SBProcess GetProcess() { 2075e8dce4dSJason Molenda SBProcess result; 2085e8dce4dSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 209b9c1b51eSKate Stone if (queue_sp) { 2105e8dce4dSJason Molenda result.SetSP(queue_sp->GetProcess()); 2115e8dce4dSJason Molenda } 2125e8dce4dSJason Molenda return result; 2135e8dce4dSJason Molenda } 214c8064ac6SJason Molenda 215b9c1b51eSKate Stone lldb::QueueKind GetKind() { 216aac16e0fSJason Molenda lldb::QueueKind kind = eQueueKindUnknown; 217aac16e0fSJason Molenda QueueSP queue_sp = m_queue_wp.lock(); 218aac16e0fSJason Molenda if (queue_sp) 219aac16e0fSJason Molenda kind = queue_sp->GetKind(); 220aac16e0fSJason Molenda 221aac16e0fSJason Molenda return kind; 222aac16e0fSJason Molenda } 223aac16e0fSJason Molenda 224c8064ac6SJason Molenda private: 225c8064ac6SJason Molenda lldb::QueueWP m_queue_wp; 226b9c1b51eSKate Stone std::vector<lldb::ThreadWP> 227b9c1b51eSKate Stone m_threads; // threads currently executing this queue's items 228b9c1b51eSKate Stone bool 229b9c1b51eSKate Stone m_thread_list_fetched; // have we tried to fetch the threads list already? 2302fd83355SJason Molenda std::vector<lldb::QueueItemSP> m_pending_items; // items currently enqueued 2312fd83355SJason Molenda bool m_pending_items_fetched; // have we tried to fetch the item list already? 232c8064ac6SJason Molenda }; 233c8064ac6SJason Molenda } 234c8064ac6SJason Molenda 235*baf5664fSJonas Devlieghere SBQueue::SBQueue() : m_opaque_sp(new QueueImpl()) { 236*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR_NO_ARGS(SBQueue); 237*baf5664fSJonas Devlieghere } 238c8064ac6SJason Molenda 239b9c1b51eSKate Stone SBQueue::SBQueue(const QueueSP &queue_sp) 240*baf5664fSJonas Devlieghere : m_opaque_sp(new QueueImpl(queue_sp)) { 241*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBQueue, (const lldb::QueueSP &), queue_sp); 242*baf5664fSJonas Devlieghere } 243c8064ac6SJason Molenda 244b9c1b51eSKate Stone SBQueue::SBQueue(const SBQueue &rhs) { 245*baf5664fSJonas Devlieghere LLDB_RECORD_CONSTRUCTOR(SBQueue, (const lldb::SBQueue &), rhs); 246*baf5664fSJonas Devlieghere 247c8064ac6SJason Molenda if (&rhs == this) 248c8064ac6SJason Molenda return; 249c8064ac6SJason Molenda 250c8064ac6SJason Molenda m_opaque_sp = rhs.m_opaque_sp; 251c8064ac6SJason Molenda } 252c8064ac6SJason Molenda 253b9c1b51eSKate Stone const lldb::SBQueue &SBQueue::operator=(const lldb::SBQueue &rhs) { 254*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(const lldb::SBQueue &, 255*baf5664fSJonas Devlieghere SBQueue, operator=,(const lldb::SBQueue &), rhs); 256*baf5664fSJonas Devlieghere 257c8064ac6SJason Molenda m_opaque_sp = rhs.m_opaque_sp; 258c8064ac6SJason Molenda return *this; 259c8064ac6SJason Molenda } 260c8064ac6SJason Molenda 261b9c1b51eSKate Stone SBQueue::~SBQueue() {} 262c8064ac6SJason Molenda 263b9c1b51eSKate Stone bool SBQueue::IsValid() const { 264*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(bool, SBQueue, IsValid); 265*baf5664fSJonas Devlieghere 266ac605f4aSJason Molenda bool is_valid = m_opaque_sp->IsValid(); 267ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 268ac605f4aSJason Molenda if (log) 269b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::IsValid() == %s", 270b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), is_valid ? "true" : "false"); 271ac605f4aSJason Molenda return is_valid; 272c8064ac6SJason Molenda } 273c8064ac6SJason Molenda 274b9c1b51eSKate Stone void SBQueue::Clear() { 275*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(void, SBQueue, Clear); 276*baf5664fSJonas Devlieghere 277ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 278ac605f4aSJason Molenda if (log) 279ac605f4aSJason Molenda log->Printf("SBQueue(0x%" PRIx64 ")::Clear()", m_opaque_sp->GetQueueID()); 280c8064ac6SJason Molenda m_opaque_sp->Clear(); 281c8064ac6SJason Molenda } 282c8064ac6SJason Molenda 283b9c1b51eSKate Stone void SBQueue::SetQueue(const QueueSP &queue_sp) { 284c8064ac6SJason Molenda m_opaque_sp->SetQueue(queue_sp); 285c8064ac6SJason Molenda } 286c8064ac6SJason Molenda 287b9c1b51eSKate Stone lldb::queue_id_t SBQueue::GetQueueID() const { 288*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::queue_id_t, SBQueue, GetQueueID); 289*baf5664fSJonas Devlieghere 290ac605f4aSJason Molenda lldb::queue_id_t qid = m_opaque_sp->GetQueueID(); 291ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 292ac605f4aSJason Molenda if (log) 293b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetQueueID() == 0x%" PRIx64, 294b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), (uint64_t)qid); 295ac605f4aSJason Molenda return qid; 296c8064ac6SJason Molenda } 297c8064ac6SJason Molenda 298b9c1b51eSKate Stone uint32_t SBQueue::GetIndexID() const { 299*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(uint32_t, SBQueue, GetIndexID); 300*baf5664fSJonas Devlieghere 301ac605f4aSJason Molenda uint32_t index_id = m_opaque_sp->GetIndexID(); 302ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 303ac605f4aSJason Molenda if (log) 304b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetIndexID() == 0x%" PRIx32, 305b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), index_id); 306ac605f4aSJason Molenda return index_id; 307c8064ac6SJason Molenda } 308c8064ac6SJason Molenda 309b9c1b51eSKate Stone const char *SBQueue::GetName() const { 310*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_CONST_NO_ARGS(const char *, SBQueue, GetName); 311*baf5664fSJonas Devlieghere 312ac605f4aSJason Molenda const char *name = m_opaque_sp->GetName(); 313ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 314ac605f4aSJason Molenda if (log) 315b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetName() == %s", 316b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), name ? name : ""); 317ac605f4aSJason Molenda return name; 318c8064ac6SJason Molenda } 319c8064ac6SJason Molenda 320b9c1b51eSKate Stone uint32_t SBQueue::GetNumThreads() { 321*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumThreads); 322*baf5664fSJonas Devlieghere 323ac605f4aSJason Molenda uint32_t numthreads = m_opaque_sp->GetNumThreads(); 324ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 325ac605f4aSJason Molenda if (log) 326b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetNumThreads() == %d", 327b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), numthreads); 328ac605f4aSJason Molenda return numthreads; 329c8064ac6SJason Molenda } 330c8064ac6SJason Molenda 331b9c1b51eSKate Stone SBThread SBQueue::GetThreadAtIndex(uint32_t idx) { 332*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBThread, SBQueue, GetThreadAtIndex, (uint32_t), 333*baf5664fSJonas Devlieghere idx); 334*baf5664fSJonas Devlieghere 335ac605f4aSJason Molenda SBThread th = m_opaque_sp->GetThreadAtIndex(idx); 336ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 337ac605f4aSJason Molenda if (log) 338b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetThreadAtIndex(%d)", 339b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), idx); 340*baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(th); 341c8064ac6SJason Molenda } 342c8064ac6SJason Molenda 343b9c1b51eSKate Stone uint32_t SBQueue::GetNumPendingItems() { 344*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumPendingItems); 345*baf5664fSJonas Devlieghere 346ac605f4aSJason Molenda uint32_t pending_items = m_opaque_sp->GetNumPendingItems(); 347ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 348ac605f4aSJason Molenda if (log) 349b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetNumPendingItems() == %d", 350b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), pending_items); 351ac605f4aSJason Molenda return pending_items; 352c8064ac6SJason Molenda } 353c8064ac6SJason Molenda 354b9c1b51eSKate Stone SBQueueItem SBQueue::GetPendingItemAtIndex(uint32_t idx) { 355*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD(lldb::SBQueueItem, SBQueue, GetPendingItemAtIndex, 356*baf5664fSJonas Devlieghere (uint32_t), idx); 357*baf5664fSJonas Devlieghere 358ac605f4aSJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 359ac605f4aSJason Molenda if (log) 360b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetPendingItemAtIndex(%d)", 361b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), idx); 362*baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(m_opaque_sp->GetPendingItemAtIndex(idx)); 363c8064ac6SJason Molenda } 364c8064ac6SJason Molenda 365b9c1b51eSKate Stone uint32_t SBQueue::GetNumRunningItems() { 366*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(uint32_t, SBQueue, GetNumRunningItems); 367*baf5664fSJonas Devlieghere 368fe95dc95SJason Molenda uint32_t running_items = m_opaque_sp->GetNumRunningItems(); 369fe95dc95SJason Molenda Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API)); 370fe95dc95SJason Molenda if (log) 371b9c1b51eSKate Stone log->Printf("SBQueue(0x%" PRIx64 ")::GetNumRunningItems() == %d", 372b9c1b51eSKate Stone m_opaque_sp->GetQueueID(), running_items); 373fe95dc95SJason Molenda return running_items; 374fe95dc95SJason Molenda } 375fe95dc95SJason Molenda 376*baf5664fSJonas Devlieghere SBProcess SBQueue::GetProcess() { 377*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::SBProcess, SBQueue, GetProcess); 378aac16e0fSJason Molenda 379*baf5664fSJonas Devlieghere return LLDB_RECORD_RESULT(m_opaque_sp->GetProcess()); 380*baf5664fSJonas Devlieghere } 381*baf5664fSJonas Devlieghere 382*baf5664fSJonas Devlieghere lldb::QueueKind SBQueue::GetKind() { 383*baf5664fSJonas Devlieghere LLDB_RECORD_METHOD_NO_ARGS(lldb::QueueKind, SBQueue, GetKind); 384*baf5664fSJonas Devlieghere 385*baf5664fSJonas Devlieghere return m_opaque_sp->GetKind(); 386*baf5664fSJonas Devlieghere } 387