1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_TASK_TASK_FEATURES_H_ 6 #define BASE_TASK_TASK_FEATURES_H_ 7 8 #include "base/base_export.h" 9 #include "base/metrics/field_trial_params.h" 10 #include "build/build_config.h" 11 12 namespace base { 13 14 struct Feature; 15 16 extern const BASE_EXPORT Feature kAllTasksUserBlocking; 17 18 // Under this feature, unused threads in ThreadGroup are only detached 19 // if the total number of threads in the pool is above the initial capacity. 20 extern const BASE_EXPORT Feature kNoDetachBelowInitialCapacity; 21 22 // Under this feature, workers blocked with MayBlock are replaced immediately 23 // instead of waiting for a threshold in the foreground thread group. 24 extern const BASE_EXPORT Feature kMayBlockWithoutDelay; 25 26 // Under this feature, ThreadPool::ShouldYield() always returns false 27 extern const BASE_EXPORT Feature kDisableJobYield; 28 // Under this feature, JobTaskSource doesn't use worker count in its sort key 29 // such that worker threads are not distributed among running jobs equally. 30 extern const BASE_EXPORT Feature kDisableFairJobScheduling; 31 // Under this feature, priority update on Jobs is disabled. 32 extern const BASE_EXPORT Feature kDisableJobUpdatePriority; 33 // Under this feature, another WorkerThread is signaled only after the current 34 // thread was assigned work. 35 extern const BASE_EXPORT Feature kWakeUpAfterGetWork; 36 37 // Strategy affecting how WorkerThreads are signaled to pick up pending work. 38 enum class WakeUpStrategy { 39 // A single thread scheduling new work signals all required WorkerThreads. 40 kCentralizedWakeUps, 41 // Each thread signals at most a single thread, either when scheduling new 42 // work or picking up pending work. 43 kSerializedWakeUps, 44 // Each thread signals at most 2 threads, either when scheduling new 45 // work or picking up pending work. 46 kExponentialWakeUps, 47 }; 48 49 // Under this feature, a given WakeUpStrategy param is used. 50 extern const BASE_EXPORT Feature kWakeUpStrategyFeature; 51 extern const BASE_EXPORT base::FeatureParam<WakeUpStrategy> 52 kWakeUpStrategyParam; 53 54 #if defined(OS_WIN) || defined(OS_APPLE) 55 #define HAS_NATIVE_THREAD_POOL() 1 56 #else 57 #define HAS_NATIVE_THREAD_POOL() 0 58 #endif 59 60 #if HAS_NATIVE_THREAD_POOL() 61 // Under this feature, ThreadPoolImpl will use a ThreadGroup backed by a 62 // native thread pool implementation. The Windows Thread Pool API and 63 // libdispatch are used on Windows and macOS/iOS respectively. 64 extern const BASE_EXPORT Feature kUseNativeThreadPool; 65 #endif 66 67 // Whether threads in the ThreadPool should be reclaimed after being idle for 5 68 // minutes, instead of 30 seconds. 69 extern const BASE_EXPORT Feature kUseFiveMinutesThreadReclaimTime; 70 71 } // namespace base 72 73 #endif // BASE_TASK_TASK_FEATURES_H_ 74