1*6777b538SAndroid Build Coastguard Worker // Copyright 2019 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/task/thread_pool.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include "base/check.h" 8*6777b538SAndroid Build Coastguard Worker #include "base/task/scoped_set_task_priority_for_current_thread.h" 9*6777b538SAndroid Build Coastguard Worker #include "base/task/task_traits.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/task/thread_pool/thread_pool_impl.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/task/thread_pool/thread_pool_instance.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/threading/post_task_and_reply_impl.h" 13*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker namespace base { 16*6777b538SAndroid Build Coastguard Worker 17*6777b538SAndroid Build Coastguard Worker namespace { 18*6777b538SAndroid Build Coastguard Worker 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker internal::ThreadPoolImpl* GetThreadPoolImpl() { 21*6777b538SAndroid Build Coastguard Worker auto* instance = ThreadPoolInstance::Get(); 22*6777b538SAndroid Build Coastguard Worker DCHECK(instance) 23*6777b538SAndroid Build Coastguard Worker << "No threadpool instance for this process. See the 'Prerequisite' " 24*6777b538SAndroid Build Coastguard Worker "section of base/task/thread_pool.h.\n" 25*6777b538SAndroid Build Coastguard Worker "Hint: if this is in a unit test, you're likely merely missing a " 26*6777b538SAndroid Build Coastguard Worker "base::test::TaskEnvironment member in your fixture (or your fixture " 27*6777b538SAndroid Build Coastguard Worker "is using a base::test::SingleThreadTaskEnvironment and now needs a " 28*6777b538SAndroid Build Coastguard Worker "full base::test::TaskEnvironment).\n"; 29*6777b538SAndroid Build Coastguard Worker return static_cast<internal::ThreadPoolImpl*>(instance); 30*6777b538SAndroid Build Coastguard Worker } 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker } // namespace 33*6777b538SAndroid Build Coastguard Worker 34*6777b538SAndroid Build Coastguard Worker // static 35*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostTask(const Location& from_here, OnceClosure task) { 36*6777b538SAndroid Build Coastguard Worker return ThreadPool::PostDelayedTask(from_here, std::move(task), TimeDelta()); 37*6777b538SAndroid Build Coastguard Worker } 38*6777b538SAndroid Build Coastguard Worker 39*6777b538SAndroid Build Coastguard Worker // static 40*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostDelayedTask(const Location& from_here, 41*6777b538SAndroid Build Coastguard Worker OnceClosure task, 42*6777b538SAndroid Build Coastguard Worker TimeDelta delay) { 43*6777b538SAndroid Build Coastguard Worker return ThreadPool::PostDelayedTask(from_here, {}, std::move(task), delay); 44*6777b538SAndroid Build Coastguard Worker } 45*6777b538SAndroid Build Coastguard Worker 46*6777b538SAndroid Build Coastguard Worker // static 47*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostTaskAndReply(const Location& from_here, 48*6777b538SAndroid Build Coastguard Worker OnceClosure task, 49*6777b538SAndroid Build Coastguard Worker OnceClosure reply) { 50*6777b538SAndroid Build Coastguard Worker return ThreadPool::PostTaskAndReply(from_here, {}, std::move(task), 51*6777b538SAndroid Build Coastguard Worker std::move(reply)); 52*6777b538SAndroid Build Coastguard Worker } 53*6777b538SAndroid Build Coastguard Worker 54*6777b538SAndroid Build Coastguard Worker // static 55*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostTask(const Location& from_here, 56*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits, 57*6777b538SAndroid Build Coastguard Worker OnceClosure task) { 58*6777b538SAndroid Build Coastguard Worker return ThreadPool::PostDelayedTask(from_here, traits, std::move(task), 59*6777b538SAndroid Build Coastguard Worker TimeDelta()); 60*6777b538SAndroid Build Coastguard Worker } 61*6777b538SAndroid Build Coastguard Worker 62*6777b538SAndroid Build Coastguard Worker // static 63*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostDelayedTask(const Location& from_here, 64*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits, 65*6777b538SAndroid Build Coastguard Worker OnceClosure task, 66*6777b538SAndroid Build Coastguard Worker TimeDelta delay) { 67*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->PostDelayedTask(from_here, traits, 68*6777b538SAndroid Build Coastguard Worker std::move(task), delay); 69*6777b538SAndroid Build Coastguard Worker } 70*6777b538SAndroid Build Coastguard Worker 71*6777b538SAndroid Build Coastguard Worker // static 72*6777b538SAndroid Build Coastguard Worker bool ThreadPool::PostTaskAndReply(const Location& from_here, 73*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits, 74*6777b538SAndroid Build Coastguard Worker OnceClosure task, 75*6777b538SAndroid Build Coastguard Worker OnceClosure reply) { 76*6777b538SAndroid Build Coastguard Worker return internal::PostTaskAndReplyImpl( 77*6777b538SAndroid Build Coastguard Worker [&traits](const Location& location, OnceClosure task) { 78*6777b538SAndroid Build Coastguard Worker return ThreadPool::PostTask(location, traits, std::move(task)); 79*6777b538SAndroid Build Coastguard Worker }, 80*6777b538SAndroid Build Coastguard Worker from_here, std::move(task), std::move(reply)); 81*6777b538SAndroid Build Coastguard Worker } 82*6777b538SAndroid Build Coastguard Worker 83*6777b538SAndroid Build Coastguard Worker // static 84*6777b538SAndroid Build Coastguard Worker scoped_refptr<TaskRunner> ThreadPool::CreateTaskRunner( 85*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits) { 86*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->CreateTaskRunner(traits); 87*6777b538SAndroid Build Coastguard Worker } 88*6777b538SAndroid Build Coastguard Worker 89*6777b538SAndroid Build Coastguard Worker // static 90*6777b538SAndroid Build Coastguard Worker scoped_refptr<SequencedTaskRunner> ThreadPool::CreateSequencedTaskRunner( 91*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits) { 92*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->CreateSequencedTaskRunner(traits); 93*6777b538SAndroid Build Coastguard Worker } 94*6777b538SAndroid Build Coastguard Worker 95*6777b538SAndroid Build Coastguard Worker // static 96*6777b538SAndroid Build Coastguard Worker scoped_refptr<UpdateableSequencedTaskRunner> 97*6777b538SAndroid Build Coastguard Worker ThreadPool::CreateUpdateableSequencedTaskRunner(const TaskTraits& traits) { 98*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->CreateUpdateableSequencedTaskRunner(traits); 99*6777b538SAndroid Build Coastguard Worker } 100*6777b538SAndroid Build Coastguard Worker 101*6777b538SAndroid Build Coastguard Worker // static 102*6777b538SAndroid Build Coastguard Worker scoped_refptr<SingleThreadTaskRunner> ThreadPool::CreateSingleThreadTaskRunner( 103*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits, 104*6777b538SAndroid Build Coastguard Worker SingleThreadTaskRunnerThreadMode thread_mode) { 105*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->CreateSingleThreadTaskRunner(traits, thread_mode); 106*6777b538SAndroid Build Coastguard Worker } 107*6777b538SAndroid Build Coastguard Worker 108*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 109*6777b538SAndroid Build Coastguard Worker // static 110*6777b538SAndroid Build Coastguard Worker scoped_refptr<SingleThreadTaskRunner> ThreadPool::CreateCOMSTATaskRunner( 111*6777b538SAndroid Build Coastguard Worker const TaskTraits& traits, 112*6777b538SAndroid Build Coastguard Worker SingleThreadTaskRunnerThreadMode thread_mode) { 113*6777b538SAndroid Build Coastguard Worker return GetThreadPoolImpl()->CreateCOMSTATaskRunner(traits, thread_mode); 114*6777b538SAndroid Build Coastguard Worker } 115*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) 116*6777b538SAndroid Build Coastguard Worker 117*6777b538SAndroid Build Coastguard Worker } // namespace base 118