blob: fd5921ac81246d2b945c19a841a13f9d87c3f03b [file] [log] [blame]
Avi Drissmane4622aa2022-09-08 20:36:061// Copyright 2018 The Chromium Authors
Leszek Swirski2987cc82018-11-05 15:19:282// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/task/task_features.h"
6
Hans-Filip Eloa7745f42022-10-18 18:41:227#include <atomic>
8
David Sanders6e709942022-04-05 06:49:269#include "base/base_export.h"
Leszek Swirski2987cc82018-11-05 15:19:2810#include "base/feature_list.h"
11
12namespace base {
13
Francois Dorayee4a5532021-03-30 00:17:1714#if HAS_NATIVE_THREAD_POOL()
Daniel Cheng0fff5c232022-09-21 17:43:3415BASE_FEATURE(kUseNativeThreadPool,
16 "UseNativeThreadPool",
17 base::FEATURE_DISABLED_BY_DEFAULT);
18BASE_FEATURE(kUseBackgroundNativeThreadPool,
19 "UseBackgroundNativeThreadPool",
20 base::FEATURE_DISABLED_BY_DEFAULT);
Aditya Keerthia41eda52019-04-01 15:03:2521#endif
22
Daniel Cheng0fff5c232022-09-21 17:43:3423BASE_FEATURE(kNoWorkerThreadReclaim,
24 "NoWorkerThreadReclaim",
25 base::FEATURE_DISABLED_BY_DEFAULT);
Francois Doraya20b6df22019-06-27 15:04:1926
Patrick Monette6497eae2022-08-09 17:59:5827// static
Daniel Cheng0fff5c232022-09-21 17:43:3428BASE_FEATURE(kNoWakeUpsForCanceledTasks,
29 "NoWakeUpsForCanceledTasks",
30 FEATURE_DISABLED_BY_DEFAULT);
Patrick Monette6497eae2022-08-09 17:59:5831
Daniel Cheng0fff5c232022-09-21 17:43:3432BASE_FEATURE(kRemoveCanceledTasksInTaskQueue,
33 "RemoveCanceledTasksInTaskQueue2",
34 base::FEATURE_DISABLED_BY_DEFAULT);
Patrick Monetteeaaa2382021-12-08 17:06:5935
Daniel Cheng0fff5c232022-09-21 17:43:3436BASE_FEATURE(kAlwaysAbandonScheduledTask,
37 "AlwaysAbandonScheduledTask",
38 base::FEATURE_DISABLED_BY_DEFAULT);
Patrick Monette4efba9c2022-08-18 16:41:3239
Daniel Cheng0fff5c232022-09-21 17:43:3440BASE_FEATURE(kAddTaskLeewayFeature,
41 "AddTaskLeeway",
42 base::FEATURE_ENABLED_BY_DEFAULT);
Etienne Pierre-doraya8792732022-02-05 02:27:2543
44const base::FeatureParam<TimeDelta> kTaskLeewayParam{&kAddTaskLeewayFeature,
Jiahe Zhang07cf33132022-08-09 09:42:4945 "leeway", kDefaultLeeway};
Etienne Pierre-doraya8792732022-02-05 02:27:2546
Sergey Ulanov2523ae872022-09-29 19:20:4647BASE_FEATURE(kAlignWakeUps, "AlignWakeUps", base::FEATURE_ENABLED_BY_DEFAULT);
Etienne Pierre-doray048472eb2022-02-07 16:24:4848
Daniel Cheng0fff5c232022-09-21 17:43:3449BASE_FEATURE(kExplicitHighResolutionTimerWin,
50 "ExplicitHighResolutionTimerWin",
51 base::FEATURE_DISABLED_BY_DEFAULT);
Etienne Pierre-dorayae2c15a2022-04-29 18:50:5952
Daniel Cheng0fff5c232022-09-21 17:43:3453BASE_FEATURE(kRunTasksByBatches,
54 "RunTasksByBatches",
55 base::FEATURE_DISABLED_BY_DEFAULT);
Alex Attar9fcc01e2022-05-20 14:01:2756
Daniel Cheng0fff5c232022-09-21 17:43:3457BASE_FEATURE(kBrowserPeriodicYieldingToNative,
58 "BrowserPeriodicYieldingToNative",
59 base::FEATURE_DISABLED_BY_DEFAULT);
Stephen Nusko408b9a92022-09-15 10:03:5760
61const BASE_EXPORT base::FeatureParam<base::TimeDelta>
62 kBrowserPeriodicYieldingToNativeNormalInputAfterMsParam{
63 &kBrowserPeriodicYieldingToNative,
64 "yield_to_android_looper_after_ms_normal_input", base::Milliseconds(8)};
65
66const BASE_EXPORT base::FeatureParam<base::TimeDelta>
67 kBrowserPeriodicYieldingToNativeFlingInputAfterMsParam{
68 &kBrowserPeriodicYieldingToNative,
69 "yield_to_android_looper_after_ms_fling_input", base::Milliseconds(16)};
70
71const BASE_EXPORT base::FeatureParam<base::TimeDelta>
72 kBrowserPeriodicYieldingToNativeNoInputAfterMsParam{
73 &kBrowserPeriodicYieldingToNative,
74 "yield_to_android_looper_after_ms_no_input", base::Milliseconds(100)};
75
76const BASE_EXPORT base::FeatureParam<base::TimeDelta>
77 kBrowserPeriodicYieldingToNativeDelay{&kBrowserPeriodicYieldingToNative,
78 "non_delayed_looper_defer_for_ns",
79 base::Nanoseconds(500000)};
80
Jiahe Zhang07cf33132022-08-09 09:42:4981// Leeway value applied to delayed tasks. An atomic is used here because the
82// value is queried from multiple threads.
83std::atomic<TimeDelta> g_task_leeway{kDefaultLeeway};
84
85BASE_EXPORT void InitializeTaskLeeway() {
86 g_task_leeway.store(kTaskLeewayParam.Get(), std::memory_order_relaxed);
87}
88
89BASE_EXPORT TimeDelta GetTaskLeeway() {
90 return g_task_leeway.load(std::memory_order_relaxed);
91}
92
Francois Doray5b44e33f2018-11-09 22:08:1393} // namespace base