| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef BASE_MESSAGE_LOOP_TIMER_SLACK_H_ |
| #define BASE_MESSAGE_LOOP_TIMER_SLACK_H_ |
| |
| #include "base/base_export.h" |
| #include "base/time/time.h" |
| |
| namespace base { |
| |
| struct Feature; |
| |
| // Amount of timer slack to use for delayed timers. Increasing timer slack |
| // allows the OS to coalesce timers more effectively. |
| enum TimerSlack { |
| // Lowest value for timer slack allowed by OS. |
| TIMER_SLACK_NONE, |
| |
| // Maximal value for timer slack allowed by OS. |
| TIMER_SLACK_MAXIMUM |
| }; |
| |
| // TODO(https://crbug.com/1181297): Remove ludicrous slack once the experiment |
| // is finished. |
| |
| // Returns true if the ludicrous timer slack experiment is enabled. |
| BASE_EXPORT bool IsLudicrousTimerSlackEnabled(); |
| |
| // Allows suspending and resuming the ludicrous timer slack experiment for the |
| // current process. Suspend/resume maintain a per-process count, and |
| // IsLudicrousTimerSlackSuspended() will return true iff the suspend count is |
| // greater than zero. Note that threads that are already sleeping when the |
| // suspend count increments from zero will be unaffected by the suspension until |
| // they next wake up. |
| BASE_EXPORT void SuspendLudicrousTimerSlack(); |
| BASE_EXPORT void ResumeLudicrousTimerSlack(); |
| BASE_EXPORT bool IsLudicrousTimerSlackSuspended(); |
| |
| // Returns the slack for the experiment. |
| BASE_EXPORT base::TimeDelta GetLudicrousTimerSlack(); |
| |
| namespace features { |
| |
| // Exposed for testing. |
| BASE_EXPORT extern const base::Feature kLudicrousTimerSlack; |
| |
| } // namespace features |
| |
| } // namespace base |
| |
| #endif // BASE_MESSAGE_LOOP_TIMER_SLACK_H_ |