// 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.

#ifndef BASE_TASK_TASK_FEATURES_H_
#define BASE_TASK_TASK_FEATURES_H_

#include "base/base_export.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "build/build_config.h"

namespace base {

// Under this feature, a utility_thread_group will be created for
// running USER_VISIBLE tasks.
BASE_EXPORT BASE_DECLARE_FEATURE(kUseUtilityThreadGroup);

// Under this feature, worker threads are not reclaimed after a timeout. Rather,
// only excess workers are cleaned up immediately after finishing a task.
BASE_EXPORT BASE_DECLARE_FEATURE(kNoWorkerThreadReclaim);

// This feature controls whether wake ups are possible for canceled tasks.
BASE_EXPORT BASE_DECLARE_FEATURE(kNoWakeUpsForCanceledTasks);

// Controls whether or not canceled delayed tasks are removed from task queues.
BASE_EXPORT BASE_DECLARE_FEATURE(kRemoveCanceledTasksInTaskQueue);

// This feature controls whether or not the scheduled task is always abandoned
// when a timer is stopped or reset. The re-use of the scheduled task is an
// optimization that ensures a timer can not leave multiple canceled tasks in
// the task queue. Meant to be used in conjunction with
// kRemoveCanceledTasksInTaskQueue.
BASE_EXPORT BASE_DECLARE_FEATURE(kAlwaysAbandonScheduledTask);

// This feature controls whether ThreadPool WorkerThreads should hold off waking
// up to purge partition alloc within the first minute of their lifetime. See
// base::internal::GetSleepTimeBeforePurge.
BASE_EXPORT BASE_DECLARE_FEATURE(kDelayFirstWorkerWake);

// Under this feature, a non-zero leeway is added to delayed tasks. Along with
// DelayPolicy, this affects the time at which a delayed task runs.
BASE_EXPORT BASE_DECLARE_FEATURE(kAddTaskLeewayFeature);
constexpr TimeDelta kDefaultLeeway = Milliseconds(8);
extern const BASE_EXPORT base::FeatureParam<TimeDelta> kTaskLeewayParam;

// Under this feature, wake ups are aligned at a 8ms boundary when allowed per
// DelayPolicy.
BASE_EXPORT BASE_DECLARE_FEATURE(kAlignWakeUps);

// Under this feature, tasks that need high resolution timer are determined
// based on explicit DelayPolicy rather than based on a threshold.
BASE_EXPORT BASE_DECLARE_FEATURE(kExplicitHighResolutionTimerWin);

// Feature to run tasks by batches before pumping out messages.
BASE_EXPORT BASE_DECLARE_FEATURE(kRunTasksByBatches);

BASE_EXPORT void InitializeTaskLeeway();
BASE_EXPORT TimeDelta GetTaskLeewayForCurrentThread();
BASE_EXPORT TimeDelta GetDefaultTaskLeeway();

// Controls the max number of delayed tasks that can run before selecting an
// immediate task in sequence manager.
BASE_EXPORT BASE_DECLARE_FEATURE(kMaxDelayedStarvationTasks);
extern const BASE_EXPORT base::FeatureParam<int>
    kMaxDelayedStarvationTasksParam;

}  // namespace base

#endif  // BASE_TASK_TASK_FEATURES_H_
