1 // Copyright 2023 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_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_ 6 #define BASE_TASK_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_ 7 8 #include "base/task/post_job.h" 9 #include "base/task/thread_pool/task_source.h" 10 11 namespace base { 12 13 class TaskAnnotator; 14 15 namespace internal { 16 17 class PooledTaskRunnerDelegate; 18 19 // Interface for a job task source, to facilitate using either JobTaskSourceNew 20 // or JobTaskSourceOld depending on the UseNewJobImplementation feature state. 21 class BASE_EXPORT JobTaskSource : public TaskSource { 22 public: 23 JobTaskSource(const JobTaskSource&) = delete; 24 JobTaskSource& operator=(const JobTaskSource&) = delete; 25 CreateJobHandle(scoped_refptr<internal::JobTaskSource> task_source)26 static JobHandle CreateJobHandle( 27 scoped_refptr<internal::JobTaskSource> task_source) { 28 return JobHandle(std::move(task_source)); 29 } 30 31 virtual void WillEnqueue(int sequence_num, TaskAnnotator& annotator) = 0; 32 virtual bool NotifyConcurrencyIncrease() = 0; 33 virtual bool WillJoin() = 0; 34 virtual bool RunJoinTask() = 0; 35 virtual void Cancel(TaskSource::Transaction* transaction = nullptr) = 0; 36 virtual bool IsActive() const = 0; 37 virtual size_t GetWorkerCount() const = 0; 38 virtual size_t GetMaxConcurrency() const = 0; 39 virtual uint8_t AcquireTaskId() = 0; 40 virtual void ReleaseTaskId(uint8_t task_id) = 0; 41 virtual bool ShouldYield() = 0; 42 virtual PooledTaskRunnerDelegate* GetDelegate() const = 0; 43 44 protected: JobTaskSource(const TaskTraits & traits,TaskRunner * task_runner,TaskSourceExecutionMode execution_mode)45 JobTaskSource(const TaskTraits& traits, 46 TaskRunner* task_runner, 47 TaskSourceExecutionMode execution_mode) 48 : TaskSource(traits, task_runner, execution_mode) {} 49 ~JobTaskSource() override = default; 50 }; 51 52 } // namespace internal 53 } // namespace base 54 55 #endif // BASE_TASK_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_ 56