1*6777b538SAndroid Build Coastguard Worker // Copyright 2018 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/threading/platform_thread.h" 6*6777b538SAndroid Build Coastguard Worker #include "base/threading/thread_id_name_manager.h" 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/task/current_thread.h" 9*6777b538SAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/base/attributes.h" 10*6777b538SAndroid Build Coastguard Worker 11*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_FUCHSIA) 12*6777b538SAndroid Build Coastguard Worker #include "base/fuchsia/scheduler.h" 13*6777b538SAndroid Build Coastguard Worker #endif 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 ABSL_CONST_INIT thread_local ThreadType current_thread_type = 20*6777b538SAndroid Build Coastguard Worker ThreadType::kDefault; 21*6777b538SAndroid Build Coastguard Worker 22*6777b538SAndroid Build Coastguard Worker } // namespace 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker // static SetCurrentThreadType(ThreadType thread_type)25*6777b538SAndroid Build Coastguard Workervoid PlatformThreadBase::SetCurrentThreadType(ThreadType thread_type) { 26*6777b538SAndroid Build Coastguard Worker MessagePumpType message_pump_type = MessagePumpType::DEFAULT; 27*6777b538SAndroid Build Coastguard Worker if (CurrentIOThread::IsSet()) { 28*6777b538SAndroid Build Coastguard Worker message_pump_type = MessagePumpType::IO; 29*6777b538SAndroid Build Coastguard Worker } 30*6777b538SAndroid Build Coastguard Worker #if !BUILDFLAG(IS_NACL) 31*6777b538SAndroid Build Coastguard Worker else if (CurrentUIThread::IsSet()) { 32*6777b538SAndroid Build Coastguard Worker message_pump_type = MessagePumpType::UI; 33*6777b538SAndroid Build Coastguard Worker } 34*6777b538SAndroid Build Coastguard Worker #endif 35*6777b538SAndroid Build Coastguard Worker internal::SetCurrentThreadType(thread_type, message_pump_type); 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // static GetCurrentThreadType()39*6777b538SAndroid Build Coastguard WorkerThreadType PlatformThreadBase::GetCurrentThreadType() { 40*6777b538SAndroid Build Coastguard Worker return current_thread_type; 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker // static GetThreadLeewayOverride()44*6777b538SAndroid Build Coastguard Workerstd::optional<TimeDelta> PlatformThreadBase::GetThreadLeewayOverride() { 45*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_FUCHSIA) 46*6777b538SAndroid Build Coastguard Worker // On Fuchsia, all audio threads run with the CPU scheduling profile that uses 47*6777b538SAndroid Build Coastguard Worker // an interval of |kAudioSchedulingPeriod|. Using the default leeway may lead 48*6777b538SAndroid Build Coastguard Worker // to some tasks posted to audio threads to be executed too late (see 49*6777b538SAndroid Build Coastguard Worker // http://crbug.com/1368858). 50*6777b538SAndroid Build Coastguard Worker if (GetCurrentThreadType() == ThreadType::kRealtimeAudio) 51*6777b538SAndroid Build Coastguard Worker return kAudioSchedulingPeriod; 52*6777b538SAndroid Build Coastguard Worker #endif 53*6777b538SAndroid Build Coastguard Worker return std::nullopt; 54*6777b538SAndroid Build Coastguard Worker } 55*6777b538SAndroid Build Coastguard Worker 56*6777b538SAndroid Build Coastguard Worker // static SetNameCommon(const std::string & name)57*6777b538SAndroid Build Coastguard Workervoid PlatformThreadBase::SetNameCommon(const std::string& name) { 58*6777b538SAndroid Build Coastguard Worker ThreadIdNameManager::GetInstance()->SetName(name); 59*6777b538SAndroid Build Coastguard Worker } 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker namespace internal { 62*6777b538SAndroid Build Coastguard Worker SetCurrentThreadType(ThreadType thread_type,MessagePumpType pump_type_hint)63*6777b538SAndroid Build Coastguard Workervoid SetCurrentThreadType(ThreadType thread_type, 64*6777b538SAndroid Build Coastguard Worker MessagePumpType pump_type_hint) { 65*6777b538SAndroid Build Coastguard Worker CHECK_LE(thread_type, ThreadType::kMaxValue); 66*6777b538SAndroid Build Coastguard Worker SetCurrentThreadTypeImpl(thread_type, pump_type_hint); 67*6777b538SAndroid Build Coastguard Worker current_thread_type = thread_type; 68*6777b538SAndroid Build Coastguard Worker } 69*6777b538SAndroid Build Coastguard Worker 70*6777b538SAndroid Build Coastguard Worker } // namespace internal 71*6777b538SAndroid Build Coastguard Worker 72*6777b538SAndroid Build Coastguard Worker } // namespace base 73