Chromium Code Reviews| Index: Source/platform/scheduler/Scheduler.cpp |
| diff --git a/Source/platform/scheduler/Scheduler.cpp b/Source/platform/scheduler/Scheduler.cpp |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..8f2c0ca0c75a5844ea58b4a223a35a0da9fd0d83 |
| --- /dev/null |
| +++ b/Source/platform/scheduler/Scheduler.cpp |
| @@ -0,0 +1,117 @@ |
| +// 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 "config.h" |
| +#include "platform/scheduler/Scheduler.h" |
| + |
| +#include "platform/Task.h" |
| +#include "platform/TraceEvent.h" |
| +#include "public/platform/Platform.h" |
| +#include "public/platform/WebThread.h" |
| + |
| +namespace WebCore { |
| + |
| +namespace { |
| + |
| +class MainThreadTaskAdapter : public blink::WebThread::Task { |
| +public: |
| + explicit MainThreadTaskAdapter(const Scheduler::Task& task) |
| + : m_task(task) |
| + { |
| + } |
| + |
| + // WebThread::Task implementation. |
| + virtual void run() OVERRIDE |
| + { |
| + TRACE_EVENT0("blink", "MainThreadTaskAdapter::run"); |
| + m_task(); |
| + } |
| + |
| +private: |
| + Scheduler::Task m_task; |
| +}; |
| + |
| +} |
| + |
| +Scheduler* Scheduler::s_sharedScheduler = nullptr; |
| + |
| +void Scheduler::initializeOnMainThread() |
| +{ |
| + s_sharedScheduler = new Scheduler(); |
|
picksi1
2014/08/01 10:36:12
nit: Is it worth checking that s_sharedScheduler i
|
| +} |
| + |
| +void Scheduler::shutdown() |
| +{ |
| + delete s_sharedScheduler; |
| + s_sharedScheduler = nullptr; |
| +} |
| + |
| +Scheduler* Scheduler::shared() |
| +{ |
| + return s_sharedScheduler; |
| +} |
| + |
| +Scheduler::Scheduler() |
| + : m_mainThread(blink::Platform::current()->currentThread()) |
| + , m_sharedTimerFunction(nullptr) |
| +{ |
| +} |
| + |
| +Scheduler::~Scheduler() |
| +{ |
| +} |
| + |
| +void Scheduler::scheduleTask(const Task& task) |
| +{ |
| + m_mainThread->postTask(new MainThreadTaskAdapter(task)); |
| +} |
| + |
| +void Scheduler::postTask(const Task& task) |
| +{ |
| + scheduleTask(task); |
| +} |
| + |
| +void Scheduler::postInputTask(const Task& task) |
| +{ |
| + scheduleTask(task); |
| +} |
| + |
| +void Scheduler::postCompositorTask(const Task& task) |
| +{ |
| + scheduleTask(task); |
| +} |
| + |
| +void Scheduler::tickSharedTimer() |
| +{ |
| + TRACE_EVENT0("blink", "Scheduler::tickSharedTimer"); |
| + m_sharedTimerFunction(); |
| +} |
| + |
| +void Scheduler::sharedTimerAdapter() |
| +{ |
| + shared()->tickSharedTimer(); |
| +} |
| + |
| +void Scheduler::setSharedTimerFiredFunction(void (*function)()) |
| +{ |
| + m_sharedTimerFunction = function; |
| + blink::Platform::current()->setSharedTimerFiredFunction(function ? &Scheduler::sharedTimerAdapter : nullptr); |
| +} |
| + |
| +void Scheduler::setSharedTimerFireInterval(double interval) |
| +{ |
| + blink::Platform::current()->setSharedTimerFireInterval(interval); |
| +} |
| + |
| +void Scheduler::stopSharedTimer() |
| +{ |
| + blink::Platform::current()->stopSharedTimer(); |
| +} |
| + |
| +bool Scheduler::shouldYieldForHighPriorityWork() |
| +{ |
| + return false; |
| +} |
| + |
| +} // namespace WebCore |