Chromium Code Reviews| Index: content/renderer/scheduler/renderer_scheduler.cc |
| diff --git a/content/renderer/scheduler/renderer_scheduler.cc b/content/renderer/scheduler/renderer_scheduler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..e72d6ba620aaf0482831baae079fc70f72f367b0 |
| --- /dev/null |
| +++ b/content/renderer/scheduler/renderer_scheduler.cc |
| @@ -0,0 +1,116 @@ |
| +// 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/renderer/scheduler/renderer_scheduler.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/command_line.h" |
| +#include "base/message_loop/message_loop_proxy.h" |
| +#include "content/public/common/content_switches.h" |
| +#include "content/renderer/scheduler/renderer_scheduler_impl.h" |
| + |
| +namespace content { |
| + |
| +namespace { |
| + |
| +class NullIdleTaskRunner : public SingleThreadIdleTaskRunner { |
| + public: |
| + NullIdleTaskRunner(scoped_refptr<base::SingleThreadTaskRunner> task_runner); |
| + void PostIdleTask(const tracked_objects::Location& from_here, |
| + const IdleTask& idle_task) override; |
| + |
| + protected: |
| + virtual ~NullIdleTaskRunner(); |
| +}; |
| + |
| +class NullRendererScheduler : public RendererScheduler { |
| + public: |
| + NullRendererScheduler(); |
| + virtual ~NullRendererScheduler(); |
| + |
| + scoped_refptr<base::SingleThreadTaskRunner> DefaultTaskRunner() override; |
| + scoped_refptr<base::SingleThreadTaskRunner> CompositorTaskRunner() override; |
| + scoped_refptr<SingleThreadIdleTaskRunner> IdleTaskRunner() override; |
| + |
| + void WillBeginFrame(const cc::BeginFrameArgs& args) override; |
| + void DidCommitFrameToCompositor() override; |
| + void DidReceiveInputEvent() override; |
| + bool ShouldYieldForHighPriorityWork() override; |
| + |
| + private: |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + scoped_refptr<SingleThreadIdleTaskRunner> idle_task_runner_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NullRendererScheduler); |
| +}; |
| + |
| +NullIdleTaskRunner::NullIdleTaskRunner( |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
| + : SingleThreadIdleTaskRunner(task_runner, |
| + base::WeakPtr<IdleTaskDeadlineSupplier>()) { |
| +} |
| + |
| +NullIdleTaskRunner::~NullIdleTaskRunner() { |
| +} |
| + |
| +void NullIdleTaskRunner::PostIdleTask( |
| + const tracked_objects::Location& from_here, |
| + const IdleTask& idle_task) { |
| +} |
| + |
| +NullRendererScheduler::NullRendererScheduler() |
| + : task_runner_(base::MessageLoopProxy::current()), |
| + idle_task_runner_(new NullIdleTaskRunner(task_runner_)) { |
| +} |
| + |
| +NullRendererScheduler::~NullRendererScheduler() { |
| +} |
| + |
| +scoped_refptr<base::SingleThreadTaskRunner> |
| +NullRendererScheduler::DefaultTaskRunner() { |
| + return task_runner_; |
| +} |
| + |
| +scoped_refptr<base::SingleThreadTaskRunner> |
| +NullRendererScheduler::CompositorTaskRunner() { |
| + return task_runner_; |
| +} |
| + |
| +scoped_refptr<SingleThreadIdleTaskRunner> |
| +NullRendererScheduler::IdleTaskRunner() { |
| + return idle_task_runner_; |
| +} |
| + |
| +void NullRendererScheduler::WillBeginFrame(const cc::BeginFrameArgs& args) { |
| +} |
| + |
| +void NullRendererScheduler::DidCommitFrameToCompositor() { |
| +} |
| + |
| +void NullRendererScheduler::DidReceiveInputEvent() { |
| +} |
| + |
| +bool NullRendererScheduler::ShouldYieldForHighPriorityWork() { |
| + return false; |
| +} |
| + |
| +} // namespace |
| + |
| +RendererScheduler::RendererScheduler() { |
| +} |
| + |
| +RendererScheduler::~RendererScheduler() { |
| +} |
| + |
| +// static |
| +scoped_ptr<RendererScheduler> RendererScheduler::Create() { |
| + CommandLine* command_line = CommandLine::ForCurrentProcess(); |
| + if (command_line->HasSwitch(switches::kDisableBlinkScheduler)) { |
|
Sami
2014/10/27 12:02:38
Could you hardcode this to use the null scheduler
rmcilroy
2014/10/27 16:25:01
Done.
|
| + return make_scoped_ptr(new NullRendererScheduler()); |
| + } else { |
| + return make_scoped_ptr(new RendererSchedulerImpl()); |
| + } |
| +} |
| + |
| +} // namespace content |