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, |