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..f24762d5c8a67cfe6c53290992cea44b01ddedb7 |
--- /dev/null |
+++ b/base/threading/sequenced_task_runner_handle.cc |
@@ -0,0 +1,36 @@ |
+// 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(); |
+ if (!sequence_token.IsValid()) |
+ return nullptr; |
+ |
+ DCHECK(pool->IsRunningSequenceOnCurrentThread(sequence_token)); |
+ return pool->GetSequencedTaskRunner(sequence_token); |
+ } |
+ |
+ // Otherwise, return a SingleThreadTaskRunner for the current thread. |
+ if (base::ThreadTaskRunnerHandle::IsSet()) |
+ return base::ThreadTaskRunnerHandle::Get(); |
+ |
+ return nullptr; |
+} |
+ |
+} // namespace base |