blob: 5d6af1f5eba45df3bd50ea85c1d1ea47c3cea4ff [file] [log] [blame]
Leszek Swirski2987cc82018-11-05 15:19:281// 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"
Etienne Pierre-Dorayd6b575b22018-11-21 19:32:299#include "base/metrics/field_trial_params.h"
Aditya Keerthia41eda52019-04-01 15:03:2510#include "build/build_config.h"
Leszek Swirski2987cc82018-11-05 15:19:2811
12namespace base {
13
14struct Feature;
Francois Doray5b44e33f2018-11-09 22:08:1315
16extern const BASE_EXPORT Feature kAllTasksUserBlocking;
Etienne Pierre-Dorayd6b575b22018-11-21 19:32:2917
Gabriel Charette3e2898f2019-05-01 14:55:0118// Under this feature, unused threads in ThreadGroup are only detached
Etienne Pierre-Dorayf9ef2182018-12-13 14:45:4219// if the total number of threads in the pool is above the initial capacity.
20extern const BASE_EXPORT Feature kNoDetachBelowInitialCapacity;
21
Etienne Pierre-doray3ed41382019-02-06 04:40:4722// Under this feature, workers blocked with MayBlock are replaced immediately
Etienne Pierre-dorayf7d85262019-11-20 23:37:0623// instead of waiting for a threshold in the foreground thread group.
Etienne Pierre-doray3ed41382019-02-06 04:40:4724extern const BASE_EXPORT Feature kMayBlockWithoutDelay;
25
Etienne Pierre-doraydf14eaab2020-03-26 16:01:4126// Under this feature, best effort capacity is never increased.
27// While it's unlikely we'd ship this as-is, this experiment allows us to
28// determine whether blocked worker replacement logic on best-effort tasks has
29// any impact on guardian metrics.
30extern const BASE_EXPORT Feature kFixedMaxBestEffortTasks;
31
Avi Drissman5b286372020-07-28 21:59:3832#if defined(OS_WIN) || defined(OS_APPLE)
Francois Doray7f777312019-05-16 12:26:3133#define HAS_NATIVE_THREAD_POOL() 1
34#else
35#define HAS_NATIVE_THREAD_POOL() 0
36#endif
37
38#if HAS_NATIVE_THREAD_POOL()
Gabriel Charette43fd3702019-05-29 16:36:5139// Under this feature, ThreadPoolImpl will use a ThreadGroup backed by a
Aditya Keerthia41eda52019-04-01 15:03:2540// native thread pool implementation. The Windows Thread Pool API and
41// libdispatch are used on Windows and macOS/iOS respectively.
42extern const BASE_EXPORT Feature kUseNativeThreadPool;
43#endif
44
Francois Doraya20b6df22019-06-27 15:04:1945// Whether threads in the ThreadPool should be reclaimed after being idle for 5
46// minutes, instead of 30 seconds.
47extern const BASE_EXPORT Feature kUseFiveMinutesThreadReclaimTime;
48
Leszek Swirski2987cc82018-11-05 15:19:2849} // namespace base
50
51#endif // BASE_TASK_TASK_FEATURES_H_