// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/task/task_features.h" #include <atomic> #include "base/base_export.h" #include "base/feature_list.h" #include "build/build_config.h" namespace base { // Note to implementers: thread pool code using task features must absolutely // not invoke FeatureList::IsEnabled outside of the main thread. Doing so // causes data races between worker threads and ~FeatureList when tests end // (crbug.com/1344573). A reliable moment to query and cache the feature state // is on ThreadPoolImpl::Start (and thus also on the first WorkerThread::Start, // not the later ones) as this is invoked from the main thread after // initializing the FeatureList. If caching the feature state in a static, you // must be aware that all tests sharing a process will have the same state, // regardless of future ScopedFeatureList instances. BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); const base::FeatureParam<TimeDelta> kTaskLeewayParam{ … }; const base::FeatureParam<TimeDelta> kMaxPreciseDelay{ … }; BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); BASE_FEATURE(…); #endif BASE_FEATURE(…); const base::FeatureParam<int> kThreadPoolCapRestrictedCount{ … }; BASE_FEATURE(…); const base::FeatureParam<int> kMaxDelayedStarvationTasksParam{ … }; BASE_FEATURE(…); const base::FeatureParam<int> kMaxNumWorkersCreated{ … }; } // namespace base