Index: base/task_scheduler/priority_queue.cc |
diff --git a/base/task_scheduler/priority_queue.cc b/base/task_scheduler/priority_queue.cc |
index cea62a383f7b89baadeadca346b6c6f2ace4da98..55eaf74f0fec58f7232fe3be048d2be96fd0ab90 100644 |
--- a/base/task_scheduler/priority_queue.cc |
+++ b/base/task_scheduler/priority_queue.cc |
@@ -31,13 +31,12 @@ PriorityQueue::Transaction::Transaction(PriorityQueue* outer_queue) |
PriorityQueue::Transaction::~Transaction() { |
DCHECK(CalledOnValidThread()); |
- // Run the sequence insertion callback once for each Sequence that was |
- // inserted in the PriorityQueue during the lifetime of this Transaction. |
- // Perform this outside the scope of PriorityQueue's lock to avoid imposing an |
- // unnecessary lock dependency on |sequence_inserted_callback_|'s destination. |
+ // Run the wake up callback once for each call to Push(). Perform this outside |
+ // the scope of PriorityQueue's lock to avoid imposing an unnecessary lock |
+ // dependency on the callback's destination. |
auto_lock_.reset(); |
- for (size_t i = 0; i < num_pushed_sequences_; ++i) |
- outer_queue_->sequence_inserted_callback_.Run(); |
+ for (size_t i = 0; i < num_wake_ups_; ++i) |
+ outer_queue_->wake_up_callback_.Run(); |
} |
void PriorityQueue::Transaction::Push( |
@@ -45,8 +44,17 @@ void PriorityQueue::Transaction::Push( |
DCHECK(CalledOnValidThread()); |
DCHECK(!sequence_and_sort_key->is_null()); |
+ PushNoWakeUp(std::move(sequence_and_sort_key)); |
+ |
+ ++num_wake_ups_; |
+} |
+ |
+void PriorityQueue::Transaction::PushNoWakeUp( |
+ std::unique_ptr<SequenceAndSortKey> sequence_and_sort_key) { |
+ DCHECK(CalledOnValidThread()); |
+ DCHECK(!sequence_and_sort_key->is_null()); |
+ |
outer_queue_->container_.push(std::move(sequence_and_sort_key)); |
- ++num_pushed_sequences_; |
} |
const PriorityQueue::SequenceAndSortKey& PriorityQueue::Transaction::Peek() |
@@ -67,16 +75,16 @@ void PriorityQueue::Transaction::Pop() { |
outer_queue_->container_.pop(); |
} |
-PriorityQueue::PriorityQueue(const Closure& sequence_inserted_callback) |
- : sequence_inserted_callback_(sequence_inserted_callback) { |
- DCHECK(!sequence_inserted_callback_.is_null()); |
+PriorityQueue::PriorityQueue(const Closure& wake_up_callback) |
+ : wake_up_callback_(wake_up_callback) { |
+ DCHECK(!wake_up_callback_.is_null()); |
} |
-PriorityQueue::PriorityQueue(const Closure& sequence_inserted_callback, |
+PriorityQueue::PriorityQueue(const Closure& wake_up_callback, |
const PriorityQueue* predecessor_priority_queue) |
: container_lock_(&predecessor_priority_queue->container_lock_), |
- sequence_inserted_callback_(sequence_inserted_callback) { |
- DCHECK(!sequence_inserted_callback_.is_null()); |
+ wake_up_callback_(wake_up_callback) { |
+ DCHECK(!wake_up_callback_.is_null()); |
DCHECK(predecessor_priority_queue); |
} |