1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_SCHEDULER_H_
#define THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_SCHEDULER_H_
#include "base/task/single_thread_task_runner.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h"
namespace blink {
class VirtualTimeController;
namespace scheduler {
class WorkerSchedulerProxy;
class WorkerThreadScheduler;
// A scheduler provides per-global-scope task queues.
//
// Unless stated otherwise, all methods must be called on the worker thread.
class PLATFORM_EXPORT WorkerScheduler : public FrameOrWorkerScheduler {
public:
// Represents RAII handle for pausing the scheduler. The scheduler is paused
// as long as one PauseHandle lives.
class PLATFORM_EXPORT PauseHandle {
USING_FAST_MALLOC(PauseHandle);
public:
PauseHandle(const PauseHandle&) = delete;
PauseHandle& operator=(const PauseHandle&) = delete;
virtual ~PauseHandle() = default;
protected:
PauseHandle() = default;
};
// Creates a new WorkerScheduler.
static std::unique_ptr<WorkerScheduler> CreateWorkerScheduler(
WorkerThreadScheduler* worker_thread_scheduler,
WorkerSchedulerProxy* proxy);
// Unregisters the task queues and cancels tasks in them.
virtual void Dispose() = 0;
// Returns a task runner that is suitable with the given task type. This can
// be called from any thread.
//
// This must be called only from WorkerThread::GetTaskRunner().
virtual scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(
TaskType) const = 0;
virtual WorkerThreadScheduler* GetWorkerThreadScheduler() const = 0;
virtual void OnLifecycleStateChanged(
SchedulingLifecycleState lifecycle_state) = 0;
// Pauses the scheduler. The scheduler is paused as long as PauseHandle lives.
[[nodiscard]] virtual std::unique_ptr<PauseHandle> Pause() = 0;
// Initializes this on a worker thread. This must not be called twice or more.
// `delegate` must outlive this.
virtual void InitializeOnWorkerThread(Delegate* delegate) = 0;
virtual VirtualTimeController* GetVirtualTimeController() = 0;
};
} // namespace scheduler
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_PLATFORM_SCHEDULER_PUBLIC_WORKER_SCHEDULER_H_
|