// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_TASK_SEQUENCE_MANAGER_TASK_QUEUE_H_ #define BASE_TASK_SEQUENCE_MANAGER_TASK_QUEUE_H_ #include <cstdint> #include <memory> #include <optional> #include <type_traits> #include "base/base_export.h" #include "base/check.h" #include "base/task/common/checked_lock.h" #include "base/task/common/lazy_now.h" #include "base/task/sequence_manager/tasks.h" #include "base/task/single_thread_task_runner.h" #include "base/task/task_observer.h" #include "base/threading/platform_thread.h" #include "base/time/time.h" #include "base/trace_event/base_tracing.h" #include "base/trace_event/base_tracing_forward.h" namespace perfetto { class EventContext; } namespace base { class TaskObserver; namespace sequence_manager { QueueName; namespace internal { class SequenceManagerImpl; class TaskQueueImpl; } // namespace internal // A `TaskQueue` represents an ordered list of tasks sharing common properties, // e.g. priority, throttling, etc. `TaskQueue`s are associated with a // `SequenceManager` instance, which chooses the next task from its set of // queues. `TaskQueue`s should typically be used on a single thread since most // methods are not thread safe (enforeced via CHECKs), but cross-thread task // posting is supported with thread-safe task runners. // // A `TaskQueue` is unregistered (stops accepting and running tasks) when either // its associated `TaskQueue::Handle` or `SequenceManager` is destroyed. If the // handle is destroyed while the `SequenceManager` is still alive, the // `SequenceManager` takes ownership of the queue and schedules it for deletion // after the current task finishes. Otherwise, if the handle outlives the // sequence manager, the queue is destroyed when the handle is destroyed. class BASE_EXPORT TaskQueue { … }; } // namespace sequence_manager } // namespace base #endif // BASE_TASK_SEQUENCE_MANAGER_TASK_QUEUE_H_