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/main_thread/main_thread_scheduler_helper.h" 6 7 #include "third_party/blink/renderer/platform/scheduler/main_thread/main_thread_task_queue.h" 8 9 namespace blink { 10 namespace scheduler { 11 12 using base::sequence_manager::TaskQueue; 13 MainThreadSchedulerHelper(base::sequence_manager::SequenceManager * sequence_manager,MainThreadSchedulerImpl * main_thread_scheduler)14MainThreadSchedulerHelper::MainThreadSchedulerHelper( 15 base::sequence_manager::SequenceManager* sequence_manager, 16 MainThreadSchedulerImpl* main_thread_scheduler) 17 : SchedulerHelper(sequence_manager), 18 main_thread_scheduler_(main_thread_scheduler), 19 // TODO(hajimehoshi): Forbid V8 execution at |default_task_queue_| 20 // (crbug.com/870606). 21 default_task_queue_( 22 NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( 23 MainThreadTaskQueue::QueueType::kDefault) 24 .SetShouldMonitorQuiescence(true))), 25 control_task_queue_( 26 NewTaskQueue(MainThreadTaskQueue::QueueCreationParams( 27 MainThreadTaskQueue::QueueType::kControl) 28 .SetShouldNotifyObservers(false))) { 29 InitDefaultQueues(default_task_queue_, control_task_queue_, 30 TaskType::kMainThreadTaskQueueDefault); 31 sequence_manager_->EnableCrashKeys("blink_scheduler_async_stack"); 32 } 33 ~MainThreadSchedulerHelper()34MainThreadSchedulerHelper::~MainThreadSchedulerHelper() { 35 control_task_queue_->ShutdownTaskQueue(); 36 default_task_queue_->ShutdownTaskQueue(); 37 } 38 39 scoped_refptr<MainThreadTaskQueue> DefaultMainThreadTaskQueue()40MainThreadSchedulerHelper::DefaultMainThreadTaskQueue() { 41 return default_task_queue_; 42 } 43 DefaultTaskQueue()44scoped_refptr<TaskQueue> MainThreadSchedulerHelper::DefaultTaskQueue() { 45 return default_task_queue_; 46 } 47 48 scoped_refptr<MainThreadTaskQueue> ControlMainThreadTaskQueue()49MainThreadSchedulerHelper::ControlMainThreadTaskQueue() { 50 return control_task_queue_; 51 } 52 ControlTaskQueue()53scoped_refptr<TaskQueue> MainThreadSchedulerHelper::ControlTaskQueue() { 54 return control_task_queue_; 55 } 56 57 scoped_refptr<base::SingleThreadTaskRunner> DeprecatedDefaultTaskRunner()58MainThreadSchedulerHelper::DeprecatedDefaultTaskRunner() { 59 // TODO(hajimehoshi): Introduce a different task queue from the default task 60 // queue and return the task runner created from it. 61 return DefaultTaskRunner(); 62 } 63 NewTaskQueue(const MainThreadTaskQueue::QueueCreationParams & params)64scoped_refptr<MainThreadTaskQueue> MainThreadSchedulerHelper::NewTaskQueue( 65 const MainThreadTaskQueue::QueueCreationParams& params) { 66 scoped_refptr<MainThreadTaskQueue> task_queue = 67 sequence_manager_->CreateTaskQueueWithType<MainThreadTaskQueue>( 68 params.spec, params, main_thread_scheduler_); 69 if (params.fixed_priority) 70 task_queue->SetQueuePriority(params.fixed_priority.value()); 71 return task_queue; 72 } 73 ShutdownAllQueues()74void MainThreadSchedulerHelper::ShutdownAllQueues() { 75 default_task_queue_->ShutdownTaskQueue(); 76 control_task_queue_->ShutdownTaskQueue(); 77 } 78 79 } // namespace scheduler 80 } // namespace blink 81