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

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

Issue 2341063002: Make SequencedWorkerPool::IsRunningSequenceOnCurrentThread() private. (Closed)
Patch Set: CR danakj #12 (add comments in tests) 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 return true; 111 return true;
112 112
113 if (lhs.time_to_run > rhs.time_to_run) 113 if (lhs.time_to_run > rhs.time_to_run)
114 return false; 114 return false;
115 115
116 // If the time happen to match, then we use the sequence number to decide. 116 // If the time happen to match, then we use the sequence number to decide.
117 return lhs.sequence_task_number < rhs.sequence_task_number; 117 return lhs.sequence_task_number < rhs.sequence_task_number;
118 } 118 }
119 }; 119 };
120 120
121 // Create a process-wide unique ID to represent this task in trace events. This
122 // will be mangled with a Process ID hash to reduce the likelyhood of colliding
123 // with MessageLoop pointers on other processes.
124 uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) {
125 return (static_cast<uint64_t>(task.trace_id) << 32) |
126 static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool));
127 }
128
121 // SequencedWorkerPoolTaskRunner --------------------------------------------- 129 // SequencedWorkerPoolTaskRunner ---------------------------------------------
122 // A TaskRunner which posts tasks to a SequencedWorkerPool with a 130 // A TaskRunner which posts tasks to a SequencedWorkerPool with a
123 // fixed ShutdownBehavior. 131 // fixed ShutdownBehavior.
124 // 132 //
125 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 133 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
126 class SequencedWorkerPoolTaskRunner : public TaskRunner { 134 class SequencedWorkerPoolTaskRunner : public TaskRunner {
127 public: 135 public:
128 SequencedWorkerPoolTaskRunner( 136 SequencedWorkerPoolTaskRunner(
129 scoped_refptr<SequencedWorkerPool> pool, 137 scoped_refptr<SequencedWorkerPool> pool,
130 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 138 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
(...skipping 30 matching lines...) Expand all
161 return pool_->PostWorkerTaskWithShutdownBehavior( 169 return pool_->PostWorkerTaskWithShutdownBehavior(
162 from_here, task, shutdown_behavior_); 170 from_here, task, shutdown_behavior_);
163 } 171 }
164 return pool_->PostDelayedWorkerTask(from_here, task, delay); 172 return pool_->PostDelayedWorkerTask(from_here, task, delay);
165 } 173 }
166 174
167 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const { 175 bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const {
168 return pool_->RunsTasksOnCurrentThread(); 176 return pool_->RunsTasksOnCurrentThread();
169 } 177 }
170 178
171 // SequencedWorkerPoolSequencedTaskRunner ------------------------------------ 179 } // namespace
180
181 // SequencedWorkerPool::PoolSequencedTaskRunner ------------------------------
172 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a 182 // A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a
173 // fixed sequence token. 183 // fixed sequence token.
174 // 184 //
175 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner). 185 // Note that this class is RefCountedThreadSafe (inherited from TaskRunner).
176 class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner { 186 class SequencedWorkerPool::PoolSequencedTaskRunner
187 : public SequencedTaskRunner {
177 public: 188 public:
178 SequencedWorkerPoolSequencedTaskRunner( 189 PoolSequencedTaskRunner(
179 scoped_refptr<SequencedWorkerPool> pool, 190 scoped_refptr<SequencedWorkerPool> pool,
180 SequencedWorkerPool::SequenceToken token, 191 SequencedWorkerPool::SequenceToken token,
181 SequencedWorkerPool::WorkerShutdown shutdown_behavior); 192 SequencedWorkerPool::WorkerShutdown shutdown_behavior);
182 193
183 // TaskRunner implementation 194 // TaskRunner implementation
184 bool PostDelayedTask(const tracked_objects::Location& from_here, 195 bool PostDelayedTask(const tracked_objects::Location& from_here,
185 const Closure& task, 196 const Closure& task,
186 TimeDelta delay) override; 197 TimeDelta delay) override;
187 bool RunsTasksOnCurrentThread() const override; 198 bool RunsTasksOnCurrentThread() const override;
188 199
189 // SequencedTaskRunner implementation 200 // SequencedTaskRunner implementation
190 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here, 201 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
191 const Closure& task, 202 const Closure& task,
192 TimeDelta delay) override; 203 TimeDelta delay) override;
193 204
194 private: 205 private:
195 ~SequencedWorkerPoolSequencedTaskRunner() override; 206 ~PoolSequencedTaskRunner() override;
196 207
197 const scoped_refptr<SequencedWorkerPool> pool_; 208 const scoped_refptr<SequencedWorkerPool> pool_;
198 209
199 const SequencedWorkerPool::SequenceToken token_; 210 const SequencedWorkerPool::SequenceToken token_;
200 211
201 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_; 212 const SequencedWorkerPool::WorkerShutdown shutdown_behavior_;
202 213
203 DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolSequencedTaskRunner); 214 DISALLOW_COPY_AND_ASSIGN(PoolSequencedTaskRunner);
204 }; 215 };
205 216
206 SequencedWorkerPoolSequencedTaskRunner::SequencedWorkerPoolSequencedTaskRunner( 217 SequencedWorkerPool::PoolSequencedTaskRunner::
207 scoped_refptr<SequencedWorkerPool> pool, 218 PoolSequencedTaskRunner(
208 SequencedWorkerPool::SequenceToken token, 219 scoped_refptr<SequencedWorkerPool> pool,
209 SequencedWorkerPool::WorkerShutdown shutdown_behavior) 220 SequencedWorkerPool::SequenceToken token,
221 SequencedWorkerPool::WorkerShutdown shutdown_behavior)
210 : pool_(std::move(pool)), 222 : pool_(std::move(pool)),
211 token_(token), 223 token_(token),
212 shutdown_behavior_(shutdown_behavior) {} 224 shutdown_behavior_(shutdown_behavior) {}
213 225
214 SequencedWorkerPoolSequencedTaskRunner:: 226 SequencedWorkerPool::PoolSequencedTaskRunner::
215 ~SequencedWorkerPoolSequencedTaskRunner() { 227 ~PoolSequencedTaskRunner() = default;
216 }
217 228
218 bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask( 229 bool SequencedWorkerPool::PoolSequencedTaskRunner::
219 const tracked_objects::Location& from_here, 230 PostDelayedTask(const tracked_objects::Location& from_here,
220 const Closure& task, 231 const Closure& task,
221 TimeDelta delay) { 232 TimeDelta delay) {
222 if (delay.is_zero()) { 233 if (delay.is_zero()) {
223 return pool_->PostSequencedWorkerTaskWithShutdownBehavior( 234 return pool_->PostSequencedWorkerTaskWithShutdownBehavior(
224 token_, from_here, task, shutdown_behavior_); 235 token_, from_here, task, shutdown_behavior_);
225 } 236 }
226 return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay); 237 return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay);
227 } 238 }
228 239
229 bool SequencedWorkerPoolSequencedTaskRunner::RunsTasksOnCurrentThread() const { 240 bool SequencedWorkerPool::PoolSequencedTaskRunner::
241 RunsTasksOnCurrentThread() const {
230 return pool_->IsRunningSequenceOnCurrentThread(token_); 242 return pool_->IsRunningSequenceOnCurrentThread(token_);
231 } 243 }
232 244
233 bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask( 245 bool SequencedWorkerPool::PoolSequencedTaskRunner::
234 const tracked_objects::Location& from_here, 246 PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
235 const Closure& task, 247 const Closure& task,
236 TimeDelta delay) { 248 TimeDelta delay) {
237 // There's no way to run nested tasks, so simply forward to 249 // There's no way to run nested tasks, so simply forward to
238 // PostDelayedTask. 250 // PostDelayedTask.
239 return PostDelayedTask(from_here, task, delay); 251 return PostDelayedTask(from_here, task, delay);
240 } 252 }
241 253
242 // Create a process-wide unique ID to represent this task in trace events. This
243 // will be mangled with a Process ID hash to reduce the likelyhood of colliding
244 // with MessageLoop pointers on other processes.
245 uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) {
246 return (static_cast<uint64_t>(task.trace_id) << 32) |
247 static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool));
248 }
249
250 } // namespace
251
252 // Worker --------------------------------------------------------------------- 254 // Worker ---------------------------------------------------------------------
253 255
254 class SequencedWorkerPool::Worker : public SimpleThread { 256 class SequencedWorkerPool::Worker : public SimpleThread {
255 public: 257 public:
256 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it 258 // Hold a (cyclic) ref to |worker_pool|, since we want to keep it
257 // around as long as we are running. 259 // around as long as we are running.
258 Worker(scoped_refptr<SequencedWorkerPool> worker_pool, 260 Worker(scoped_refptr<SequencedWorkerPool> worker_pool,
259 int thread_number, 261 int thread_number,
260 const std::string& thread_name_prefix); 262 const std::string& thread_name_prefix);
261 ~Worker() override; 263 ~Worker() override;
(...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1503 } 1505 }
1504 1506
1505 scoped_refptr<SequencedTaskRunner> SequencedWorkerPool::GetSequencedTaskRunner( 1507 scoped_refptr<SequencedTaskRunner> SequencedWorkerPool::GetSequencedTaskRunner(
1506 SequenceToken token) { 1508 SequenceToken token) {
1507 return GetSequencedTaskRunnerWithShutdownBehavior(token, BLOCK_SHUTDOWN); 1509 return GetSequencedTaskRunnerWithShutdownBehavior(token, BLOCK_SHUTDOWN);
1508 } 1510 }
1509 1511
1510 scoped_refptr<SequencedTaskRunner> 1512 scoped_refptr<SequencedTaskRunner>
1511 SequencedWorkerPool::GetSequencedTaskRunnerWithShutdownBehavior( 1513 SequencedWorkerPool::GetSequencedTaskRunnerWithShutdownBehavior(
1512 SequenceToken token, WorkerShutdown shutdown_behavior) { 1514 SequenceToken token, WorkerShutdown shutdown_behavior) {
1513 return new SequencedWorkerPoolSequencedTaskRunner( 1515 return new PoolSequencedTaskRunner(
1514 this, token, shutdown_behavior); 1516 this, token, shutdown_behavior);
1515 } 1517 }
1516 1518
1517 scoped_refptr<TaskRunner> 1519 scoped_refptr<TaskRunner>
1518 SequencedWorkerPool::GetTaskRunnerWithShutdownBehavior( 1520 SequencedWorkerPool::GetTaskRunnerWithShutdownBehavior(
1519 WorkerShutdown shutdown_behavior) { 1521 WorkerShutdown shutdown_behavior) {
1520 return new SequencedWorkerPoolTaskRunner(this, shutdown_behavior); 1522 return new SequencedWorkerPoolTaskRunner(this, shutdown_behavior);
1521 } 1523 }
1522 1524
1523 bool SequencedWorkerPool::PostWorkerTask( 1525 bool SequencedWorkerPool::PostWorkerTask(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 const tracked_objects::Location& from_here, 1588 const tracked_objects::Location& from_here,
1587 const Closure& task, 1589 const Closure& task,
1588 TimeDelta delay) { 1590 TimeDelta delay) {
1589 return PostDelayedWorkerTask(from_here, task, delay); 1591 return PostDelayedWorkerTask(from_here, task, delay);
1590 } 1592 }
1591 1593
1592 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const { 1594 bool SequencedWorkerPool::RunsTasksOnCurrentThread() const {
1593 return inner_->RunsTasksOnCurrentThread(); 1595 return inner_->RunsTasksOnCurrentThread();
1594 } 1596 }
1595 1597
1596 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread(
1597 SequenceToken sequence_token) const {
1598 return inner_->IsRunningSequenceOnCurrentThread(sequence_token);
1599 }
1600
1601 void SequencedWorkerPool::FlushForTesting() { 1598 void SequencedWorkerPool::FlushForTesting() {
1602 inner_->CleanupForTesting(); 1599 inner_->CleanupForTesting();
1603 } 1600 }
1604 1601
1605 void SequencedWorkerPool::SignalHasWorkForTesting() { 1602 void SequencedWorkerPool::SignalHasWorkForTesting() {
1606 inner_->SignalHasWorkForTesting(); 1603 inner_->SignalHasWorkForTesting();
1607 } 1604 }
1608 1605
1609 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) { 1606 void SequencedWorkerPool::Shutdown(int max_new_blocking_tasks_after_shutdown) {
1610 DCHECK(constructor_task_runner_->BelongsToCurrentThread()); 1607 DCHECK(constructor_task_runner_->BelongsToCurrentThread());
1611 inner_->Shutdown(max_new_blocking_tasks_after_shutdown); 1608 inner_->Shutdown(max_new_blocking_tasks_after_shutdown);
1612 } 1609 }
1613 1610
1614 bool SequencedWorkerPool::IsShutdownInProgress() { 1611 bool SequencedWorkerPool::IsShutdownInProgress() {
1615 return inner_->IsShutdownInProgress(); 1612 return inner_->IsShutdownInProgress();
1616 } 1613 }
1617 1614
1615 bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread(
1616 SequenceToken sequence_token) const {
1617 return inner_->IsRunningSequenceOnCurrentThread(sequence_token);
1618 }
1619
1618 } // namespace base 1620 } // namespace base
OLDNEW
« no previous file with comments | « base/threading/sequenced_worker_pool.h ('k') | base/threading/sequenced_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698