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 |