Index: third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc |
diff --git a/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc b/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc |
index bec08d1125db9d303c2f6487b116b1a017642460..1194df9e79cb92c31913611f2c8874dbdcb72458 100644 |
--- a/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc |
+++ b/third_party/WebKit/Source/platform/scheduler/base/work_queue_sets.cc |
@@ -63,6 +63,8 @@ void WorkQueueSets::OnPushQueue(WorkQueue* work_queue) { |
size_t set_index = work_queue->work_queue_set_index(); |
DCHECK_LT(set_index, work_queue_heaps_.size()) << " set_index = " |
<< set_index; |
+ // |work_queue| should not be in work_queue_heaps_[set_index]. |
+ DCHECK(!work_queue->heap_handle().IsValid()); |
work_queue_heaps_[set_index].insert({enqueue_order, work_queue}); |
} |
@@ -71,6 +73,7 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) { |
size_t set_index = work_queue->work_queue_set_index(); |
DCHECK_EQ(this, work_queue->work_queue_sets()); |
DCHECK_LT(set_index, work_queue_heaps_.size()); |
+ DCHECK(work_queue->heap_handle().IsValid()); |
DCHECK(!work_queue_heaps_[set_index].empty()) << " set_index = " << set_index; |
DCHECK_EQ(work_queue_heaps_[set_index].min().value, work_queue) |
<< " set_index = " << set_index; |
@@ -81,6 +84,8 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) { |
} else { |
// O(log n) |
work_queue_heaps_[set_index].pop(); |
+ DCHECK(work_queue_heaps_[set_index].empty() || |
+ work_queue_heaps_[set_index].min().value != work_queue); |
} |
} |
@@ -103,6 +108,19 @@ bool WorkQueueSets::GetOldestQueueInSet(size_t set_index, |
return true; |
} |
+bool WorkQueueSets::GetOldestQueueAndEnqueueOrderInSet( |
+ size_t set_index, |
+ WorkQueue** out_work_queue, |
+ EnqueueOrder* out_enqueue_order) const { |
+ DCHECK_LT(set_index, work_queue_heaps_.size()); |
+ if (work_queue_heaps_[set_index].empty()) |
+ return false; |
+ const OldestTaskEnqueueOrder& oldest = work_queue_heaps_[set_index].min(); |
+ *out_work_queue = oldest.value; |
+ *out_enqueue_order = oldest.key; |
+ return true; |
+} |
+ |
bool WorkQueueSets::IsSetEmpty(size_t set_index) const { |
DCHECK_LT(set_index, work_queue_heaps_.size()) << " set_index = " |
<< set_index; |