blob: 7d9a8c37a16b5029058750c30826e3939ade706b [file] [log] [blame]
// Copyright 2023 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_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_
#define BASE_TASK_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_
#include "base/task/post_job.h"
#include "base/task/thread_pool/task_source.h"
namespace base {
class TaskAnnotator;
namespace internal {
class PooledTaskRunnerDelegate;
// Interface for a job task source, to facilitate using either JobTaskSourceNew
// or JobTaskSourceOld depending on the UseNewJobImplementation feature state.
class BASE_EXPORT JobTaskSource : public TaskSource {
public:
JobTaskSource(const JobTaskSource&) = delete;
JobTaskSource& operator=(const JobTaskSource&) = delete;
static JobHandle CreateJobHandle(
scoped_refptr<internal::JobTaskSource> task_source) {
return JobHandle(std::move(task_source));
}
virtual void WillEnqueue(int sequence_num, TaskAnnotator& annotator) = 0;
virtual bool NotifyConcurrencyIncrease() = 0;
virtual bool WillJoin() = 0;
virtual bool RunJoinTask() = 0;
virtual void Cancel(TaskSource::Transaction* transaction = nullptr) = 0;
virtual bool IsActive() const = 0;
virtual size_t GetWorkerCount() const = 0;
virtual size_t GetMaxConcurrency() const = 0;
virtual uint8_t AcquireTaskId() = 0;
virtual void ReleaseTaskId(uint8_t task_id) = 0;
virtual bool ShouldYield() = 0;
virtual PooledTaskRunnerDelegate* GetDelegate() const = 0;
protected:
JobTaskSource(const TaskTraits& traits,
TaskRunner* task_runner,
TaskSourceExecutionMode execution_mode)
: TaskSource(traits, task_runner, execution_mode) {}
~JobTaskSource() override = default;
};
} // namespace internal
} // namespace base
#endif // BASE_TASK_THREAD_POOL_JOB_TASK_SOURCE_INTERFACE_H_