1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef WebSchedulerProxy_h
6#define WebSchedulerProxy_h
7
8#include "WebThread.h"
9
10namespace blink {
11
12class Scheduler;
13class WebTraceLocation;
14
15// This class is used to submit tasks to Blink's main thread scheduler.
16class WebSchedulerProxy {
17public:
18    BLINK_PLATFORM_EXPORT ~WebSchedulerProxy();
19
20    BLINK_PLATFORM_EXPORT static WebSchedulerProxy create();
21
22    // Schedule an input processing task to be run on the Blink main thread.
23    // Takes ownership of |Task|. Can be called from any thread.
24    BLINK_PLATFORM_EXPORT void postInputTask(const WebTraceLocation&, WebThread::Task*);
25
26    // Schedule a compositor task to run on the Blink main thread. Takes
27    // ownership of |Task|. Can be called from any thread.
28    BLINK_PLATFORM_EXPORT void postCompositorTask(const WebTraceLocation&, WebThread::Task*);
29
30    // Schedule an IPC task to be run on the Blink main thread.
31    // Takes ownership of |Task|. Can be called from any thread.
32    BLINK_PLATFORM_EXPORT void postIpcTask(const WebTraceLocation&, WebThread::Task*);
33
34    // Tells the scheduler that the system received an input event and it should go into low latency mode for a while.
35    BLINK_PLATFORM_EXPORT void didReceiveInputEvent();
36
37private:
38    WebSchedulerProxy();
39
40    Scheduler* m_scheduler;
41};
42
43} // namespace blink
44
45#endif // WebSchedulerProxy_h
46