1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_TASK_DELAY_POLICY_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_TASK_DELAY_POLICY_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker namespace base { 11*6777b538SAndroid Build Coastguard Worker namespace subtle { 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker // Policies affecting how a delayed task is scheduled when a TimeTicks is 14*6777b538SAndroid Build Coastguard Worker // specified. 15*6777b538SAndroid Build Coastguard Worker enum class DelayPolicy { 16*6777b538SAndroid Build Coastguard Worker // A delayed task with kFlexibleNoSooner may not run any sooner than the 17*6777b538SAndroid Build Coastguard Worker // specified time, but might run slightly after. This is the behavior implied 18*6777b538SAndroid Build Coastguard Worker // by PostDelayedTask. 19*6777b538SAndroid Build Coastguard Worker kFlexibleNoSooner, 20*6777b538SAndroid Build Coastguard Worker // A delayed task with kFlexiblePreferEarly means the task should attempt to 21*6777b538SAndroid Build Coastguard Worker // run near the deadline and preferably a little bit before than after if the 22*6777b538SAndroid Build Coastguard Worker // scheduler applies slack. 23*6777b538SAndroid Build Coastguard Worker kFlexiblePreferEarly, 24*6777b538SAndroid Build Coastguard Worker // A delayed task with kPrecise means it may not run any sooner than the 25*6777b538SAndroid Build Coastguard Worker // specified time and preferably as close as possible to the specified time, 26*6777b538SAndroid Build Coastguard Worker // which may affect scheduling policies if the scheduler usually applies 27*6777b538SAndroid Build Coastguard Worker // slack. 28*6777b538SAndroid Build Coastguard Worker kPrecise, 29*6777b538SAndroid Build Coastguard Worker }; 30*6777b538SAndroid Build Coastguard Worker MaybeOverrideDelayPolicy(DelayPolicy delay_policy,TimeDelta delay,TimeDelta max_precise_delay)31*6777b538SAndroid Build Coastguard Workerinline DelayPolicy MaybeOverrideDelayPolicy(DelayPolicy delay_policy, 32*6777b538SAndroid Build Coastguard Worker TimeDelta delay, 33*6777b538SAndroid Build Coastguard Worker TimeDelta max_precise_delay) { 34*6777b538SAndroid Build Coastguard Worker if (delay >= max_precise_delay && delay_policy == DelayPolicy::kPrecise) { 35*6777b538SAndroid Build Coastguard Worker return DelayPolicy::kFlexibleNoSooner; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker return delay_policy; 38*6777b538SAndroid Build Coastguard Worker } 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker } // namespace subtle 41*6777b538SAndroid Build Coastguard Worker } // namespace base 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker #endif // BASE_TASK_DELAY_POLICY_H_ 44