xref: /aosp_15_r20/external/cronet/base/task/thread_pool/task.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2016 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_THREAD_POOL_TASK_H_
6*6777b538SAndroid Build Coastguard Worker #define BASE_TASK_THREAD_POOL_TASK_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/base_export.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/containers/intrusive_heap.h"
10*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h"
11*6777b538SAndroid Build Coastguard Worker #include "base/location.h"
12*6777b538SAndroid Build Coastguard Worker #include "base/pending_task.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/task/sequenced_task_runner.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/task/single_thread_task_runner.h"
15*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
16*6777b538SAndroid Build Coastguard Worker 
17*6777b538SAndroid Build Coastguard Worker namespace base {
18*6777b538SAndroid Build Coastguard Worker namespace internal {
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker // A task is a unit of work inside the thread pool. Support for tracing and
21*6777b538SAndroid Build Coastguard Worker // profiling inherited from PendingTask.
22*6777b538SAndroid Build Coastguard Worker // TODO(etiennep): This class is now equivalent to PendingTask, remove it.
23*6777b538SAndroid Build Coastguard Worker struct BASE_EXPORT Task : public PendingTask {
24*6777b538SAndroid Build Coastguard Worker   Task() = default;
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker   // |posted_from| is the site the task was posted from. |task| is the closure
27*6777b538SAndroid Build Coastguard Worker   // to run. |delay| is a delay that must expire before the Task runs.
28*6777b538SAndroid Build Coastguard Worker   Task(const Location& posted_from,
29*6777b538SAndroid Build Coastguard Worker        OnceClosure task,
30*6777b538SAndroid Build Coastguard Worker        TimeTicks queue_time,
31*6777b538SAndroid Build Coastguard Worker        TimeDelta delay,
32*6777b538SAndroid Build Coastguard Worker        TimeDelta leeway = TimeDelta(),
33*6777b538SAndroid Build Coastguard Worker        int sequence_num = 0);
34*6777b538SAndroid Build Coastguard Worker   // |delayed_run_time| is the time when the task should be run.
35*6777b538SAndroid Build Coastguard Worker   Task(
36*6777b538SAndroid Build Coastguard Worker       const Location& posted_from,
37*6777b538SAndroid Build Coastguard Worker       OnceClosure task,
38*6777b538SAndroid Build Coastguard Worker       TimeTicks queue_time,
39*6777b538SAndroid Build Coastguard Worker       TimeTicks delayed_run_time,
40*6777b538SAndroid Build Coastguard Worker       TimeDelta leeway = TimeDelta(),
41*6777b538SAndroid Build Coastguard Worker       subtle::DelayPolicy delay_policy = subtle::DelayPolicy::kFlexibleNoSooner,
42*6777b538SAndroid Build Coastguard Worker       int sequence_num = 0);
43*6777b538SAndroid Build Coastguard Worker   Task(const TaskMetadata& metadata, OnceClosure task);
44*6777b538SAndroid Build Coastguard Worker 
45*6777b538SAndroid Build Coastguard Worker   // Task is move-only to avoid mistakes that cause reference counts to be
46*6777b538SAndroid Build Coastguard Worker   // accidentally bumped.
47*6777b538SAndroid Build Coastguard Worker   Task(Task&& other) noexcept;
48*6777b538SAndroid Build Coastguard Worker 
49*6777b538SAndroid Build Coastguard Worker   Task(const Task&) = delete;
50*6777b538SAndroid Build Coastguard Worker   Task& operator=(const Task&) = delete;
51*6777b538SAndroid Build Coastguard Worker 
52*6777b538SAndroid Build Coastguard Worker   ~Task() = default;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   Task& operator=(Task&& other);
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker   // Required by IntrusiveHeap.
SetHeapHandleTask57*6777b538SAndroid Build Coastguard Worker   void SetHeapHandle(const HeapHandle& handle) {}
58*6777b538SAndroid Build Coastguard Worker 
59*6777b538SAndroid Build Coastguard Worker   // Required by IntrusiveHeap.
ClearHeapHandleTask60*6777b538SAndroid Build Coastguard Worker   void ClearHeapHandle() {}
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker   // Required by IntrusiveHeap.
GetHeapHandleTask63*6777b538SAndroid Build Coastguard Worker   HeapHandle GetHeapHandle() const { return HeapHandle::Invalid(); }
64*6777b538SAndroid Build Coastguard Worker };
65*6777b538SAndroid Build Coastguard Worker 
66*6777b538SAndroid Build Coastguard Worker }  // namespace internal
67*6777b538SAndroid Build Coastguard Worker }  // namespace base
68*6777b538SAndroid Build Coastguard Worker 
69*6777b538SAndroid Build Coastguard Worker #endif  // BASE_TASK_THREAD_POOL_TASK_H_
70