Index: Source/platform/scheduler/Scheduler.cpp |
diff --git a/Source/platform/scheduler/Scheduler.cpp b/Source/platform/scheduler/Scheduler.cpp |
index 535f114114da747340502f20efd830cbf81440d0..c914eba7fb06acf6e09e1553dbb7838349f3d59b 100644 |
--- a/Source/platform/scheduler/Scheduler.cpp |
+++ b/Source/platform/scheduler/Scheduler.cpp |
@@ -13,13 +13,13 @@ |
namespace blink { |
class IdleTaskRunner : public WebScheduler::IdleTask { |
+ WTF_MAKE_NONCOPYABLE(IdleTaskRunner); |
public: |
- explicit IdleTaskRunner(PassOwnPtr<Scheduler::IdleTask> task) |
- : m_task(task) |
+ explicit IdleTaskRunner(PassOwnPtr<Scheduler::IdleTask> task) : m_task(task) |
{ |
} |
- virtual ~IdleTaskRunner() |
+ ~IdleTaskRunner() override |
{ |
} |
@@ -32,6 +32,26 @@ private: |
OwnPtr<Scheduler::IdleTask> m_task; |
}; |
+class ClosureRunner : public WebThread::Task { |
+ WTF_MAKE_NONCOPYABLE(ClosureRunner); |
+public: |
+ explicit ClosureRunner(PassOwnPtr<Closure> closure) : m_closure(closure) |
+ { |
+ } |
+ |
+ ~ClosureRunner() override |
+ { |
+ } |
+ |
+ // WebThread::Task implementation. |
+ void run() override |
+ { |
+ (*m_closure)(); |
+ } |
+private: |
+ OwnPtr<Closure> m_closure; |
+}; |
+ |
Scheduler* Scheduler::s_sharedScheduler = nullptr; |
void Scheduler::shutdown() |
@@ -64,6 +84,18 @@ void Scheduler::postIdleTask(const TraceLocation& location, PassOwnPtr<IdleTask> |
m_webScheduler->postIdleTask(WebTraceLocation(location), new IdleTaskRunner(idleTask)); |
} |
+void Scheduler::postLoadingTask(const TraceLocation& location, PassOwnPtr<Closure> closure) |
+{ |
+ if (m_webScheduler) |
+ m_webScheduler->postLoadingTask(WebTraceLocation(location), new ClosureRunner(closure)); |
+} |
+ |
+void Scheduler::postLoadingTask(const TraceLocation& location, WebThread::Task* task) |
+{ |
+ if (m_webScheduler) |
+ m_webScheduler->postLoadingTask(WebTraceLocation(location), task); |
+} |
+ |
bool Scheduler::shouldYieldForHighPriorityWork() const |
{ |
if (m_webScheduler) |