OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/scheduler/child/scheduler_helper.h" | 5 #include "components/scheduler/child/scheduler_helper.h" |
6 | 6 |
7 #include "base/time/default_tick_clock.h" | 7 #include "base/time/default_tick_clock.h" |
8 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
9 #include "base/trace_event/trace_event_argument.h" | 9 #include "base/trace_event/trace_event_argument.h" |
10 #include "components/scheduler/child/nestable_single_thread_task_runner.h" | 10 #include "components/scheduler/child/scheduler_task_runner_delegate.h" |
11 #include "components/scheduler/child/task_queue.h" | 11 #include "components/scheduler/child/task_queue.h" |
12 | 12 |
13 namespace scheduler { | 13 namespace scheduler { |
14 | 14 |
15 SchedulerHelper::SchedulerHelper( | 15 SchedulerHelper::SchedulerHelper( |
16 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, | 16 scoped_refptr<SchedulerTaskRunnerDelegate> main_task_runner, |
17 const char* tracing_category, | 17 const char* tracing_category, |
18 const char* disabled_by_default_tracing_category, | 18 const char* disabled_by_default_tracing_category, |
19 const char* disabled_by_default_verbose_tracing_category, | 19 const char* disabled_by_default_verbose_tracing_category, |
20 size_t total_task_queue_count) | 20 size_t total_task_queue_count) |
21 : task_queue_selector_(new PrioritizingTaskQueueSelector()), | 21 : main_task_runner_(main_task_runner), |
| 22 task_queue_selector_(new PrioritizingTaskQueueSelector()), |
22 task_queue_manager_( | 23 task_queue_manager_( |
23 new TaskQueueManager(total_task_queue_count, | 24 new TaskQueueManager(total_task_queue_count, |
24 main_task_runner, | 25 main_task_runner, |
25 task_queue_selector_.get(), | 26 task_queue_selector_.get(), |
26 disabled_by_default_tracing_category, | 27 disabled_by_default_tracing_category, |
27 disabled_by_default_verbose_tracing_category)), | 28 disabled_by_default_verbose_tracing_category)), |
28 quiescence_monitored_task_queue_mask_( | 29 quiescence_monitored_task_queue_mask_( |
29 ((1ull << total_task_queue_count) - 1ull) & | 30 ((1ull << total_task_queue_count) - 1ull) & |
30 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & | 31 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & |
31 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 32 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
(...skipping 26 matching lines...) Expand all Loading... |
58 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE, | 59 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE, |
59 TaskQueueManager::WakeupPolicy::DONT_WAKE_OTHER_QUEUES); | 60 TaskQueueManager::WakeupPolicy::DONT_WAKE_OTHER_QUEUES); |
60 | 61 |
61 for (size_t i = 0; i < TASK_QUEUE_COUNT; i++) { | 62 for (size_t i = 0; i < TASK_QUEUE_COUNT; i++) { |
62 task_queue_manager_->SetQueueName( | 63 task_queue_manager_->SetQueueName( |
63 i, TaskQueueIdToString(static_cast<QueueId>(i))); | 64 i, TaskQueueIdToString(static_cast<QueueId>(i))); |
64 } | 65 } |
65 | 66 |
66 // TODO(skyostil): Increase this to 4 (crbug.com/444764). | 67 // TODO(skyostil): Increase this to 4 (crbug.com/444764). |
67 task_queue_manager_->SetWorkBatchSize(1); | 68 task_queue_manager_->SetWorkBatchSize(1); |
| 69 |
| 70 main_task_runner_->SetDefaultTaskRunner( |
| 71 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)); |
68 } | 72 } |
69 | 73 |
70 SchedulerHelper::~SchedulerHelper() { | 74 SchedulerHelper::~SchedulerHelper() { |
| 75 Shutdown(); |
71 } | 76 } |
72 | 77 |
73 void SchedulerHelper::Shutdown() { | 78 void SchedulerHelper::Shutdown() { |
74 CheckOnValidThread(); | 79 CheckOnValidThread(); |
75 task_queue_manager_.reset(); | 80 task_queue_manager_.reset(); |
| 81 main_task_runner_->RestoreDefaultTaskRunner(); |
76 } | 82 } |
77 | 83 |
78 scoped_refptr<TaskQueue> SchedulerHelper::DefaultTaskRunner() { | 84 scoped_refptr<TaskQueue> SchedulerHelper::DefaultTaskRunner() { |
79 CheckOnValidThread(); | 85 CheckOnValidThread(); |
80 return default_task_runner_; | 86 return default_task_runner_; |
81 } | 87 } |
82 | 88 |
83 scoped_refptr<base::SingleThreadTaskRunner> | 89 scoped_refptr<base::SingleThreadTaskRunner> |
84 SchedulerHelper::ControlTaskRunner() { | 90 SchedulerHelper::ControlTaskRunner() { |
85 return control_task_runner_; | 91 return control_task_runner_; |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 218 } |
213 | 219 |
214 void SchedulerHelper::RemoveTaskObserver( | 220 void SchedulerHelper::RemoveTaskObserver( |
215 base::MessageLoop::TaskObserver* task_observer) { | 221 base::MessageLoop::TaskObserver* task_observer) { |
216 CheckOnValidThread(); | 222 CheckOnValidThread(); |
217 if (task_queue_manager_) | 223 if (task_queue_manager_) |
218 task_queue_manager_->RemoveTaskObserver(task_observer); | 224 task_queue_manager_->RemoveTaskObserver(task_observer); |
219 } | 225 } |
220 | 226 |
221 } // namespace scheduler | 227 } // namespace scheduler |
OLD | NEW |