Roll src/third_party/WebKit afc1431:5a99872 (svn 194212:194220)
[chromium-blink-merge.git] / content / child / scheduler / worker_scheduler_impl.cc
blobc22c0c3157f967e8c89c312ddf6501ccde9cd2e8
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"
7 #include "base/bind.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"
13 namespace content {
15 WorkerSchedulerImpl::WorkerSchedulerImpl(
16 scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner)
17 : helper_(main_task_runner,
18 this,
19 "worker.scheduler",
20 TRACE_DISABLED_BY_DEFAULT("worker.scheduler"),
21 "WorkerSchedulerIdlePeriod",
22 SchedulerHelper::TASK_QUEUE_COUNT,
23 base::TimeDelta::FromMilliseconds(300)) {
24 initialized_ = false;
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() {
35 initialized_ = true;
36 helper_.EnableLongIdlePeriod();
39 scoped_refptr<base::SingleThreadTaskRunner>
40 WorkerSchedulerImpl::DefaultTaskRunner() {
41 DCHECK(initialized_);
42 return helper_.DefaultTaskRunner();
45 scoped_refptr<SingleThreadIdleTaskRunner>
46 WorkerSchedulerImpl::IdleTaskRunner() {
47 DCHECK(initialized_);
48 return helper_.IdleTaskRunner();
51 bool WorkerSchedulerImpl::CanExceedIdleDeadlineIfRequired() const {
52 DCHECK(initialized_);
53 return helper_.CanExceedIdleDeadlineIfRequired();
56 bool WorkerSchedulerImpl::ShouldYieldForHighPriorityWork() {
57 // We don't consider any work as being high priority on workers.
58 return false;
61 void WorkerSchedulerImpl::AddTaskObserver(
62 base::MessageLoop::TaskObserver* task_observer) {
63 DCHECK(initialized_);
64 helper_.AddTaskObserver(task_observer);
67 void WorkerSchedulerImpl::RemoveTaskObserver(
68 base::MessageLoop::TaskObserver* task_observer) {
69 DCHECK(initialized_);
70 helper_.RemoveTaskObserver(task_observer);
73 void WorkerSchedulerImpl::Shutdown() {
74 DCHECK(initialized_);
75 helper_.Shutdown();
78 SchedulerHelper* WorkerSchedulerImpl::GetSchedulerHelperForTesting() {
79 return &helper_;
82 void WorkerSchedulerImpl::SetWorkBatchSizeForTesting(size_t work_batch_size) {
83 helper_.SetWorkBatchSizeForTesting(work_batch_size);
86 bool WorkerSchedulerImpl::CanEnterLongIdlePeriod(base::TimeTicks,
87 base::TimeDelta*) {
88 return true;
91 base::TimeTicks WorkerSchedulerImpl::CurrentIdleTaskDeadlineForTesting() const {
92 base::TimeTicks deadline;
93 helper_.CurrentIdleTaskDeadlineCallback(&deadline);
94 return deadline;
97 } // namespace content