Index: content/child/scheduler/worker_scheduler_impl.cc |
diff --git a/content/child/scheduler/worker_scheduler_impl.cc b/content/child/scheduler/worker_scheduler_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..63661db5ea972805e09f8056ac923d42a54f3698 |
--- /dev/null |
+++ b/content/child/scheduler/worker_scheduler_impl.cc |
@@ -0,0 +1,92 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/child/scheduler/worker_scheduler_impl.h" |
+ |
+#include "base/bind.h" |
+#include "base/message_loop/message_loop_proxy.h" |
+#include "base/trace_event/trace_event.h" |
+#include "base/trace_event/trace_event_argument.h" |
+#include "content/child/scheduler/nestable_single_thread_task_runner.h" |
+ |
+namespace content { |
+ |
+WorkerSchedulerImpl::WorkerSchedulerImpl( |
+ scoped_refptr<NestableSingleThreadTaskRunner> main_task_runner) |
+ : helper_(main_task_runner, |
+ this, |
+ "worker.scheduler", |
+ TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), |
+ SchedulerHelper::TASK_QUEUE_COUNT, |
+ base::TimeDelta::FromMilliseconds(300)) { |
+ initialized_ = false; |
+ TRACE_EVENT_OBJECT_CREATED_WITH_ID( |
+ TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this); |
+} |
+ |
+WorkerSchedulerImpl::~WorkerSchedulerImpl() { |
+ TRACE_EVENT_OBJECT_DELETED_WITH_ID( |
+ TRACE_DISABLED_BY_DEFAULT("worker.scheduler"), "WorkerScheduler", this); |
+} |
+ |
+void WorkerSchedulerImpl::Init() { |
+ initialized_ = true; |
+ helper_.EnableLongIdlePeriod(); |
+} |
+ |
+scoped_refptr<base::SingleThreadTaskRunner> |
+WorkerSchedulerImpl::DefaultTaskRunner() { |
+ DCHECK(initialized_); |
+ return helper_.DefaultTaskRunner(); |
+} |
+ |
+scoped_refptr<SingleThreadIdleTaskRunner> |
+WorkerSchedulerImpl::IdleTaskRunner() { |
+ DCHECK(initialized_); |
+ return helper_.IdleTaskRunner(); |
+} |
+ |
+bool WorkerSchedulerImpl::CanExceedIdleDeadlineIfRequired() const { |
+ DCHECK(initialized_); |
+ return helper_.CanExceedIdleDeadlineIfRequired(); |
+} |
+ |
+void WorkerSchedulerImpl::AddTaskObserver( |
+ base::MessageLoop::TaskObserver* task_observer) { |
+ DCHECK(initialized_); |
+ helper_.AddTaskObserver(task_observer); |
+} |
+ |
+void WorkerSchedulerImpl::RemoveTaskObserver( |
+ base::MessageLoop::TaskObserver* task_observer) { |
+ DCHECK(initialized_); |
+ helper_.RemoveTaskObserver(task_observer); |
+} |
+ |
+void WorkerSchedulerImpl::Shutdown() { |
+ DCHECK(initialized_); |
+ helper_.Shutdown(); |
+} |
+ |
+void WorkerSchedulerImpl::SetTimeSourceForTesting( |
+ scoped_refptr<cc::TestNowSource> time_source) { |
+ helper_.SetTimeSourceForTesting(time_source); |
+} |
+ |
+void WorkerSchedulerImpl::SetWorkBatchSizeForTesting(size_t work_batch_size) { |
+ helper_.SetWorkBatchSizeForTesting(work_batch_size); |
+} |
+ |
+bool WorkerSchedulerImpl::CanEnterLongIdlePeriod(base::TimeTicks, |
+ base::TimeDelta*) { |
+ return true; |
+} |
+ |
+base::TimeTicks WorkerSchedulerImpl::CurrentIdleTaskDeadlineForTesting() const { |
+ base::TimeTicks deadline; |
+ helper_.CurrentIdleTaskDeadlineCallback(&deadline); |
+ return deadline; |
+} |
+ |
+} // namespace content |