123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #ifndef BASE_TASK_THREAD_POOL_SEQUENCE_H_
- #define BASE_TASK_THREAD_POOL_SEQUENCE_H_
- #include <stddef.h>
- #include "base/base_export.h"
- #include "base/compiler_specific.h"
- #include "base/containers/queue.h"
- #include "base/macros.h"
- #include "base/optional.h"
- #include "base/sequence_token.h"
- #include "base/task/task_traits.h"
- #include "base/task/thread_pool/pooled_parallel_task_runner.h"
- #include "base/task/thread_pool/task.h"
- #include "base/task/thread_pool/task_source.h"
- #include "base/task/thread_pool/task_source_sort_key.h"
- #include "base/threading/sequence_local_storage_map.h"
- namespace base {
- namespace internal {
- class BASE_EXPORT Sequence : public TaskSource {
- public:
-
-
-
-
- class BASE_EXPORT Transaction : public TaskSource::Transaction {
- public:
- Transaction(Transaction&& other);
- ~Transaction();
-
-
- bool WillPushTask() const WARN_UNUSED_RESULT;
-
-
- void PushTask(Task task);
- Sequence* sequence() const { return static_cast<Sequence*>(task_source()); }
- private:
- friend class Sequence;
- explicit Transaction(Sequence* sequence);
- DISALLOW_COPY_AND_ASSIGN(Transaction);
- };
-
-
-
-
-
- Sequence(const TaskTraits& traits,
- TaskRunner* task_runner,
- TaskSourceExecutionMode execution_mode);
-
-
- Transaction BeginTransaction() WARN_UNUSED_RESULT;
-
- ExecutionEnvironment GetExecutionEnvironment() override;
- size_t GetRemainingConcurrency() const override;
- TaskSourceSortKey GetSortKey() const override;
-
- const SequenceToken& token() const { return token_; }
- SequenceLocalStorageMap* sequence_local_storage() {
- return &sequence_local_storage_;
- }
- private:
- ~Sequence() override;
-
- RunStatus WillRunTask() override;
- Task TakeTask(TaskSource::Transaction* transaction) override;
- Task Clear(TaskSource::Transaction* transaction) override;
- bool DidProcessTask(TaskSource::Transaction* transaction) override;
-
- void ReleaseTaskRunner();
- const SequenceToken token_ = SequenceToken::Create();
-
- base::queue<Task> queue_;
- std::atomic<TimeTicks> ready_time_{TimeTicks()};
-
- bool has_worker_ = false;
-
- SequenceLocalStorageMap sequence_local_storage_;
- DISALLOW_COPY_AND_ASSIGN(Sequence);
- };
- }
- }
- #endif
|