mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
80 lines
3.0 KiB
C
80 lines
3.0 KiB
C
|
// Copyright 2016 The Chromium Authors. All rights reserved.
|
||
|
// Use of this source code is governed by a BSD-style license that can be
|
||
|
// found in the LICENSE file.
|
||
|
|
||
|
#ifndef BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_H_
|
||
|
#define BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_H_
|
||
|
|
||
|
#include "base/base_export.h"
|
||
|
#include "base/memory/ref_counted.h"
|
||
|
#include "base/sequenced_task_runner.h"
|
||
|
#include "base/task_runner.h"
|
||
|
#include "base/task_scheduler/can_schedule_sequence_observer.h"
|
||
|
#include "base/task_scheduler/sequence.h"
|
||
|
#include "base/task_scheduler/task.h"
|
||
|
#include "base/task_scheduler/task_traits.h"
|
||
|
#include "base/task_scheduler/tracked_ref.h"
|
||
|
|
||
|
namespace base {
|
||
|
namespace internal {
|
||
|
|
||
|
class DelayedTaskManager;
|
||
|
class TaskTracker;
|
||
|
|
||
|
// Interface for a worker pool.
|
||
|
class BASE_EXPORT SchedulerWorkerPool : public CanScheduleSequenceObserver {
|
||
|
public:
|
||
|
~SchedulerWorkerPool() override;
|
||
|
|
||
|
// Returns a TaskRunner whose PostTask invocations result in scheduling tasks
|
||
|
// in this SchedulerWorkerPool using |traits|. Tasks may run in any order and
|
||
|
// in parallel.
|
||
|
scoped_refptr<TaskRunner> CreateTaskRunnerWithTraits(
|
||
|
const TaskTraits& traits);
|
||
|
|
||
|
// Returns a SequencedTaskRunner whose PostTask invocations result in
|
||
|
// scheduling tasks in this SchedulerWorkerPool using |traits|. Tasks run one
|
||
|
// at a time in posting order.
|
||
|
scoped_refptr<SequencedTaskRunner> CreateSequencedTaskRunnerWithTraits(
|
||
|
const TaskTraits& traits);
|
||
|
|
||
|
// Posts |task| to be executed by this SchedulerWorkerPool as part of
|
||
|
// |sequence|. |task| won't be executed before its delayed run time, if any.
|
||
|
// Returns true if |task| is posted.
|
||
|
bool PostTaskWithSequence(Task task, scoped_refptr<Sequence> sequence);
|
||
|
|
||
|
// Registers the worker pool in TLS.
|
||
|
void BindToCurrentThread();
|
||
|
|
||
|
// Resets the worker pool in TLS.
|
||
|
void UnbindFromCurrentThread();
|
||
|
|
||
|
// Prevents new tasks from starting to run and waits for currently running
|
||
|
// tasks to complete their execution. It is guaranteed that no thread will do
|
||
|
// work on behalf of this SchedulerWorkerPool after this returns. It is
|
||
|
// invalid to post a task once this is called. TaskTracker::Flush() can be
|
||
|
// called before this to complete existing tasks, which might otherwise post a
|
||
|
// task during JoinForTesting(). This can only be called once.
|
||
|
virtual void JoinForTesting() = 0;
|
||
|
|
||
|
protected:
|
||
|
SchedulerWorkerPool(TrackedRef<TaskTracker> task_tracker,
|
||
|
DelayedTaskManager* delayed_task_manager);
|
||
|
|
||
|
// Posts |task| to be executed by this SchedulerWorkerPool as part of
|
||
|
// |sequence|. This must only be called after |task| has gone through
|
||
|
// PostTaskWithSequence() and after |task|'s delayed run time.
|
||
|
void PostTaskWithSequenceNow(Task task, scoped_refptr<Sequence> sequence);
|
||
|
|
||
|
const TrackedRef<TaskTracker> task_tracker_;
|
||
|
DelayedTaskManager* const delayed_task_manager_;
|
||
|
|
||
|
private:
|
||
|
DISALLOW_COPY_AND_ASSIGN(SchedulerWorkerPool);
|
||
|
};
|
||
|
|
||
|
} // namespace internal
|
||
|
} // namespace base
|
||
|
|
||
|
#endif // BASE_TASK_SCHEDULER_SCHEDULER_WORKER_POOL_H_
|