1 // Copyright 2021 The Chromium Authors 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_DELAY_POLICY_H_ 6 #define BASE_TASK_DELAY_POLICY_H_ 7 8 #include "base/time/time.h" 9 10 namespace base { 11 namespace subtle { 12 13 // Policies affecting how a delayed task is scheduled when a TimeTicks is 14 // specified. 15 enum class DelayPolicy { 16 // A delayed task with kFlexibleNoSooner may not run any sooner than the 17 // specified time, but might run slightly after. This is the behavior implied 18 // by PostDelayedTask. 19 kFlexibleNoSooner, 20 // A delayed task with kFlexiblePreferEarly means the task should attempt to 21 // run near the deadline and preferably a little bit before than after if the 22 // scheduler applies slack. 23 kFlexiblePreferEarly, 24 // A delayed task with kPrecise means it may not run any sooner than the 25 // specified time and preferably as close as possible to the specified time, 26 // which may affect scheduling policies if the scheduler usually applies 27 // slack. 28 kPrecise, 29 }; 30 MaybeOverrideDelayPolicy(DelayPolicy delay_policy,TimeDelta delay,TimeDelta max_precise_delay)31inline DelayPolicy MaybeOverrideDelayPolicy(DelayPolicy delay_policy, 32 TimeDelta delay, 33 TimeDelta max_precise_delay) { 34 if (delay >= max_precise_delay && delay_policy == DelayPolicy::kPrecise) { 35 return DelayPolicy::kFlexibleNoSooner; 36 } 37 return delay_policy; 38 } 39 40 } // namespace subtle 41 } // namespace base 42 43 #endif // BASE_TASK_DELAY_POLICY_H_ 44