1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_scheduler_helper.h"
6
7 #include "third_party/blink/public/platform/task_type.h"
8 #include "third_party/blink/renderer/platform/scheduler/worker/non_main_thread_task_queue.h"
9
10 namespace blink {
11 namespace scheduler {
12
13 using base::sequence_manager::TaskQueue;
14
NonMainThreadSchedulerHelper(base::sequence_manager::SequenceManager * sequence_manager,NonMainThreadSchedulerImpl * non_main_thread_scheduler,TaskType default_task_type)15 NonMainThreadSchedulerHelper::NonMainThreadSchedulerHelper(
16 base::sequence_manager::SequenceManager* sequence_manager,
17 NonMainThreadSchedulerImpl* non_main_thread_scheduler,
18 TaskType default_task_type)
19 : SchedulerHelper(sequence_manager),
20 non_main_thread_scheduler_(non_main_thread_scheduler),
21 default_task_queue_(NewTaskQueue(TaskQueue::Spec("subthread_default_tq")
22 .SetShouldMonitorQuiescence(true))),
23 control_task_queue_(NewTaskQueue(TaskQueue::Spec("subthread_control_tq")
24 .SetShouldNotifyObservers(false))) {
25 InitDefaultQueues(default_task_queue_, control_task_queue_,
26 default_task_type);
27 }
28
~NonMainThreadSchedulerHelper()29 NonMainThreadSchedulerHelper::~NonMainThreadSchedulerHelper() {
30 control_task_queue_->ShutdownTaskQueue();
31 default_task_queue_->ShutdownTaskQueue();
32 }
33
34 scoped_refptr<NonMainThreadTaskQueue>
DefaultNonMainThreadTaskQueue()35 NonMainThreadSchedulerHelper::DefaultNonMainThreadTaskQueue() {
36 return default_task_queue_;
37 }
38
39 const scoped_refptr<base::SingleThreadTaskRunner>&
DefaultTaskRunner()40 NonMainThreadSchedulerHelper::DefaultTaskRunner() {
41 return default_task_queue_->GetTaskRunnerWithDefaultTaskType();
42 }
43
44 scoped_refptr<NonMainThreadTaskQueue>
ControlNonMainThreadTaskQueue()45 NonMainThreadSchedulerHelper::ControlNonMainThreadTaskQueue() {
46 return control_task_queue_;
47 }
48
49 const scoped_refptr<base::SingleThreadTaskRunner>&
ControlTaskRunner()50 NonMainThreadSchedulerHelper::ControlTaskRunner() {
51 return control_task_queue_->GetTaskRunnerWithDefaultTaskType();
52 }
53
54 scoped_refptr<NonMainThreadTaskQueue>
NewTaskQueue(const TaskQueue::Spec & spec)55 NonMainThreadSchedulerHelper::NewTaskQueue(const TaskQueue::Spec& spec) {
56 return sequence_manager_->CreateTaskQueueWithType<NonMainThreadTaskQueue>(
57 spec, non_main_thread_scheduler_);
58 }
59
ShutdownAllQueues()60 void NonMainThreadSchedulerHelper::ShutdownAllQueues() {
61 default_task_queue_->ShutdownTaskQueue();
62 control_task_queue_->ShutdownTaskQueue();
63 }
64
65 } // namespace scheduler
66 } // namespace blink
67