blob: f84c41cb684062bf91b8881d58b49469e778de33 [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#ifndef BASE_TASK_TASK_FEATURES_H_
6#define BASE_TASK_TASK_FEATURES_H_
7
8#include "base/base_export.h"
Anthony Vallee-Dubois9dbbbda32022-08-26 01:25:319#include "base/feature_list.h"
Etienne Pierre-Dorayd6b575b22018-11-21 19:32:2910#include "base/metrics/field_trial_params.h"
Aditya Keerthia41eda52019-04-01 15:03:2511#include "build/build_config.h"
Leszek Swirski2987cc82018-11-05 15:19:2812
13namespace base {
14
Edgar Arriaga453bcb12023-09-12 23:09:0115// Fixed amount of threads that will be used as a cap for thread pools.
16BASE_EXPORT BASE_DECLARE_FEATURE(kThreadPoolCap2);
Edgar Arriagad096f402023-05-02 15:39:2417
Takashi Toyoshimacff0ce62025-01-17 14:32:1218BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(int, kThreadPoolCapRestrictedCount);
Edgar Arriagad096f402023-05-02 15:39:2419
Zhibo Wangf8950ab62022-12-09 05:33:4220// Under this feature, a utility_thread_group will be created for
21// running USER_VISIBLE tasks.
22BASE_EXPORT BASE_DECLARE_FEATURE(kUseUtilityThreadGroup);
23
Etienne Pierre-doraya8792732022-02-05 02:27:2524// Under this feature, a non-zero leeway is added to delayed tasks. Along with
25// DelayPolicy, this affects the time at which a delayed task runs.
Daniel Cheng0fff5c232022-09-21 17:43:3426BASE_EXPORT BASE_DECLARE_FEATURE(kAddTaskLeewayFeature);
Etienne Pierre-dorayd5cdda492023-07-05 18:20:1427#if BUILDFLAG(IS_WIN)
28constexpr TimeDelta kDefaultLeeway = Milliseconds(16);
29#else
Jiahe Zhang07cf33132022-08-09 09:42:4930constexpr TimeDelta kDefaultLeeway = Milliseconds(8);
Etienne Pierre-dorayd5cdda492023-07-05 18:20:1431#endif // #if !BUILDFLAG(IS_WIN)
Takashi Toyoshimacff0ce62025-01-17 14:32:1232BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(TimeDelta, kTaskLeewayParam);
Etienne Pierre-doraya8792732022-02-05 02:27:2533
Etienne Pierre-doray77474c902023-09-27 20:23:0934// We consider that delayed tasks above |kMaxPreciseDelay| never need
35// DelayPolicy::kPrecise. The default value is slightly above 30Hz timer.
36constexpr TimeDelta kDefaultMaxPreciseDelay = Milliseconds(36);
Takashi Toyoshimacff0ce62025-01-17 14:32:1237BASE_EXPORT BASE_DECLARE_FEATURE_PARAM(TimeDelta, kMaxPreciseDelay);
Etienne Pierre-doray77474c902023-09-27 20:23:0938
Jiahe Zhang07cf33132022-08-09 09:42:4939// Under this feature, wake ups are aligned at a 8ms boundary when allowed per
Etienne Pierre-doray048472eb2022-02-07 16:24:4840// DelayPolicy.
Daniel Cheng0fff5c232022-09-21 17:43:3441BASE_EXPORT BASE_DECLARE_FEATURE(kAlignWakeUps);
Etienne Pierre-doray048472eb2022-02-07 16:24:4842
Etienne Pierre-doray1f2b04e2023-09-05 20:23:5643// Under this feature, slack is added on mac message pumps that support it when
44// allowed per DelayPolicy.
45BASE_EXPORT BASE_DECLARE_FEATURE(kTimerSlackMac);
46
Etienne Pierre-dorayae2c15a2022-04-29 18:50:5947// Under this feature, tasks that need high resolution timer are determined
48// based on explicit DelayPolicy rather than based on a threshold.
Daniel Cheng0fff5c232022-09-21 17:43:3449BASE_EXPORT BASE_DECLARE_FEATURE(kExplicitHighResolutionTimerWin);
Etienne Pierre-dorayae2c15a2022-04-29 18:50:5950
Sean Maherbff1adc2024-04-10 20:33:4351// Under this feature, the Windows UI pump uses a WaitableEvent to wake itself
52// up when not in a native nested loop. It also uses different control flow,
53// calling Win32 MessagePump functions less often.
54BASE_EXPORT BASE_DECLARE_FEATURE(kUIPumpImprovementsWin);
55
Sean Maheracb46d72024-05-16 17:22:1556// Under this feature, the Android pump will call ALooper_PollOnce() rather than
57// unconditionally yielding to native to determine whether there exists native
58// work to be done before sleep.
59BASE_EXPORT BASE_DECLARE_FEATURE(kPumpFastToSleepAndroid);
60
Alex Attar9fcc01e2022-05-20 14:01:2761// Feature to run tasks by batches before pumping out messages.
Daniel Cheng0fff5c232022-09-21 17:43:3462BASE_EXPORT BASE_DECLARE_FEATURE(kRunTasksByBatches);
Alex Attar9fcc01e2022-05-20 14:01:2763
Leszek Swirski2987cc82018-11-05 15:19:2864} // namespace base
65
66#endif // BASE_TASK_TASK_FEATURES_H_