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