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

Side by Side Diff: base/threading/sequenced_worker_pool.cc

Issue 2341063002: Make SequencedWorkerPool::IsRunningSequenceOnCurrentThread() private. (Closed)
Patch Set: CR gab/robliao #3-4 Created 4 years, 3 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/threading/sequenced_worker_pool.h" 5 #include "base/threading/sequenced_worker_pool.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <list> 9 #include <list>
10 #include <map> 10 #include <map>
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 return true; 110 return true;
111 111
112 if (lhs.time_to_run > rhs.time_to_run) 112 if (lhs.time_to_run > rhs.time_to_run)
113 return false; 113 return false;
114 114
115 // If the time happen to match, then we use the sequence number to decide. 115 // If the time happen to match, then we use the sequence number to decide.
116 return lhs.sequence_task_number < rhs.sequence_task_number; 116 return lhs.sequence_task_number < rhs.sequence_task_number;
117 } 117 }
118 }; 118 };
119 119
120 // Create a process-wide unique ID to represent this task in trace events. This
121 // will be mangled with a Process ID hash to reduce the likelyhood of colliding
122 // with MessageLoop pointers on other processes.
123 uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) {
124 return (static_cast<uint64_t>(task.trace_id) << 32) |
125 static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool));
126 }
127
120 // SequencedWorkerPoolTaskRunner --------------------------------------------- 128 // SequencedWorkerPoolTaskRunner ---------------------------------------------
121 // A TaskRunner which posts tasks to a SequencedWorkerPool with a 129 // A TaskRunner which posts tasks to a SequencedWorkerPool with a
122 // fixed ShutdownBehavior. 130 // fixed ShutdownBehavior.
123 // 131 //
124 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 132 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
125 class SequencedWorkerPoolTaskRunner : public TaskRunner { 133 class SequencedWorkerPoolTaskRunner : public TaskRunner {
126 public: 134 public:
127 SequencedWorkerPoolTaskRunner( 135 SequencedWorkerPoolTaskRunner(
128 scoped_refptr<SequencedWorkerPool> pool, 136 scoped_refptr<SequencedWorkerPool> pool,
129 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 137 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
(...skipping 30 matching lines...) Expand all
160 return pool_->PostWorkerTaskWithShutdownBehavior( 168 return pool_->PostWorkerTaskWithShutdownBehavior(
161 from_here, task, shutdown_behavior_); 169 from_here, task, shutdown_behavior_);
162 } 170 }
163 return pool_->PostDelayedWorkerTask(from_here, task, delay); 171 return pool_->PostDelayedWorkerTask(from_here, task, delay);
164 } 172 }
165 173
166 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const { 174 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const {
167 return pool_->RunsTasksOnCurrentThread(); 175 return pool_->RunsTasksOnCurrentThread();
168 } 176 }
169 177
170 // SequencedWorkerPoolSequencedTaskRunner ------------------------------------ 178 } // namespace
179
180 // SequencedWorkerPool::PoolSequencedTaskRunner ------------------------------
171 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a 181 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a
172 // fixed sequence token. 182 // fixed sequence token.
173 // 183 //
174 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 184 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
175 class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner { 185 class SequencedWorkerPool::PoolSequencedTaskRunner
186 : public SequencedTaskRunner {
176 public: 187 public:
177 SequencedWorkerPoolSequencedTaskRunner( 188 PoolSequencedTaskRunner(
178 scoped_refptr<SequencedWorkerPool> pool, 189 scoped_refptr<SequencedWorkerPool> pool,
179 SequencedWorkerPool::SequenceToken token, 190 SequencedWorkerPool::SequenceToken token,
180 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 191 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
181 192
182 // TaskRunner implementation 193 // TaskRunner implementation
183 bool PostDelayedTask(const tracked_objects::Location& from_here, 194 bool PostDelayedTask(const tracked_objects::Location& from_here,
184 const Closure& task, 195 const Closure& task,
185 TimeDelta delay) override; 196 TimeDelta delay) override;
186 bool RunsTasksOnCurrentThread() const override; 197 bool RunsTasksOnCurrentThread() const override;
187 198
188 // SequencedTaskRunner implementation 199 // SequencedTaskRunner implementation
189 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, 200 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
190 const Closure& task, 201 const Closure& task,
191 TimeDelta delay) override; 202 TimeDelta delay) override;
192 203
193 private: 204 private:
194 ~SequencedWorkerPoolSequencedTaskRunner() override; 205 ~PoolSequencedTaskRunner() override;
195 206
196 const scoped_refptr<SequencedWorkerPool> pool_; 207 const scoped_refptr<SequencedWorkerPool> pool_;
197 208
198 const SequencedWorkerPool::SequenceToken token_; 209 const SequencedWorkerPool::SequenceToken token_;
199 210
200 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_; 211 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_;
201 212
202 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolSequencedTaskRunner); 213 DISALLOW_COPY_AND_ASSIGN(PoolSequencedTaskRunner);
203 }; 214 };
204 215
205 SequencedWorkerPoolSequencedTaskRunner::SequencedWorkerPoolSequencedTaskRunner( 216 SequencedWorkerPool::PoolSequencedTaskRunner::
206 scoped_refptr<SequencedWorkerPool> pool, 217 PoolSequencedTaskRunner(
207 SequencedWorkerPool::SequenceToken token, 218 scoped_refptr<SequencedWorkerPool> pool,
208 SequencedWorkerPool::WorkerShutdown shutdown_behavior) 219 SequencedWorkerPool::SequenceToken token,
220 SequencedWorkerPool::WorkerShutdown shutdown_behavior)
209 : pool_(std::move(pool)), 221 : pool_(std::move(pool)),
210 token_(token), 222 token_(token),
211 shutdown_behavior_(shutdown_behavior) {} 223 shutdown_behavior_(shutdown_behavior) {}
212 224
213 SequencedWorkerPoolSequencedTaskRunner:: 225 SequencedWorkerPool::PoolSequencedTaskRunner::
214 ~SequencedWorkerPoolSequencedTaskRunner() { 226 ~PoolSequencedTaskRunner() = default;
215 }
216 227
217 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask( 228 bool SequencedWorkerPool::PoolSequencedTaskRunner::
218 const tracked_objects::Location& from_here, 229 PostDelayedTask(const tracked_objects::Location& from_here,
219 const Closure& task, 230 const Closure& task,
220 TimeDelta delay) { 231 TimeDelta delay) {
221 if (delay.is_zero()) { 232 if (delay.is_zero()) {
222 return pool_->PostSequencedWorkerTaskWithShutdownBehavior( 233 return pool_->PostSequencedWorkerTaskWithShutdownBehavior(
223 token_, from_here, task, shutdown_behavior_); 234 token_, from_here, task, shutdown_behavior_);
224 } 235 }
225 return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay); 236 return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay);
226 } 237 }
227 238
228 bool SequencedWorkerPoolSequencedTaskRunner::RunsTasksOnCurrentThread() const { 239 bool SequencedWorkerPool::PoolSequencedTaskRunner::
240 RunsTasksOnCurrentThread() const {
229 return pool_->IsRunningSequenceOnCurrentThread(token_); 241 return pool_->IsRunningSequenceOnCurrentThread(token_);
230 } 242 }
231 243
232 bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask( 244 bool SequencedWorkerPool::PoolSequencedTaskRunner::
233 const tracked_objects::Location& from_here, 245 PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
234 const Closure& task, 246 const Closure& task,
235 TimeDelta delay) { 247 TimeDelta delay) {
236 // There's no way to run nested tasks, so simply forward to 248 // There's no way to run nested tasks, so simply forward to
237 // PostDelayedTask. 249 // PostDelayedTask.
238 return PostDelayedTask(from_here, task, delay); 250 return PostDelayedTask(from_here, task, delay);
239 } 251 }
240 252
241 // Create a process-wide unique ID to represent this task in trace events. This
242 // will be mangled with a Process ID hash to reduce the likelyhood of colliding
243 // with MessageLoop pointers on other processes.
244 uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) {
245 return (static_cast<uint64_t>(task.trace_id) << 32) |
246 static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool));
247 }
248
249 } // namespace
250
251 // Worker --------------------------------------------------------------------- 253 // Worker ---------------------------------------------------------------------
252 254
253 class SequencedWorkerPool::Worker : public SimpleThread { 255 class SequencedWorkerPool::Worker : public SimpleThread {
254 public: 256 public:
255 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it 257 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it
256 // around as long as we are running. 258 // around as long as we are running.
257 Worker(scoped_refptr<SequencedWorkerPool> worker_pool, 259 Worker(scoped_refptr<SequencedWorkerPool> worker_pool,
258 int thread_number, 260 int thread_number,
259 const std::string& thread_name_prefix); 261 const std::string& thread_name_prefix);
260 ~Worker() override; 262 ~Worker() override;
(...skipping 1203 matching lines...) Expand 10 before | Expand all | Expand 10 after
1464 } 1466 }
1465 1467
1466 scoped_refptr<SequencedTaskRunner> SequencedWorkerPool::GetSequencedTaskRunner( 1468 scoped_refptr<SequencedTaskRunner> SequencedWorkerPool::GetSequencedTaskRunner(
1467 SequenceToken token) { 1469 SequenceToken token) {
1468 return GetSequencedTaskRunnerWithShutdownBehavior(token, BLOCK_SHUTDOWN); 1470 return GetSequencedTaskRunnerWithShutdownBehavior(token, BLOCK_SHUTDOWN);
1469 } 1471 }
1470 1472
1471 scoped_refptr<SequencedTaskRunner> 1473 scoped_refptr<SequencedTaskRunner>
1472 SequencedWorkerPool::GetSequencedTaskRunnerWithShutdownBehavior( 1474 SequencedWorkerPool::GetSequencedTaskRunnerWithShutdownBehavior(
1473 SequenceToken token, WorkerShutdown shutdown_behavior) { 1475 SequenceToken token, WorkerShutdown shutdown_behavior) {
1474 return new SequencedWorkerPoolSequencedTaskRunner( 1476 return new PoolSequencedTaskRunner(
1475 this, token, shutdown_behavior); 1477 this, token, shutdown_behavior);
1476 } 1478 }
1477 1479
1478 scoped_refptr<TaskRunner> 1480 scoped_refptr<TaskRunner>
1479 SequencedWorkerPool::GetTaskRunnerWithShutdownBehavior( 1481 SequencedWorkerPool::GetTaskRunnerWithShutdownBehavior(
1480 WorkerShutdown shutdown_behavior) { 1482 WorkerShutdown shutdown_behavior) {
1481 return new SequencedWorkerPoolTaskRunner(this, shutdown_behavior); 1483 return new SequencedWorkerPoolTaskRunner(this, shutdown_behavior);
1482 } 1484 }
1483 1485
1484 bool SequencedWorkerPool::PostWorkerTask( 1486 bool SequencedWorkerPool::PostWorkerTask(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 const tracked_objects::Location& from_here, 1549 const tracked_objects::Location& from_here,
1548 const Closure& task, 1550 const Closure& task,
1549 TimeDelta delay) { 1551 TimeDelta delay) {
1550 return PostDelayedWorkerTask(from_here, task, delay); 1552 return PostDelayedWorkerTask(from_here, task, delay);
1551 } 1553 }
1552 1554
1553 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const { 1555 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const {
1554 return inner_->RunsTasksOnCurrentThread(); 1556 return inner_->RunsTasksOnCurrentThread();
1555 } 1557 }
1556 1558
1557 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread(
1558 SequenceToken sequence_token) const {
1559 return inner_->IsRunningSequenceOnCurrentThread(sequence_token);
1560 }
1561
1562 void SequencedWorkerPool::FlushForTesting() { 1559 void SequencedWorkerPool::FlushForTesting() {
1563 inner_->CleanupForTesting(); 1560 inner_->CleanupForTesting();
1564 } 1561 }
1565 1562
1566 void SequencedWorkerPool::SignalHasWorkForTesting() { 1563 void SequencedWorkerPool::SignalHasWorkForTesting() {
1567 inner_->SignalHasWorkForTesting(); 1564 inner_->SignalHasWorkForTesting();
1568 } 1565 }
1569 1566
1570 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { 1567 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) {
1571 DCHECK(constructor_task_runner_->BelongsToCurrentThread()); 1568 DCHECK(constructor_task_runner_->BelongsToCurrentThread());
1572 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); 1569 inner_->Shutdown(max_new_blocking_tasks_after_shutdown);
1573 } 1570 }
1574 1571
1575 bool SequencedWorkerPool::IsShutdownInProgress() { 1572 bool SequencedWorkerPool::IsShutdownInProgress() {
1576 return inner_->IsShutdownInProgress(); 1573 return inner_->IsShutdownInProgress();
1577 } 1574 }
1578 1575
1576 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread(
1577 SequenceToken sequence_token) const {
1578 return inner_->IsRunningSequenceOnCurrentThread(sequence_token);
1579 }
1580
1579 } // namespace base 1581 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698