| Index: Source/platform/scheduler/Scheduler.h
|
| diff --git a/Source/platform/scheduler/Scheduler.h b/Source/platform/scheduler/Scheduler.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..81f18d59b46f23e1a9054ba2b99679b0674c8313
|
| --- /dev/null
|
| +++ b/Source/platform/scheduler/Scheduler.h
|
| @@ -0,0 +1,97 @@
|
| +/*
|
| + * Copyright (C) 2014 Google Inc. All rights reserved.
|
| + *
|
| + * Redistribution and use in source and binary forms, with or without
|
| + * modification, are permitted provided that the following conditions
|
| + * are met:
|
| + * 1. Redistributions of source code must retain the above copyright
|
| + * notice, this list of conditions and the following disclaimer.
|
| + * 2. Redistributions in binary form must reproduce the above copyright
|
| + * notice, this list of conditions and the following disclaimer in the
|
| + * documentation and/or other materials provided with the distribution.
|
| + *
|
| + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
|
| + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
| + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
|
| + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
| + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
| + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
| + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
| + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
| + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
| + * THE POSSIBILITY OF SUCH DAMAGE.
|
| + */
|
| +
|
| +#ifndef Scheduler_h
|
| +#define Scheduler_h
|
| +
|
| +#include "platform/PlatformExport.h"
|
| +#include "public/platform/WebThread.h"
|
| +#include "wtf/Functional.h"
|
| +#include "wtf/Noncopyable.h"
|
| +#include "wtf/PassOwnPtr.h"
|
| +#include "wtf/ThreadingPrimitives.h"
|
| +#include <deque>
|
| +
|
| +namespace WebCore {
|
| +
|
| +class PLATFORM_EXPORT Scheduler {
|
| + WTF_MAKE_NONCOPYABLE(Scheduler);
|
| +public:
|
| + static Scheduler* current();
|
| + static void initializeOnMainThread();
|
| + static void shutdown();
|
| +
|
| + // Schedule a generic task to be run on the blink main thread. Takes
|
| + // ownership of |Task|. Can be called from any thread.
|
| + void postTask(blink::WebThread::Task*);
|
| +
|
| + // Schedule an input processing task to be run on the blink main thread.
|
| + // Takes ownership of |Task|. Can be called from any thread.
|
| + void postInputTask(blink::WebThread::Task*);
|
| +
|
| + // Schedule a compositor task to run on the blink main thread. Takes
|
| + // ownership of |Task|. Can be called from any thread.
|
| + void postCompositorTask(blink::WebThread::Task*);
|
| +
|
| + // Schedule a BeginFrame task to run on the blink main thread. Takes
|
| + // ownership of |Task|. Can be called from any thread. Maintains ordering
|
| + // with other compositor tasks.
|
| + void postBeginFrameTask(blink::WebThread::Task*, double frameTime, double deadline, double interval);
|
| +
|
| + void setSharedTimerFiredFunction(void (*function)());
|
| + void setSharedTimerFireInterval(double interval);
|
| + void stopSharedTimer();
|
| +
|
| + bool shouldYieldForHighPriorityWork();
|
| +
|
| +private:
|
| + typedef std::deque<blink::WebThread::Task*> TaskQueue;
|
| +
|
| + Scheduler();
|
| + ~Scheduler();
|
| +
|
| + void scheduleTask(TaskQueue*, blink::WebThread::Task*);
|
| + PassOwnPtr<blink::WebThread::Task> chooseNextTask();
|
| + void runScheduledTasks();
|
| +
|
| + static void sharedTimerAdapter();
|
| + void runSharedTimer();
|
| +
|
| + static Scheduler* s_currentScheduler;
|
| + blink::WebThread* m_mainThread;
|
| +
|
| + void (*m_sharedTimerFunction)();
|
| +
|
| + Mutex m_taskQueueLock;
|
| + TaskQueue m_pendingInputTasks;
|
| + TaskQueue m_pendingCompositorTasks;
|
| + TaskQueue m_pendingTasks;
|
| + bool m_workScheduled;
|
| + bool m_hasPendingBeginFrameTask;
|
| +};
|
| +
|
| +} // namespace WebCore
|
| +
|
| +#endif // Scheduler_h
|
|
|