xref: /aosp_15_r20/external/cronet/base/task/delay_policy.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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 Worker inline 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