| 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 "content/child/scheduler/scheduler_helper.h" | 5 #include "content/child/scheduler/scheduler_helper.h" |
| 6 | 6 |
| 7 #include "base/trace_event/trace_event.h" | 7 #include "base/trace_event/trace_event.h" |
| 8 #include "base/trace_event/trace_event_argument.h" | 8 #include "base/trace_event/trace_event_argument.h" |
| 9 #include "content/child/scheduler/nestable_single_thread_task_runner.h" | 9 #include "content/child/scheduler/nestable_single_thread_task_runner.h" |
| 10 #include "content/child/scheduler/prioritizing_task_queue_selector.h" | 10 #include "content/child/scheduler/prioritizing_task_queue_selector.h" |
| 11 #include "content/child/scheduler/time_source.h" |
| 11 | 12 |
| 12 namespace content { | 13 namespace content { |
| 13 | 14 |
| 14 SchedulerHelper::SchedulerHelper( | 15 SchedulerHelper::SchedulerHelper( |
| 15 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, | 16 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner, |
| 16 SchedulerHelperDelegate* scheduler_helper_delegate, | 17 SchedulerHelperDelegate* scheduler_helper_delegate, |
| 17 const char* tracing_category, | 18 const char* tracing_category, |
| 18 const char* disabled_by_default_tracing_category, | 19 const char* disabled_by_default_tracing_category, |
| 19 const char* idle_period_tracing_name, | 20 const char* idle_period_tracing_name, |
| 20 size_t total_task_queue_count, | 21 size_t total_task_queue_count, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 33 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 34 QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
| 34 default_task_runner_( | 35 default_task_runner_( |
| 35 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)), | 36 task_queue_manager_->TaskRunnerForQueue(QueueId::DEFAULT_TASK_QUEUE)), |
| 36 quiescence_monitored_task_queue_mask_( | 37 quiescence_monitored_task_queue_mask_( |
| 37 ((1ull << total_task_queue_count) - 1ull) & | 38 ((1ull << total_task_queue_count) - 1ull) & |
| 38 ~(1ull << QueueId::IDLE_TASK_QUEUE) & | 39 ~(1ull << QueueId::IDLE_TASK_QUEUE) & |
| 39 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & | 40 ~(1ull << QueueId::CONTROL_TASK_QUEUE) & |
| 40 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), | 41 ~(1ull << QueueId::CONTROL_TASK_AFTER_WAKEUP_QUEUE)), |
| 41 required_quiescence_duration_before_long_idle_period_( | 42 required_quiescence_duration_before_long_idle_period_( |
| 42 required_quiescence_duration_before_long_idle_period), | 43 required_quiescence_duration_before_long_idle_period), |
| 44 time_source_(new TimeSource), |
| 43 tracing_category_(tracing_category), | 45 tracing_category_(tracing_category), |
| 44 disabled_by_default_tracing_category_( | 46 disabled_by_default_tracing_category_( |
| 45 disabled_by_default_tracing_category), | 47 disabled_by_default_tracing_category), |
| 46 idle_period_tracing_name_(idle_period_tracing_name), | 48 idle_period_tracing_name_(idle_period_tracing_name), |
| 47 weak_factory_(this) { | 49 weak_factory_(this) { |
| 48 DCHECK_GE(total_task_queue_count, | 50 DCHECK_GE(total_task_queue_count, |
| 49 static_cast<size_t>(QueueId::TASK_QUEUE_COUNT)); | 51 static_cast<size_t>(QueueId::TASK_QUEUE_COUNT)); |
| 50 weak_scheduler_ptr_ = weak_factory_.GetWeakPtr(); | 52 weak_scheduler_ptr_ = weak_factory_.GetWeakPtr(); |
| 51 end_idle_period_closure_.Reset( | 53 end_idle_period_closure_.Reset( |
| 52 base::Bind(&SchedulerHelper::EndIdlePeriod, weak_scheduler_ptr_)); | 54 base::Bind(&SchedulerHelper::EndIdlePeriod, weak_scheduler_ptr_)); |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 } | 307 } |
| 306 | 308 |
| 307 bool SchedulerHelper::CanExceedIdleDeadlineIfRequired() const { | 309 bool SchedulerHelper::CanExceedIdleDeadlineIfRequired() const { |
| 308 TRACE_EVENT0(tracing_category_, "CanExceedIdleDeadlineIfRequired"); | 310 TRACE_EVENT0(tracing_category_, "CanExceedIdleDeadlineIfRequired"); |
| 309 CheckOnValidThread(); | 311 CheckOnValidThread(); |
| 310 return idle_period_state_ == | 312 return idle_period_state_ == |
| 311 IdlePeriodState::IN_LONG_IDLE_PERIOD_WITH_MAX_DEADLINE; | 313 IdlePeriodState::IN_LONG_IDLE_PERIOD_WITH_MAX_DEADLINE; |
| 312 } | 314 } |
| 313 | 315 |
| 314 void SchedulerHelper::SetTimeSourceForTesting( | 316 void SchedulerHelper::SetTimeSourceForTesting( |
| 315 scoped_refptr<cc::TestNowSource> time_source) { | 317 scoped_ptr<TimeSource> time_source) { |
| 316 CheckOnValidThread(); | 318 CheckOnValidThread(); |
| 317 time_source_ = time_source; | 319 time_source_ = time_source.Pass(); |
| 318 task_queue_manager_->SetTimeSourceForTesting(time_source); | |
| 319 } | 320 } |
| 320 | 321 |
| 321 void SchedulerHelper::SetWorkBatchSizeForTesting(size_t work_batch_size) { | 322 void SchedulerHelper::SetWorkBatchSizeForTesting(size_t work_batch_size) { |
| 322 CheckOnValidThread(); | 323 CheckOnValidThread(); |
| 323 task_queue_manager_->SetWorkBatchSize(work_batch_size); | 324 task_queue_manager_->SetWorkBatchSize(work_batch_size); |
| 324 } | 325 } |
| 325 | 326 |
| 327 TaskQueueManager* SchedulerHelper::GetTaskQueueManagerForTesting() { |
| 328 CheckOnValidThread(); |
| 329 return task_queue_manager_.get(); |
| 330 } |
| 331 |
| 326 base::TimeTicks SchedulerHelper::Now() const { | 332 base::TimeTicks SchedulerHelper::Now() const { |
| 327 return UNLIKELY(time_source_) ? time_source_->Now() : base::TimeTicks::Now(); | 333 return time_source_->Now(); |
| 328 } | 334 } |
| 329 | 335 |
| 330 SchedulerHelper::IdlePeriodState | 336 SchedulerHelper::IdlePeriodState |
| 331 SchedulerHelper::SchedulerIdlePeriodState() const { | 337 SchedulerHelper::SchedulerIdlePeriodState() const { |
| 332 return idle_period_state_; | 338 return idle_period_state_; |
| 333 } | 339 } |
| 334 | 340 |
| 335 PrioritizingTaskQueueSelector* | 341 PrioritizingTaskQueueSelector* |
| 336 SchedulerHelper::SchedulerTaskQueueSelector() const { | 342 SchedulerHelper::SchedulerTaskQueueSelector() const { |
| 337 return task_queue_selector_.get(); | 343 return task_queue_selector_.get(); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 } | 404 } |
| 399 | 405 |
| 400 void SchedulerHelper::RemoveTaskObserver( | 406 void SchedulerHelper::RemoveTaskObserver( |
| 401 base::MessageLoop::TaskObserver* task_observer) { | 407 base::MessageLoop::TaskObserver* task_observer) { |
| 402 CheckOnValidThread(); | 408 CheckOnValidThread(); |
| 403 if (task_queue_manager_) | 409 if (task_queue_manager_) |
| 404 task_queue_manager_->RemoveTaskObserver(task_observer); | 410 task_queue_manager_->RemoveTaskObserver(task_observer); |
| 405 } | 411 } |
| 406 | 412 |
| 407 } // namespace content | 413 } // namespace content |
| OLD | NEW |