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