| 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 194524f1740f557c25154ab3aeed6097d013fef3..94c39add872cf50643d73b9c5a85f3625483fb3a 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
|
| @@ -25,7 +25,7 @@ void WorkQueueSets::AddQueue(WorkQueue* work_queue, size_t set_index) {
|
| work_queue->AssignSetIndex(set_index);
|
| if (!has_enqueue_order)
|
| return;
|
| - enqueue_order_to_work_queue_maps_[set_index].insert(
|
| + enqueue_order_to_work_queue_maps_[set_index].insertUnique(
|
| std::make_pair(enqueue_order, work_queue));
|
| }
|
|
|
| @@ -56,7 +56,7 @@ void WorkQueueSets::ChangeSetIndex(WorkQueue* work_queue, size_t set_index) {
|
| if (!has_enqueue_order)
|
| return;
|
| enqueue_order_to_work_queue_maps_[old_set].erase(enqueue_order);
|
| - enqueue_order_to_work_queue_maps_[set_index].insert(
|
| + enqueue_order_to_work_queue_maps_[set_index].insertUnique(
|
| std::make_pair(enqueue_order, work_queue));
|
| }
|
|
|
| @@ -70,7 +70,7 @@ void WorkQueueSets::OnPushQueue(WorkQueue* work_queue) {
|
| size_t set_index = work_queue->work_queue_set_index();
|
| DCHECK_LT(set_index, enqueue_order_to_work_queue_maps_.size())
|
| << " set_index = " << set_index;
|
| - enqueue_order_to_work_queue_maps_[set_index].insert(
|
| + enqueue_order_to_work_queue_maps_[set_index].insertUnique(
|
| std::make_pair(enqueue_order, work_queue));
|
| }
|
|
|
| @@ -84,17 +84,14 @@ void WorkQueueSets::OnPopQueue(WorkQueue* work_queue) {
|
| DCHECK_EQ(enqueue_order_to_work_queue_maps_[set_index].begin()->second,
|
| work_queue)
|
| << " set_index = " << set_index;
|
| - EnqueueOrderToWorkQueueMap::iterator old_it =
|
| - enqueue_order_to_work_queue_maps_[set_index].begin();
|
| EnqueueOrder enqueue_order;
|
| if (work_queue->GetFrontTaskEnqueueOrder(&enqueue_order)) {
|
| - // Amortized O(1) if the new location is close to |old_it|, otherwise
|
| - // O(log n).
|
| - enqueue_order_to_work_queue_maps_[set_index].insert(
|
| - std::make_pair(enqueue_order, work_queue));
|
| + enqueue_order_to_work_queue_maps_[set_index].ChangeKeyUnique(
|
| + enqueue_order_to_work_queue_maps_[set_index].begin(), enqueue_order);
|
| + } else {
|
| + enqueue_order_to_work_queue_maps_[set_index].erase(
|
| + enqueue_order_to_work_queue_maps_[set_index].begin());
|
| }
|
| - // O(1)
|
| - enqueue_order_to_work_queue_maps_[set_index].erase(old_it);
|
| }
|
|
|
| bool WorkQueueSets::GetOldestQueueInSet(size_t set_index,
|
|
|