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

Side by Side Diff: base/task_scheduler/priority_queue_unittest.cc

Issue 2801673002: Separate the create and start phases in SchedulerWorkerPoolImpl. (Closed)
Patch Set: self-review Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/task_scheduler/priority_queue.h" 5 #include "base/task_scheduler/priority_queue.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 scoped_refptr<Sequence> sequence_d(new Sequence); 80 scoped_refptr<Sequence> sequence_d(new Sequence);
81 sequence_d->PushTask(MakeUnique<Task>( 81 sequence_d->PushTask(MakeUnique<Task>(
82 FROM_HERE, Bind(&DoNothing), 82 FROM_HERE, Bind(&DoNothing),
83 TaskTraits().WithPriority(TaskPriority::BACKGROUND), TimeDelta())); 83 TaskTraits().WithPriority(TaskPriority::BACKGROUND), TimeDelta()));
84 SequenceSortKey sort_key_d = sequence_d->GetSortKey(); 84 SequenceSortKey sort_key_d = sequence_d->GetSortKey();
85 85
86 // Create a PriorityQueue and a Transaction. 86 // Create a PriorityQueue and a Transaction.
87 PriorityQueue pq; 87 PriorityQueue pq;
88 auto transaction(pq.BeginTransaction()); 88 auto transaction(pq.BeginTransaction());
89 EXPECT_TRUE(transaction->IsEmpty()); 89 EXPECT_TRUE(transaction->IsEmpty());
90 EXPECT_EQ(0U, transaction->Size());
90 91
91 // Push |sequence_a| in the PriorityQueue. It becomes the sequence with the 92 // Push |sequence_a| in the PriorityQueue. It becomes the sequence with the
92 // highest priority. 93 // highest priority.
93 transaction->Push(sequence_a, sort_key_a); 94 transaction->Push(sequence_a, sort_key_a);
94 EXPECT_EQ(sort_key_a, transaction->PeekSortKey()); 95 EXPECT_EQ(sort_key_a, transaction->PeekSortKey());
96 EXPECT_EQ(1U, transaction->Size());
95 97
96 // Push |sequence_b| in the PriorityQueue. It becomes the sequence with the 98 // Push |sequence_b| in the PriorityQueue. It becomes the sequence with the
97 // highest priority. 99 // highest priority.
98 transaction->Push(sequence_b, sort_key_b); 100 transaction->Push(sequence_b, sort_key_b);
99 EXPECT_EQ(sort_key_b, transaction->PeekSortKey()); 101 EXPECT_EQ(sort_key_b, transaction->PeekSortKey());
102 EXPECT_EQ(2U, transaction->Size());
100 103
101 // Push |sequence_c| in the PriorityQueue. |sequence_b| is still the sequence 104 // Push |sequence_c| in the PriorityQueue. |sequence_b| is still the sequence
102 // with the highest priority. 105 // with the highest priority.
103 transaction->Push(sequence_c, sort_key_c); 106 transaction->Push(sequence_c, sort_key_c);
104 EXPECT_EQ(sort_key_b, transaction->PeekSortKey()); 107 EXPECT_EQ(sort_key_b, transaction->PeekSortKey());
108 EXPECT_EQ(3U, transaction->Size());
105 109
106 // Push |sequence_d| in the PriorityQueue. |sequence_b| is still the sequence 110 // Push |sequence_d| in the PriorityQueue. |sequence_b| is still the sequence
107 // with the highest priority. 111 // with the highest priority.
108 transaction->Push(sequence_d, sort_key_d); 112 transaction->Push(sequence_d, sort_key_d);
109 EXPECT_EQ(sort_key_b, transaction->PeekSortKey()); 113 EXPECT_EQ(sort_key_b, transaction->PeekSortKey());
114 EXPECT_EQ(4U, transaction->Size());
110 115
111 // Pop |sequence_b| from the PriorityQueue. |sequence_c| becomes the sequence 116 // Pop |sequence_b| from the PriorityQueue. |sequence_c| becomes the sequence
112 // with the highest priority. 117 // with the highest priority.
113 EXPECT_EQ(sequence_b, transaction->PopSequence()); 118 EXPECT_EQ(sequence_b, transaction->PopSequence());
114 EXPECT_EQ(sort_key_c, transaction->PeekSortKey()); 119 EXPECT_EQ(sort_key_c, transaction->PeekSortKey());
120 EXPECT_EQ(3U, transaction->Size());
115 121
116 // Pop |sequence_c| from the PriorityQueue. |sequence_a| becomes the sequence 122 // Pop |sequence_c| from the PriorityQueue. |sequence_a| becomes the sequence
117 // with the highest priority. 123 // with the highest priority.
118 EXPECT_EQ(sequence_c, transaction->PopSequence()); 124 EXPECT_EQ(sequence_c, transaction->PopSequence());
119 EXPECT_EQ(sort_key_a, transaction->PeekSortKey()); 125 EXPECT_EQ(sort_key_a, transaction->PeekSortKey());
126 EXPECT_EQ(2U, transaction->Size());
120 127
121 // Pop |sequence_a| from the PriorityQueue. |sequence_d| becomes the sequence 128 // Pop |sequence_a| from the PriorityQueue. |sequence_d| becomes the sequence
122 // with the highest priority. 129 // with the highest priority.
123 EXPECT_EQ(sequence_a, transaction->PopSequence()); 130 EXPECT_EQ(sequence_a, transaction->PopSequence());
124 EXPECT_EQ(sort_key_d, transaction->PeekSortKey()); 131 EXPECT_EQ(sort_key_d, transaction->PeekSortKey());
132 EXPECT_EQ(1U, transaction->Size());
125 133
126 // Pop |sequence_d| from the PriorityQueue. It is now empty. 134 // Pop |sequence_d| from the PriorityQueue. It is now empty.
127 EXPECT_EQ(sequence_d, transaction->PopSequence()); 135 EXPECT_EQ(sequence_d, transaction->PopSequence());
128 EXPECT_TRUE(transaction->IsEmpty()); 136 EXPECT_TRUE(transaction->IsEmpty());
137 EXPECT_EQ(0U, transaction->Size());
129 } 138 }
130 139
131 // Check that creating Transactions on the same thread for 2 unrelated 140 // Check that creating Transactions on the same thread for 2 unrelated
132 // PriorityQueues causes a crash. 141 // PriorityQueues causes a crash.
133 TEST(TaskSchedulerPriorityQueueTest, IllegalTwoTransactionsSameThread) { 142 TEST(TaskSchedulerPriorityQueueTest, IllegalTwoTransactionsSameThread) {
134 PriorityQueue pq_a; 143 PriorityQueue pq_a;
135 PriorityQueue pq_b; 144 PriorityQueue pq_b;
136 145
137 EXPECT_DCHECK_DEATH( 146 EXPECT_DCHECK_DEATH(
138 { 147 {
(...skipping 25 matching lines...) Expand all
164 173
165 // End the Transaction on the current thread. 174 // End the Transaction on the current thread.
166 transaction.reset(); 175 transaction.reset();
167 176
168 // The other thread should exit after its call to BeginTransaction() returns. 177 // The other thread should exit after its call to BeginTransaction() returns.
169 thread_beginning_transaction.Join(); 178 thread_beginning_transaction.Join();
170 } 179 }
171 180
172 } // namespace internal 181 } // namespace internal
173 } // namespace base 182 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698