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 47ffb0e8877e176d302872447602ef40de86b246..f11d3457cbcc3c3b2e1a85db5a0273430e1ccfe0 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 |
@@ -75,6 +75,7 @@ void WorkQueueSets::OnPushQueue(WorkQueue* work_queue) { |
} |
void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) { |
+ // Assume that |work_queue| contains the lowest enqueue_order. |
size_t set_index = work_queue->work_queue_set_index(); |
DCHECK_EQ(this, work_queue->work_queue_sets()); |
DCHECK_LT(set_index, enqueue_order_to_work_queue_maps_.size()); |
@@ -94,6 +95,26 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) { |
std::make_pair(enqueue_order, work_queue)); |
} |
+void WorkQueueSets::OnQueueHeadChanged(WorkQueue* work_queue, |
+ EnqueueOrder erased_task_enqueue_order) { |
+ size_t set_index = work_queue->work_queue_set_index(); |
+ DCHECK_EQ(this, work_queue->work_queue_sets()); |
+ DCHECK_LT(set_index, enqueue_order_to_work_queue_maps_.size()); |
+ DCHECK(!enqueue_order_to_work_queue_maps_[set_index].empty()) |
+ << " set_index = " << set_index; |
+ DCHECK(enqueue_order_to_work_queue_maps_[set_index].find( |
+ erased_task_enqueue_order) != |
+ enqueue_order_to_work_queue_maps_[set_index].end()); |
+ // O(log n). |
+ enqueue_order_to_work_queue_maps_[set_index].erase(erased_task_enqueue_order); |
+ EnqueueOrder enqueue_order; |
+ bool has_enqueue_order = work_queue->GetFrontTaskEnqueueOrder(&enqueue_order); |
+ if (!has_enqueue_order) |
+ return; |
+ enqueue_order_to_work_queue_maps_[set_index].insert( |
+ std::make_pair(enqueue_order, work_queue)); |
+} |
+ |
bool WorkQueueSets::GetOldestQueueInSet(size_t set_index, |
WorkQueue** out_work_queue) const { |
DCHECK_LT(set_index, enqueue_order_to_work_queue_maps_.size()); |