blob: b91644a2d14c26805c3a91432a5629b8ec797cf7 [file] [log] [blame]
// 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/TraceLocation.h"
#include "public/platform/Platform.h"
#include "public/platform/WebScheduler.h"
#include "public/platform/WebTraceLocation.h"
namespace blink {
class IdleTaskRunner : public WebScheduler::IdleTask {
public:
explicit IdleTaskRunner(const Scheduler::IdleTask& task)
: m_task(task)
{
}
virtual ~IdleTaskRunner()
{
}
// WebScheduler::IdleTask implementation.
void run(double deadlineSeconds) override
{
m_task(deadlineSeconds);
}
private:
Scheduler::IdleTask m_task;
};
Scheduler* Scheduler::s_sharedScheduler = nullptr;
void Scheduler::shutdown()
{
delete s_sharedScheduler;
s_sharedScheduler = nullptr;
}
Scheduler* Scheduler::shared()
{
if (!s_sharedScheduler)
s_sharedScheduler = new Scheduler(Platform::current()->scheduler());
return s_sharedScheduler;
}
Scheduler::Scheduler(WebScheduler* webScheduler)
: m_webScheduler(webScheduler)
{
}
Scheduler::~Scheduler()
{
if (m_webScheduler)
m_webScheduler->shutdown();
}
void Scheduler::postIdleTask(const TraceLocation& location, const IdleTask& idleTask)
{
if (m_webScheduler)
m_webScheduler->postIdleTask(WebTraceLocation(location), new IdleTaskRunner(idleTask));
}
bool Scheduler::shouldYieldForHighPriorityWork() const
{
if (m_webScheduler)
return m_webScheduler->shouldYieldForHighPriorityWork();
return false;
}
} // namespace blink