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

Unified Diff: base/threading/sequenced_task_runner_handle.cc

Issue 2725873006: [merge m57] Prefer returning a SingleThreadTaskRunner in SequencedTaskRunnerHandle::Get(). (Closed)
Patch Set: Created 3 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
index 53f3261d9f7c914982cc7992aa356ffb0b81e2e2..90f68b33ab1cb0a6c5499378e46c0cc040cbb59c 100644
--- a/base/threading/sequenced_task_runner_handle.cc
+++ b/base/threading/sequenced_task_runner_handle.cc
@@ -16,45 +16,56 @@ namespace base {
namespace {
-base::LazyInstance<base::ThreadLocalPointer<SequencedTaskRunnerHandle>>::Leaky
+LazyInstance<ThreadLocalPointer<SequencedTaskRunnerHandle>>::Leaky
lazy_tls_ptr = LAZY_INSTANCE_INITIALIZER;
} // namespace
// static
scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() {
+ // Return the registered SingleThreadTaskRunner, if any. This must be at the
+ // top so that a SingleThreadTaskRunner has priority over a
+ // SequencedTaskRunner (RLZ registers both on the same thread despite that
+ // being prevented by DCHECKs).
+ // TODO(fdoray): Move this to the bottom once RLZ stops registering a
+ // SingleThreadTaskRunner and a SequencedTaskRunner on the same thread.
+ // https://crbug.com/618530#c14
+ if (ThreadTaskRunnerHandle::IsSet()) {
+ // Various modes of setting SequencedTaskRunnerHandle don't combine.
+ DCHECK(!lazy_tls_ptr.Pointer()->Get());
+ DCHECK(!SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid());
+
+ return ThreadTaskRunnerHandle::Get();
+ }
+
// Return the registered SequencedTaskRunner, if any.
const SequencedTaskRunnerHandle* handle = lazy_tls_ptr.Pointer()->Get();
if (handle) {
// Various modes of setting SequencedTaskRunnerHandle don't combine.
- DCHECK(!base::ThreadTaskRunnerHandle::IsSet());
DCHECK(!SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid());
+
return handle->task_runner_;
}
// 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 =
+ scoped_refptr<SequencedWorkerPool> pool =
SequencedWorkerPool::GetWorkerPoolForCurrentThread();
- if (pool) {
- SequencedWorkerPool::SequenceToken sequence_token =
- SequencedWorkerPool::GetSequenceTokenForCurrentThread();
- DCHECK(sequence_token.IsValid());
- scoped_refptr<SequencedTaskRunner> sequenced_task_runner(
- pool->GetSequencedTaskRunner(sequence_token));
- DCHECK(sequenced_task_runner->RunsTasksOnCurrentThread());
- return sequenced_task_runner;
- }
-
- // Return the SingleThreadTaskRunner for the current thread otherwise.
- return base::ThreadTaskRunnerHandle::Get();
+ DCHECK(pool);
+ SequencedWorkerPool::SequenceToken sequence_token =
+ SequencedWorkerPool::GetSequenceTokenForCurrentThread();
+ DCHECK(sequence_token.IsValid());
+ scoped_refptr<SequencedTaskRunner> sequenced_task_runner(
+ pool->GetSequencedTaskRunner(sequence_token));
+ DCHECK(sequenced_task_runner->RunsTasksOnCurrentThread());
+ return sequenced_task_runner;
}
// static
bool SequencedTaskRunnerHandle::IsSet() {
return lazy_tls_ptr.Pointer()->Get() ||
SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid() ||
- base::ThreadTaskRunnerHandle::IsSet();
+ ThreadTaskRunnerHandle::IsSet();
}
SequencedTaskRunnerHandle::SequencedTaskRunnerHandle(
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698