• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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