self.assertTrue(queue.GetNumPendingItems()==expected_pending,"queue %s should have %d pending items, instead has %d pending items"%(queue.GetName(),expected_pending,(queue.GetNumPendingItems())))
self.assertTrue(queue.GetNumRunningItems()==expected_running,"queue %s should have %d running items, instead has %d running items"%(queue.GetName(),expected_running,(queue.GetNumRunningItems())))
self.assertTrue(queue.GetNumThreads()==number_threads,"queue %s should have %d thread executing, but has %d"%(queue.GetName(),number_threads,queue.GetNumThreads()))
defcheck_queue_kind(self,queue,kind):
expected_kind_string="Unknown"
ifkind==lldb.eQueueKindSerial:
expected_kind_string="Serial queue"
ifkind==lldb.eQueueKindConcurrent:
expected_kind_string="Concurrent queue"
actual_kind_string="Unknown"
ifqueue.GetKind()==lldb.eQueueKindSerial:
actual_kind_string="Serial queue"
ifqueue.GetKind()==lldb.eQueueKindConcurrent:
actual_kind_string="Concurrent queue"
self.assertTrue(queue.GetKind()==kind,"queue %s is expected to be a %s but it is actually a %s"%(queue.GetName(),expected_kind_string,actual_kind_string))
defcheck_queues_threads_match_queue(self,queue):
foridxinrange(0,queue.GetNumThreads()):
t=queue.GetThreadAtIndex(idx)
self.assertTrue(t.IsValid(),"Queue %s's thread #%d must be valid"%(queue.GetName(),idx))
self.assertTrue(t.GetQueueID()==queue.GetQueueID(),"Queue %s has a QueueID of %d but its thread #%d has a QueueID of %d"%(queue.GetName(),queue.GetQueueID(),idx,t.GetQueueID()))
self.assertTrue(t.GetQueueName()==queue.GetName(),"Queue %s has a QueueName of %s but its thread #%d has a QueueName of %s"%(queue.GetName(),queue.GetName(),idx,t.GetQueueName()))
self.assertTrue(t.GetQueue().GetQueueID()==queue.GetQueueID(),"Thread #%d's Queue's QueueID of %d is not the same as the QueueID of its owning queue %d"%(idx,t.GetQueue().GetQueueID(),queue.GetQueueID()))
self.assertTrue(queue_submittor_1.IsValid()andqueue_performer_1.IsValid()andqueue_performer_2.IsValid()andqueue_performer_3.IsValid(),"Got all four expected queues: %s%s%s%s"%(queue_submittor_1.IsValid(),queue_performer_1.IsValid(),queue_performer_2.IsValid(),queue_performer_3.IsValid()))
self.assertTrue(user_initiated_thread.GetInfoItemByPathAsString("requested_qos.printable_name",stream),"Get QoS printable string for user initiated QoS thread")
self.assertTrue(stream.GetData()=="User Initiated","user initiated QoS thread name is valid")
stream.Clear()
self.assertTrue(user_interactive_thread.GetInfoItemByPathAsString("requested_qos.printable_name",stream),"Get QoS printable string for user interactive QoS thread")
self.assertTrue(stream.GetData()=="User Interactive","user interactive QoS thread name is valid")
stream.Clear()
self.assertTrue(utility_thread.GetInfoItemByPathAsString("requested_qos.printable_name",stream),"Get QoS printable string for utility QoS thread")
self.assertTrue(stream.GetData()=="Utility","utility QoS thread name is valid")
stream.Clear()
self.assertTrue(unspecified_thread.GetInfoItemByPathAsString("requested_qos.printable_name",stream),"Get QoS printable string for unspecified QoS thread")
self.assertTrue(stream.GetData()=="User Initiated","unspecified QoS thread name is valid")
stream.Clear()
self.assertTrue(background_thread.GetInfoItemByPathAsString("requested_qos.printable_name",stream),"Get QoS printable string for background QoS thread")
self.assertTrue(stream.GetData()=="Background","background QoS thread name is valid")
self.assertTrue(process.GetNumQueues()>=4,"Found the correct number of queues.")
queue_submittor_1=lldb.SBQueue()
queue_performer_1=lldb.SBQueue()
queue_performer_2=lldb.SBQueue()
queue_performer_3=lldb.SBQueue()
foridxinrange(0,process.GetNumQueues()):
q=process.GetQueueAtIndex(idx)
ifq.GetName()=="com.apple.work_submittor_1":
queue_submittor_1=q
ifq.GetName()=="com.apple.work_performer_1":
queue_performer_1=q
ifq.GetName()=="com.apple.work_performer_2":
queue_performer_2=q
ifq.GetName()=="com.apple.work_performer_3":
queue_performer_3=q
self.assertTrue(queue_submittor_1.IsValid()andqueue_performer_1.IsValid()andqueue_performer_2.IsValid()andqueue_performer_3.IsValid(),"Got all four expected queues: %s%s%s%s"%(queue_submittor_1.IsValid(),queue_performer_1.IsValid(),queue_performer_2.IsValid(),queue_performer_3.IsValid()))
self.assertTrue(queue_performer_2.GetPendingItemAtIndex(0).IsValid(),"queue 2's pending item #0 is valid")
self.assertTrue(queue_performer_2.GetPendingItemAtIndex(0).GetAddress().GetSymbol().GetName()=="doing_the_work_2","queue 2's pending item #0 should be doing_the_work_2")
self.assertTrue(queue_performer_2.GetNumPendingItems()==9999,"verify that queue 2 still has 9999 pending items")
self.assertTrue(queue_performer_2.GetPendingItemAtIndex(9998).IsValid(),"queue 2's pending item #9998 is valid")
self.assertTrue(queue_performer_2.GetPendingItemAtIndex(9998).GetAddress().GetSymbol().GetName()=="doing_the_work_2","queue 2's pending item #0 should be doing_the_work_2")
self.assertTrue(queue_performer_2.GetPendingItemAtIndex(9999).IsValid()==False,"queue 2's pending item #9999 is invalid")