Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Unified Diff: base/task_scheduler/priority_queue_unittest.cc

Issue 1868673002: TaskScheduler: Add PriorityQueue::Transaction::PushNoWakeUp(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tasktracker2
Patch Set: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « base/task_scheduler/priority_queue.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « base/task_scheduler/priority_queue.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698