| // Copyright 2018 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/platform_thread.h" |
| |
| #include <memory> |
| |
| #include "base/feature_list.h" |
| |
| namespace base { |
| |
| namespace { |
| |
| // Whether thread priorities should be used. When disabled, |
| // PlatformThread::SetCurrentThreadPriority() no-ops. |
| const Feature kThreadPrioritiesFeature{"ThreadPriorities", |
| FEATURE_ENABLED_BY_DEFAULT}; |
| |
| // Whether thread priorities should be used. |
| // |
| // PlatformThread::SetCurrentThreadPriority() doesn't query the state of the |
| // feature directly because FeatureList initialization is not always |
| // synchronized with PlatformThread::SetCurrentThreadPriority(). |
| std::atomic<bool> g_use_thread_priorities(true); |
| |
| } // namespace |
| |
| // static |
| void PlatformThread::SetCurrentThreadPriority(ThreadPriority priority) { |
| if (g_use_thread_priorities.load()) |
| SetCurrentThreadPriorityImpl(priority); |
| } |
| |
| namespace internal { |
| |
| void InitializeThreadPrioritiesFeature() { |
| // A DCHECK is triggered on FeatureList initialization if the state of a |
| // feature has been checked before. To avoid triggering this DCHECK in unit |
| // tests that call this before initializing the FeatureList, only check the |
| // state of the feature if the FeatureList is initialized. |
| if (FeatureList::GetInstance() && |
| !FeatureList::IsEnabled(kThreadPrioritiesFeature)) { |
| g_use_thread_priorities.store(false); |
| } |
| } |
| |
| } // namespace internal |
| |
| } // namespace base |