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

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

Issue 2190073002: Revert of Revert "Allow SequencedTaskRunnerHandle::Get() while running unsequenced tasks." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_task_runner_handle.h" 5 #include "base/threading/sequenced_task_runner_handle.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 10 matching lines...) Expand all
21 21
22 } // namespace 22 } // namespace
23 23
24 // static 24 // static
25 scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() { 25 scoped_refptr<SequencedTaskRunner> SequencedTaskRunnerHandle::Get() {
26 // Return the registered SequencedTaskRunner, if any. 26 // Return the registered SequencedTaskRunner, if any.
27 const SequencedTaskRunnerHandle* handle = lazy_tls_ptr.Pointer()->Get(); 27 const SequencedTaskRunnerHandle* handle = lazy_tls_ptr.Pointer()->Get();
28 if (handle) { 28 if (handle) {
29 // Various modes of setting SequencedTaskRunnerHandle don't combine. 29 // Various modes of setting SequencedTaskRunnerHandle don't combine.
30 DCHECK(!base::ThreadTaskRunnerHandle::IsSet()); 30 DCHECK(!base::ThreadTaskRunnerHandle::IsSet());
31 DCHECK(!SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid()); 31 DCHECK(!SequencedWorkerPool::GetSequencedTaskRunnerForCurrentThread());
32 return handle->task_runner_; 32 return handle->task_runner_;
33 } 33 }
34 34
35 // If we are on a worker thread for a SequencedBlockingPool that is running a 35 // Return the SequencedTaskRunner obtained from SequencedWorkerPool, if any.
36 // sequenced task, return a SequencedTaskRunner for it. 36 scoped_refptr<base::SequencedTaskRunner> task_runner =
37 scoped_refptr<base::SequencedWorkerPool> pool = 37 SequencedWorkerPool::GetSequencedTaskRunnerForCurrentThread();
38 SequencedWorkerPool::GetWorkerPoolForCurrentThread(); 38 if (task_runner) {
39 if (pool) { 39 DCHECK(!base::ThreadTaskRunnerHandle::IsSet());
40 SequencedWorkerPool::SequenceToken sequence_token = 40 return task_runner;
41 SequencedWorkerPool::GetSequenceTokenForCurrentThread();
42 DCHECK(sequence_token.IsValid());
43 DCHECK(pool->IsRunningSequenceOnCurrentThread(sequence_token));
44 return pool->GetSequencedTaskRunner(sequence_token);
45 } 41 }
46 42
47 // Return the SingleThreadTaskRunner for the current thread otherwise. 43 // Return the SingleThreadTaskRunner for the current thread otherwise.
48 return base::ThreadTaskRunnerHandle::Get(); 44 return base::ThreadTaskRunnerHandle::Get();
49 } 45 }
50 46
51 // static 47 // static
52 bool SequencedTaskRunnerHandle::IsSet() { 48 bool SequencedTaskRunnerHandle::IsSet() {
53 return lazy_tls_ptr.Pointer()->Get() || 49 return lazy_tls_ptr.Pointer()->Get() ||
54 SequencedWorkerPool::GetSequenceTokenForCurrentThread().IsValid() || 50 SequencedWorkerPool::GetWorkerPoolForCurrentThread() ||
55 base::ThreadTaskRunnerHandle::IsSet(); 51 base::ThreadTaskRunnerHandle::IsSet();
56 } 52 }
57 53
58 SequencedTaskRunnerHandle::SequencedTaskRunnerHandle( 54 SequencedTaskRunnerHandle::SequencedTaskRunnerHandle(
59 scoped_refptr<SequencedTaskRunner> task_runner) 55 scoped_refptr<SequencedTaskRunner> task_runner)
60 : task_runner_(std::move(task_runner)) { 56 : task_runner_(std::move(task_runner)) {
61 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 57 DCHECK(task_runner_->RunsTasksOnCurrentThread());
62 DCHECK(!SequencedTaskRunnerHandle::IsSet()); 58 DCHECK(!SequencedTaskRunnerHandle::IsSet());
63 lazy_tls_ptr.Pointer()->Set(this); 59 lazy_tls_ptr.Pointer()->Set(this);
64 } 60 }
65 61
66 SequencedTaskRunnerHandle::~SequencedTaskRunnerHandle() { 62 SequencedTaskRunnerHandle::~SequencedTaskRunnerHandle() {
67 DCHECK(task_runner_->RunsTasksOnCurrentThread()); 63 DCHECK(task_runner_->RunsTasksOnCurrentThread());
68 DCHECK_EQ(lazy_tls_ptr.Pointer()->Get(), this); 64 DCHECK_EQ(lazy_tls_ptr.Pointer()->Get(), this);
69 lazy_tls_ptr.Pointer()->Set(nullptr); 65 lazy_tls_ptr.Pointer()->Set(nullptr);
70 } 66 }
71 67
72 } // namespace base 68 } // namespace base
OLDNEW
« no previous file with comments | « base/threading/sequenced_task_runner_handle.h ('k') | base/threading/sequenced_task_runner_handle_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698