Chromium Code Reviews| 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/synchronization/waitable_event.h" | |
| 7 #include "base/trace_event/trace_event.h" | 8 #include "base/trace_event/trace_event.h" |
| 8 #include "base/trace_event/trace_event_argument.h" | 9 #include "base/trace_event/trace_event_argument.h" |
| 9 #include "components/scheduler/child/nestable_single_thread_task_runner.h" | 10 #include "components/scheduler/child/nestable_single_thread_task_runner.h" |
| 10 #include "components/scheduler/child/prioritizing_task_queue_selector.h" | 11 #include "components/scheduler/child/prioritizing_task_queue_selector.h" |
| 11 #include "components/scheduler/child/time_source.h" | 12 #include "components/scheduler/child/time_source.h" |
| 12 | 13 |
| 13 namespace scheduler { | 14 namespace scheduler { |
| 14 | 15 |
| 15 SchedulerHelper::SchedulerHelper( | 16 SchedulerHelper::SchedulerHelper( |
| 16 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, | 17 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 27 task_queue_selector_.get(), | 28 task_queue_selector_.get(), |
| 28 disabled_by_default_tracing_category)), | 29 disabled_by_default_tracing_category)), |
| 29 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD), | 30 idle_period_state_(IdlePeriodState::NOT_IN_IDLE_PERIOD), |
| 30 scheduler_helper_delegate_(scheduler_helper_delegate), | 31 scheduler_helper_delegate_(scheduler_helper_delegate), |
| 31 control_task_runner_( | 32 control_task_runner_( |
| 32 task_queue_manager_->TaskRunnerForQueue(QueueId::CONTROL_TASK_QUEUE)), | 33 task_queue_manager_->TaskRunnerForQueue(QueueId::CONTROL_TASK_QUEUE)), |
| 33 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue( | 34 control_task_after_wakeup_runner_(task_queue_manager_->TaskRunnerForQueue( |
| 34 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 35 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
| 35 default_task_runner_( | 36 default_task_runner_( |
| 36 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)), | 37 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)), |
| 38 shutdown_task_runner_(task_queue_manager_->TaskRunnerForQueue( | |
| 39 QueueId::SHUTDOWN_TASK_QUEUE)), | |
| 40 total_task_queue_count_(total_task_queue_count), | |
| 37 quiescence_monitored_task_queue_mask_( | 41 quiescence_monitored_task_queue_mask_( |
| 38 ((1ull << total_task_queue_count) - 1ull) & | 42 ((1ull << total_task_queue_count) - 1ull) & |
| 39 ~(1ull << QueueId::IDLE_TASK_QUEUE) & | 43 ~(1ull << QueueId::IDLE_TASK_QUEUE) & |
| 40 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & | 44 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & |
| 41 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 45 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
| 42 required_quiescence_duration_before_long_idle_period_( | 46 required_quiescence_duration_before_long_idle_period_( |
| 43 required_quiescence_duration_before_long_idle_period), | 47 required_quiescence_duration_before_long_idle_period), |
| 44 time_source_(new TimeSource), | 48 time_source_(new TimeSource), |
| 45 tracing_category_(tracing_category), | 49 tracing_category_(tracing_category), |
| 46 disabled_by_default_tracing_category_( | 50 disabled_by_default_tracing_category_( |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 | 94 |
| 91 SchedulerHelper::~SchedulerHelper() { | 95 SchedulerHelper::~SchedulerHelper() { |
| 92 } | 96 } |
| 93 | 97 |
| 94 SchedulerHelper::SchedulerHelperDelegate::SchedulerHelperDelegate() { | 98 SchedulerHelper::SchedulerHelperDelegate::SchedulerHelperDelegate() { |
| 95 } | 99 } |
| 96 | 100 |
| 97 SchedulerHelper::SchedulerHelperDelegate::~SchedulerHelperDelegate() { | 101 SchedulerHelper::SchedulerHelperDelegate::~SchedulerHelperDelegate() { |
| 98 } | 102 } |
| 99 | 103 |
| 104 void SchedulerHelper::PreShutdown() { | |
|
Sami
2015/04/23 13:14:03
Can we make the client ensure that this is called
alex clarke (OOO till 29th)
2015/04/23 17:34:32
I was able to do this blink side instead.
Sami
2015/04/23 18:47:49
Great, thanks.
| |
| 105 TRACE_EVENT0(disabled_by_default_tracing_category_, "PreShutdown"); | |
| 106 if (shutdown_task_runner_->BelongsToCurrentThread()) { | |
| 107 PreShutdownInternal(nullptr); | |
| 108 } else { | |
| 109 base::WaitableEvent completion(false, false); | |
| 110 shutdown_task_runner_->PostTask( | |
| 111 FROM_HERE, base::Bind(&SchedulerHelper::PreShutdownInternal, | |
| 112 base::Unretained(this), &completion)); | |
| 113 completion.Wait(); | |
| 114 } | |
| 115 } | |
| 116 | |
| 117 void SchedulerHelper::PreShutdownInternal(base::WaitableEvent* completion) { | |
| 118 TRACE_EVENT0(disabled_by_default_tracing_category_, "PreShutdownInternal"); | |
| 119 CheckOnValidThread(); | |
| 120 EndIdlePeriod(); | |
|
Sami
2015/04/23 13:14:02
Do we actually need to end the idle period? The id
alex clarke (OOO till 29th)
2015/04/23 17:34:32
Yes I think so because enable_next_long_idle_perio
Sami
2015/04/23 18:47:49
We could just let those run. I don't think there s
alex clarke (OOO till 29th)
2015/04/24 09:32:35
The reason I wrote this patch in the first place i
Sami
2015/04/24 10:38:40
That sounds like an instance of the bug I was worr
alex clarke (OOO till 29th)
2015/04/24 14:10:04
Done.
| |
| 121 task_queue_selector_->DisableQueue(QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE); | |
| 122 task_queue_selector_->DisableQueue(QueueId::DEFAULT_TASK_QUEUE); | |
| 123 for (size_t i = TASK_QUEUE_COUNT; i < total_task_queue_count_; i++) { | |
|
Sami
2015/04/23 13:14:02
Can we get a policy update that undoes all of this
alex clarke (OOO till 29th)
2015/04/23 17:34:32
Yes, but only on the render thread where this isn'
Sami
2015/04/24 10:38:40
Looks like my reply here got lost somehow: I don't
alex clarke (OOO till 29th)
2015/04/24 14:10:04
Done.
| |
| 124 task_queue_selector_->DisableQueue(i); | |
| 125 } | |
| 126 if (completion) | |
| 127 completion->Signal(); | |
| 128 } | |
| 129 | |
| 100 void SchedulerHelper::Shutdown() { | 130 void SchedulerHelper::Shutdown() { |
| 101 CheckOnValidThread(); | 131 CheckOnValidThread(); |
| 102 task_queue_manager_.reset(); | 132 task_queue_manager_.reset(); |
| 103 } | 133 } |
| 104 | 134 |
| 105 scoped_refptr<base::SingleThreadTaskRunner> | 135 scoped_refptr<base::SingleThreadTaskRunner> |
| 106 SchedulerHelper::DefaultTaskRunner() { | 136 SchedulerHelper::DefaultTaskRunner() { |
| 107 CheckOnValidThread(); | 137 CheckOnValidThread(); |
| 108 return default_task_runner_; | 138 return default_task_runner_; |
| 109 } | 139 } |
| 110 | 140 |
| 111 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() { | 141 scoped_refptr<SingleThreadIdleTaskRunner> SchedulerHelper::IdleTaskRunner() { |
| 112 CheckOnValidThread(); | 142 CheckOnValidThread(); |
| 113 return idle_task_runner_; | 143 return idle_task_runner_; |
| 114 } | 144 } |
| 115 | 145 |
| 116 scoped_refptr<base::SingleThreadTaskRunner> | 146 scoped_refptr<base::SingleThreadTaskRunner> |
| 147 SchedulerHelper::ShutdownTaskRunner() { | |
| 148 CheckOnValidThread(); | |
| 149 return shutdown_task_runner_; | |
| 150 } | |
| 151 | |
| 152 scoped_refptr<base::SingleThreadTaskRunner> | |
| 117 SchedulerHelper::ControlTaskRunner() { | 153 SchedulerHelper::ControlTaskRunner() { |
| 118 return control_task_runner_; | 154 return control_task_runner_; |
| 119 } | 155 } |
| 120 | 156 |
| 121 void SchedulerHelper::CurrentIdleTaskDeadlineCallback( | 157 void SchedulerHelper::CurrentIdleTaskDeadlineCallback( |
| 122 base::TimeTicks* deadline_out) const { | 158 base::TimeTicks* deadline_out) const { |
| 123 CheckOnValidThread(); | 159 CheckOnValidThread(); |
| 124 *deadline_out = idle_period_deadline_; | 160 *deadline_out = idle_period_deadline_; |
| 125 } | 161 } |
| 126 | 162 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 357 return task_queue_manager_->IsQueueEmpty(queue_index); | 393 return task_queue_manager_->IsQueueEmpty(queue_index); |
| 358 } | 394 } |
| 359 | 395 |
| 360 // static | 396 // static |
| 361 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) { | 397 const char* SchedulerHelper::TaskQueueIdToString(QueueId queue_id) { |
| 362 switch (queue_id) { | 398 switch (queue_id) { |
| 363 case DEFAULT_TASK_QUEUE: | 399 case DEFAULT_TASK_QUEUE: |
| 364 return "default_tq"; | 400 return "default_tq"; |
| 365 case IDLE_TASK_QUEUE: | 401 case IDLE_TASK_QUEUE: |
| 366 return "idle_tq"; | 402 return "idle_tq"; |
| 403 case SHUTDOWN_TASK_QUEUE: | |
| 404 return "shutdown_tq"; | |
| 367 case CONTROL_TASK_QUEUE: | 405 case CONTROL_TASK_QUEUE: |
| 368 return "control_tq"; | 406 return "control_tq"; |
| 369 case CONTROL_TASK_AFTER_WAKEUP_QUEUE: | 407 case CONTROL_TASK_AFTER_WAKEUP_QUEUE: |
| 370 return "control_after_wakeup_tq"; | 408 return "control_after_wakeup_tq"; |
| 371 default: | 409 default: |
| 372 NOTREACHED(); | 410 NOTREACHED(); |
| 373 return nullptr; | 411 return nullptr; |
| 374 } | 412 } |
| 375 } | 413 } |
| 376 | 414 |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 402 } | 440 } |
| 403 | 441 |
| 404 void SchedulerHelper::RemoveTaskObserver( | 442 void SchedulerHelper::RemoveTaskObserver( |
| 405 base::MessageLoop::TaskObserver* task_observer) { | 443 base::MessageLoop::TaskObserver* task_observer) { |
| 406 CheckOnValidThread(); | 444 CheckOnValidThread(); |
| 407 if (task_queue_manager_) | 445 if (task_queue_manager_) |
| 408 task_queue_manager_->RemoveTaskObserver(task_observer); | 446 task_queue_manager_->RemoveTaskObserver(task_observer); |
| 409 } | 447 } |
| 410 | 448 |
| 411 } // namespace scheduler | 449 } // namespace scheduler |
| OLD | NEW |