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