blob: 7cfa6fa5582f0369470afde7fca75e1bdf31f2f2 [file] [log] [blame]
Jason Molenda5e8dce42013-12-13 00:29:16 +00001//===-- Queue.cpp -----------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "lldb/Target/Process.h"
11#include "lldb/Target/Queue.h"
12#include "lldb/Target/QueueList.h"
13#include "lldb/Target/Thread.h"
Jason Molenda2fd83352014-02-05 05:44:54 +000014#include "lldb/Target/SystemRuntime.h"
Jason Molenda5e8dce42013-12-13 00:29:16 +000015
16using namespace lldb;
17using namespace lldb_private;
18
19Queue::Queue (ProcessSP process_sp, lldb::queue_id_t queue_id, const char *queue_name) :
Jason Molendab97f44d2013-12-18 00:58:23 +000020 m_process_wp (),
Jason Molenda5e8dce42013-12-13 00:29:16 +000021 m_queue_id (queue_id),
Jason Molenda4a5ec882013-12-19 00:09:13 +000022 m_queue_name (),
Jason Molenda2fd83352014-02-05 05:44:54 +000023 m_running_work_items_count(0),
24 m_pending_work_items_count(0),
25 m_pending_items(),
Jason Molendaaac16e02014-03-13 02:54:54 +000026 m_dispatch_queue_t_addr(LLDB_INVALID_ADDRESS),
27 m_kind (eQueueKindUnknown)
Jason Molenda5e8dce42013-12-13 00:29:16 +000028{
Jason Molenda4a5ec882013-12-19 00:09:13 +000029 if (queue_name)
30 m_queue_name = queue_name;
31
Jason Molendab97f44d2013-12-18 00:58:23 +000032 m_process_wp = process_sp;
Jason Molenda5e8dce42013-12-13 00:29:16 +000033}
34
35Queue::~Queue ()
36{
37}
38
39queue_id_t
40Queue::GetID ()
41{
42 return m_queue_id;
43}
44
45const char *
46Queue::GetName ()
47{
48 const char *result = NULL;
49 if (m_queue_name.size() > 0)
50 result = m_queue_name.c_str();
51 return result;
52}
53
54uint32_t
55Queue::GetIndexID ()
56{
Jason Molenda2fd83352014-02-05 05:44:54 +000057 return m_queue_id;
Jason Molenda5e8dce42013-12-13 00:29:16 +000058}
59
60std::vector<lldb::ThreadSP>
61Queue::GetThreads ()
62{
63 std::vector<ThreadSP> result;
64 ProcessSP process_sp = m_process_wp.lock();
65 if (process_sp.get ())
66 {
67 for (ThreadSP thread_sp : process_sp->Threads())
68 {
69 if (thread_sp->GetQueueID() == m_queue_id)
70 {
71 result.push_back (thread_sp);
72 }
73 }
74 }
75 return result;
76}
Jason Molenda2fd83352014-02-05 05:44:54 +000077
78void
79Queue::SetNumRunningWorkItems (uint32_t count)
80{
81 m_running_work_items_count = count;
82}
83
84uint32_t
85Queue::GetNumRunningWorkItems () const
86{
87 return m_running_work_items_count;
88}
89
90
91void
92Queue::SetNumPendingWorkItems (uint32_t count)
93{
94 m_pending_work_items_count = count;
95}
96
97uint32_t
98Queue::GetNumPendingWorkItems () const
99{
100 return m_pending_work_items_count;
101}
102
103void
104Queue::SetLibdispatchQueueAddress (addr_t dispatch_queue_t_addr)
105{
106 m_dispatch_queue_t_addr = dispatch_queue_t_addr;
107}
108
109addr_t
110Queue::GetLibdispatchQueueAddress () const
111{
112 return m_dispatch_queue_t_addr;
113}
114
115
116const std::vector<lldb::QueueItemSP> &
117Queue::GetPendingItems ()
118{
119 if (m_pending_items.size() == 0)
120 {
121 ProcessSP process_sp = m_process_wp.lock();
122 if (process_sp && process_sp->GetSystemRuntime())
123 {
124 process_sp->GetSystemRuntime()->PopulatePendingItemsForQueue (this);
125 }
126 }
127 return m_pending_items;
128}
Jason Molendaaac16e02014-03-13 02:54:54 +0000129
130lldb::QueueKind
131Queue::GetKind ()
132{
133 return m_kind;
134}
135
136void
137Queue::SetKind (lldb::QueueKind kind)
138{
139 m_kind = kind;
140}