Index: base/threading/sequenced_task_runner_handle.cc |
diff --git a/base/threading/sequenced_task_runner_handle.cc b/base/threading/sequenced_task_runner_handle.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a03642de42061cef29a2842fee5abbbc9a17df44 |
--- /dev/null |
+++ b/base/threading/sequenced_task_runner_handle.cc |
@@ -0,0 +1,38 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/threading/sequenced_task_runner_handle.h" |
+ |
+#include "base/sequenced_task_runner.h" |
+#include "base/thread_task_runner_handle.h" |
+#include "base/threading/sequenced_worker_pool.h" |
+ |
+namespace base { |
+ |
+// static |
+scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() { |
+ // If we are on a worker thread for a SequencedBlockingPool that is running a |
+ // sequenced task, return a SequencedTaskRunner for it. |
+ scoped_refptr<base::SequencedWorkerPool> pool = |
+ SequencedWorkerPool::GetWorkerPoolForCurrentThread(); |
+ if (pool) { |
+ SequencedWorkerPool::SequenceToken sequence_token = |
+ SequencedWorkerPool::GetSequenceTokenForCurrentThread(); |
+ DCHECK(sequence_token.IsValid()); |
gab
2015/11/02 18:42:40
Actually, if the |sequence_token| is invalid: does
danakj
2015/11/02 18:44:52
Maybe I'm confused, but I thought the idea was tha
|
+ DCHECK(pool->IsRunningSequenceOnCurrentThread(sequence_token)); |
+ return pool->GetSequencedTaskRunner(sequence_token); |
+ } |
+ |
+ // Otherwise, return a SingleThreadTaskRunner for the current thread. |
+ return base::ThreadTaskRunnerHandle::Get(); |
+} |
+ |
+// static |
+bool SequencedTaskRunnerHandle::IsSet() { |
+ return (SequencedWorkerPool::GetWorkerPoolForCurrentThread() && |
+ SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid()) || |
+ base::ThreadTaskRunnerHandle::IsSet(); |
+} |
+ |
+} // namespace base |