Index: base/threading/sequenced_worker_pool.cc |
diff --git a/base/threading/sequenced_worker_pool.cc b/base/threading/sequenced_worker_pool.cc |
index fb71efeaea89c2f901a2e87ecebca02e25f45c39..cae4711a706c63207d2ed187f58df428f2814077 100644 |
--- a/base/threading/sequenced_worker_pool.cc |
+++ b/base/threading/sequenced_worker_pool.cc |
@@ -117,6 +117,14 @@ struct SequencedTaskLessThan { |
} |
}; |
+// Create a process-wide unique ID to represent this task in trace events. This |
+// will be mangled with a Process ID hash to reduce the likelyhood of colliding |
+// with MessageLoop pointers on other processes. |
+uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) { |
+ return (static_cast<uint64_t>(task.trace_id) << 32) | |
+ static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool)); |
+} |
+ |
// SequencedWorkerPoolTaskRunner --------------------------------------------- |
// A TaskRunner which posts tasks to a SequencedWorkerPool with a |
// fixed ShutdownBehavior. |
@@ -167,12 +175,15 @@ bool SequencedWorkerPoolTaskRunner::RunsTasksOnCurrentThread() const { |
return pool_->RunsTasksOnCurrentThread(); |
} |
-// SequencedWorkerPoolSequencedTaskRunner ------------------------------------ |
+} // namespace |
+ |
+// SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner --------------- |
robliao
2016/09/15 14:14:16
Make SequencedWorkerPool::SequencedTaskRunner or S
fdoray
2016/09/15 15:21:59
Done. (PoolSequencedTaskRunner instead of PoolTask
|
// A SequencedTaskRunner which posts tasks to a SequencedWorkerPool with a |
// fixed sequence token. |
// |
// Note that this class is RefCountedThreadSafe (inherited from TaskRunner). |
-class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner { |
+class SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner |
+ : public SequencedTaskRunner { |
public: |
SequencedWorkerPoolSequencedTaskRunner( |
scoped_refptr<SequencedWorkerPool> pool, |
@@ -202,22 +213,22 @@ class SequencedWorkerPoolSequencedTaskRunner : public SequencedTaskRunner { |
DISALLOW_COPY_AND_ASSIGN(SequencedWorkerPoolSequencedTaskRunner); |
}; |
-SequencedWorkerPoolSequencedTaskRunner::SequencedWorkerPoolSequencedTaskRunner( |
- scoped_refptr<SequencedWorkerPool> pool, |
- SequencedWorkerPool::SequenceToken token, |
- SequencedWorkerPool::WorkerShutdown shutdown_behavior) |
+SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner:: |
+ SequencedWorkerPoolSequencedTaskRunner( |
+ scoped_refptr<SequencedWorkerPool> pool, |
+ SequencedWorkerPool::SequenceToken token, |
+ SequencedWorkerPool::WorkerShutdown shutdown_behavior) |
: pool_(std::move(pool)), |
token_(token), |
shutdown_behavior_(shutdown_behavior) {} |
-SequencedWorkerPoolSequencedTaskRunner:: |
-~SequencedWorkerPoolSequencedTaskRunner() { |
-} |
+SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner:: |
+ ~SequencedWorkerPoolSequencedTaskRunner() = default; |
-bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask( |
- const tracked_objects::Location& from_here, |
- const Closure& task, |
- TimeDelta delay) { |
+bool SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner:: |
+ PostDelayedTask(const tracked_objects::Location& from_here, |
+ const Closure& task, |
+ TimeDelta delay) { |
if (delay.is_zero()) { |
return pool_->PostSequencedWorkerTaskWithShutdownBehavior( |
token_, from_here, task, shutdown_behavior_); |
@@ -225,29 +236,20 @@ bool SequencedWorkerPoolSequencedTaskRunner::PostDelayedTask( |
return pool_->PostDelayedSequencedWorkerTask(token_, from_here, task, delay); |
} |
-bool SequencedWorkerPoolSequencedTaskRunner::RunsTasksOnCurrentThread() const { |
+bool SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner:: |
+ RunsTasksOnCurrentThread() const { |
return pool_->IsRunningSequenceOnCurrentThread(token_); |
} |
-bool SequencedWorkerPoolSequencedTaskRunner::PostNonNestableDelayedTask( |
- const tracked_objects::Location& from_here, |
- const Closure& task, |
- TimeDelta delay) { |
+bool SequencedWorkerPool::SequencedWorkerPoolSequencedTaskRunner:: |
+ PostNonNestableDelayedTask(const tracked_objects::Location& from_here, |
+ const Closure& task, |
+ TimeDelta delay) { |
// There's no way to run nested tasks, so simply forward to |
// PostDelayedTask. |
return PostDelayedTask(from_here, task, delay); |
} |
-// Create a process-wide unique ID to represent this task in trace events. This |
-// will be mangled with a Process ID hash to reduce the likelyhood of colliding |
-// with MessageLoop pointers on other processes. |
-uint64_t GetTaskTraceID(const SequencedTask& task, void* pool) { |
- return (static_cast<uint64_t>(task.trace_id) << 32) | |
- static_cast<uint64_t>(reinterpret_cast<intptr_t>(pool)); |
-} |
- |
-} // namespace |
- |
// Worker --------------------------------------------------------------------- |
class SequencedWorkerPool::Worker : public SimpleThread { |
@@ -839,24 +841,13 @@ bool SequencedWorkerPool::Inner::RunsTasksOnCurrentThread() const { |
bool SequencedWorkerPool::Inner::IsRunningSequenceOnCurrentThread( |
SequenceToken sequence_token) const { |
AutoLock lock(lock_); |
- if (subtle::NoBarrier_Load(&g_all_pools_state) == |
- AllPoolsState::REDIRECTED_TO_TASK_SCHEDULER) { |
- // TODO(gab): This currently only verifies that the current thread is a |
- // thread on which a task bound to |sequence_token| *could* run, but it |
- // doesn't verify that the current is *currently running* a task bound to |
- // |sequence_token|. |
- const auto sequenced_task_runner_it = |
- sequenced_task_runner_map_.find(sequence_token.id_); |
- return sequenced_task_runner_it != sequenced_task_runner_map_.end() && |
- sequenced_task_runner_it->second->RunsTasksOnCurrentThread(); |
- } else { |
- ThreadMap::const_iterator found = |
- threads_.find(PlatformThread::CurrentId()); |
- if (found == threads_.end()) |
- return false; |
- return found->second->is_processing_task() && |
- sequence_token.Equals(found->second->task_sequence_token()); |
- } |
+ DCHECK_NE(subtle::NoBarrier_Load(&g_all_pools_state), |
gab
2016/09/15 13:50:47
Actually, under redirection: SWP::GetSequencedTask
fdoray
2016/09/15 15:21:59
You're right. This CL no longer changes IsRunningS
|
+ AllPoolsState::REDIRECTED_TO_TASK_SCHEDULER); |
+ ThreadMap::const_iterator found = threads_.find(PlatformThread::CurrentId()); |
+ if (found == threads_.end()) |
gab
2016/09/15 13:50:47
Incorporate below, i.e.
return found != threads_.
fdoray
2016/09/15 15:21:59
I'll fix this method in a separate CL.
|
+ return false; |
+ return found->second->is_processing_task() && |
+ sequence_token.Equals(found->second->task_sequence_token()); |
} |
// See https://code.google.com/p/chromium/issues/detail?id=168415 |
@@ -1554,11 +1545,6 @@ bool SequencedWorkerPool::RunsTasksOnCurrentThread() const { |
return inner_->RunsTasksOnCurrentThread(); |
} |
-bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread( |
- SequenceToken sequence_token) const { |
- return inner_->IsRunningSequenceOnCurrentThread(sequence_token); |
-} |
- |
void SequencedWorkerPool::FlushForTesting() { |
inner_->CleanupForTesting(); |
} |
@@ -1576,4 +1562,9 @@ bool SequencedWorkerPool::IsShutdownInProgress() { |
return inner_->IsShutdownInProgress(); |
} |
+bool SequencedWorkerPool::IsRunningSequenceOnCurrentThread( |
+ SequenceToken sequence_token) const { |
+ return inner_->IsRunningSequenceOnCurrentThread(sequence_token); |
+} |
+ |
} // namespace base |