1 // Copyright 2014 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.
5 #include "content/child/scheduler/worker_scheduler_impl.h"
8 #include "base/message_loop/message_loop_proxy.h"
9 #include "base/trace_event/trace_event.h"
10 #include "base/trace_event/trace_event_argument.h"
11 #include "content/child/scheduler/nestable_single_thread_task_runner.h"
15 WorkerSchedulerImpl::WorkerSchedulerImpl(
16 scoped_refptr
<NestableSingleThreadTaskRunner
> main_task_runner
)
17 : helper_(main_task_runner
,
20 TRACE_DISABLED_BY_DEFAULT("worker.scheduler"),
21 "WorkerSchedulerIdlePeriod",
22 SchedulerHelper::TASK_QUEUE_COUNT
,
23 base::TimeDelta::FromMilliseconds(300)) {
25 TRACE_EVENT_OBJECT_CREATED_WITH_ID(
26 TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this);
29 WorkerSchedulerImpl::~WorkerSchedulerImpl() {
30 TRACE_EVENT_OBJECT_DELETED_WITH_ID(
31 TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this);
34 void WorkerSchedulerImpl::Init() {
36 helper_
.EnableLongIdlePeriod();
39 scoped_refptr
<base::SingleThreadTaskRunner
>
40 WorkerSchedulerImpl::DefaultTaskRunner() {
42 return helper_
.DefaultTaskRunner();
45 scoped_refptr
<SingleThreadIdleTaskRunner
>
46 WorkerSchedulerImpl::IdleTaskRunner() {
48 return helper_
.IdleTaskRunner();
51 bool WorkerSchedulerImpl::CanExceedIdleDeadlineIfRequired() const {
53 return helper_
.CanExceedIdleDeadlineIfRequired();
56 bool WorkerSchedulerImpl::ShouldYieldForHighPriorityWork() {
57 // We don't consider any work as being high priority on workers.
61 void WorkerSchedulerImpl::AddTaskObserver(
62 base::MessageLoop::TaskObserver
* task_observer
) {
64 helper_
.AddTaskObserver(task_observer
);
67 void WorkerSchedulerImpl::RemoveTaskObserver(
68 base::MessageLoop::TaskObserver
* task_observer
) {
70 helper_
.RemoveTaskObserver(task_observer
);
73 void WorkerSchedulerImpl::Shutdown() {
78 void WorkerSchedulerImpl::SetTimeSourceForTesting(
79 scoped_refptr
<cc::TestNowSource
> time_source
) {
80 helper_
.SetTimeSourceForTesting(time_source
);
83 void WorkerSchedulerImpl::SetWorkBatchSizeForTesting(size_t work_batch_size
) {
84 helper_
.SetWorkBatchSizeForTesting(work_batch_size
);
87 bool WorkerSchedulerImpl::CanEnterLongIdlePeriod(base::TimeTicks
,
92 base::TimeTicks
WorkerSchedulerImpl::CurrentIdleTaskDeadlineForTesting() const {
93 base::TimeTicks deadline
;
94 helper_
.CurrentIdleTaskDeadlineCallback(&deadline
);
98 } // namespace content