| Index: base/task_scheduler/priority_queue_unittest.cc
|
| diff --git a/base/task_scheduler/priority_queue_unittest.cc b/base/task_scheduler/priority_queue_unittest.cc
|
| index 7a9fa2e2d36b08c021145f2406ecd1981c2600ca..ff397fd1208b870760f11ea61c02a7867ffa4882 100644
|
| --- a/base/task_scheduler/priority_queue_unittest.cc
|
| +++ b/base/task_scheduler/priority_queue_unittest.cc
|
| @@ -30,7 +30,7 @@ namespace {
|
| class PriorityQueueCallbackMock {
|
| public:
|
| PriorityQueueCallbackMock() = default;
|
| - MOCK_METHOD0(SequenceInsertedInPriorityQueue, void());
|
| + MOCK_METHOD0(WakeUp, void());
|
|
|
| private:
|
| DISALLOW_COPY_AND_ASSIGN(PriorityQueueCallbackMock);
|
| @@ -109,9 +109,7 @@ TEST(TaskSchedulerPriorityQueueTest, PushPopPeek) {
|
|
|
| // Create a PriorityQueue and a Transaction.
|
| testing::StrictMock<PriorityQueueCallbackMock> mock;
|
| - PriorityQueue pq(
|
| - Bind(&PriorityQueueCallbackMock::SequenceInsertedInPriorityQueue,
|
| - Unretained(&mock)));
|
| + PriorityQueue pq(Bind(&PriorityQueueCallbackMock::WakeUp, Unretained(&mock)));
|
| std::unique_ptr<PriorityQueue::Transaction> transaction(
|
| pq.BeginTransaction());
|
| EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(),
|
| @@ -175,9 +173,105 @@ TEST(TaskSchedulerPriorityQueueTest, PushPopPeek) {
|
| EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(),
|
| transaction->Peek());
|
|
|
| - // Expect 4 calls to mock.SequenceInsertedInPriorityQueue() when the
|
| - // Transaction is destroyed.
|
| - EXPECT_CALL(mock, SequenceInsertedInPriorityQueue()).Times(4);
|
| + // Expect 4 calls to mock.WakeUp() when the Transaction is destroyed.
|
| + EXPECT_CALL(mock, WakeUp()).Times(4);
|
| + transaction.reset();
|
| +}
|
| +
|
| +TEST(TaskSchedulerPriorityQueueTest, PushNoWakeUpPopPeek) {
|
| + // Create test sequences.
|
| + scoped_refptr<Sequence> sequence_a(new Sequence);
|
| + sequence_a->PushTask(WrapUnique(
|
| + new Task(FROM_HERE, Closure(),
|
| + TaskTraits().WithPriority(TaskPriority::USER_VISIBLE))));
|
| + SequenceSortKey sort_key_a = sequence_a->GetSortKey();
|
| +
|
| + scoped_refptr<Sequence> sequence_b(new Sequence);
|
| + sequence_b->PushTask(WrapUnique(
|
| + new Task(FROM_HERE, Closure(),
|
| + TaskTraits().WithPriority(TaskPriority::USER_BLOCKING))));
|
| + SequenceSortKey sort_key_b = sequence_b->GetSortKey();
|
| +
|
| + scoped_refptr<Sequence> sequence_c(new Sequence);
|
| + sequence_c->PushTask(WrapUnique(
|
| + new Task(FROM_HERE, Closure(),
|
| + TaskTraits().WithPriority(TaskPriority::USER_BLOCKING))));
|
| + SequenceSortKey sort_key_c = sequence_c->GetSortKey();
|
| +
|
| + scoped_refptr<Sequence> sequence_d(new Sequence);
|
| + sequence_d->PushTask(WrapUnique(
|
| + new Task(FROM_HERE, Closure(),
|
| + TaskTraits().WithPriority(TaskPriority::BACKGROUND))));
|
| + SequenceSortKey sort_key_d = sequence_d->GetSortKey();
|
| +
|
| + // Create a PriorityQueue and a Transaction.
|
| + testing::StrictMock<PriorityQueueCallbackMock> mock;
|
| + PriorityQueue pq(Bind(&PriorityQueueCallbackMock::WakeUp, Unretained(&mock)));
|
| + std::unique_ptr<PriorityQueue::Transaction> transaction(
|
| + pq.BeginTransaction());
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(),
|
| + transaction->Peek());
|
| +
|
| + // Push |sequence_a| in the PriorityQueue. It becomes the sequence with the
|
| + // highest priority.
|
| + transaction->PushNoWakeUp(WrapUnique(
|
| + new PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a)));
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a),
|
| + transaction->Peek());
|
| +
|
| + // Push |sequence_b| in the PriorityQueue. It becomes the sequence with the
|
| + // highest priority.
|
| + transaction->PushNoWakeUp(WrapUnique(
|
| + new PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b)));
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b),
|
| + transaction->Peek());
|
| +
|
| + // Push |sequence_c| in the PriorityQueue. |sequence_b| is still the sequence
|
| + // with the highest priority.
|
| + transaction->PushNoWakeUp(WrapUnique(
|
| + new PriorityQueue::SequenceAndSortKey(sequence_c, sort_key_c)));
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b),
|
| + transaction->Peek());
|
| +
|
| + // Push |sequence_d| in the PriorityQueue. |sequence_b| is still the sequence
|
| + // with the highest priority.
|
| + transaction->PushNoWakeUp(WrapUnique(
|
| + new PriorityQueue::SequenceAndSortKey(sequence_d, sort_key_d)));
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_b, sort_key_b),
|
| + transaction->Peek());
|
| +
|
| + // Pop |sequence_b| from the PriorityQueue. |sequence_c| becomes the sequence
|
| + // with the highest priority.
|
| + transaction->Pop();
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_c, sort_key_c),
|
| + transaction->Peek());
|
| +
|
| + // Pop |sequence_c| from the PriorityQueue. |sequence_a| becomes the sequence
|
| + // with the highest priority.
|
| + transaction->Pop();
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_a, sort_key_a),
|
| + transaction->Peek());
|
| +
|
| + // Pop |sequence_a| from the PriorityQueue. |sequence_d| becomes the sequence
|
| + // with the highest priority.
|
| + transaction->Pop();
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(
|
| + PriorityQueue::SequenceAndSortKey(sequence_d, sort_key_d),
|
| + transaction->Peek());
|
| +
|
| + // Pop |sequence_d| from the PriorityQueue. It is now empty.
|
| + transaction->Pop();
|
| + EXPECT_SEQUENCE_AND_SORT_KEY_EQ(PriorityQueue::SequenceAndSortKey(),
|
| + transaction->Peek());
|
| +
|
| + // Expect no call to mock.WakeUp() when the Transaction is destroyed.
|
| + EXPECT_CALL(mock, WakeUp()).Times(0);
|
| transaction.reset();
|
| }
|
|
|
|
|