blob: 1f1679f0e0b60ec7e36281e480cb20d8c8cad64b [file] [log] [blame]
Ben Murdochb8a8cc12014-11-26 15:28:44 +00001// Copyright 2013 the V8 project 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 V8_V8_PLATFORM_H_
6#define V8_V8_PLATFORM_H_
7
8namespace v8 {
9
10class Isolate;
11
12/**
13 * A Task represents a unit of work.
14 */
15class Task {
16 public:
17 virtual ~Task() {}
18
19 virtual void Run() = 0;
20};
21
22/**
23 * V8 Platform abstraction layer.
24 *
25 * The embedder has to provide an implementation of this interface before
26 * initializing the rest of V8.
27 */
28class Platform {
29 public:
30 /**
31 * This enum is used to indicate whether a task is potentially long running,
32 * or causes a long wait. The embedder might want to use this hint to decide
33 * whether to execute the task on a dedicated thread.
34 */
35 enum ExpectedRuntime {
36 kShortRunningTask,
37 kLongRunningTask
38 };
39
40 virtual ~Platform() {}
41
42 /**
43 * Schedules a task to be invoked on a background thread. |expected_runtime|
44 * indicates that the task will run a long time. The Platform implementation
45 * takes ownership of |task|. There is no guarantee about order of execution
46 * of tasks wrt order of scheduling, nor is there a guarantee about the
47 * thread the task will be run on.
48 */
49 virtual void CallOnBackgroundThread(Task* task,
50 ExpectedRuntime expected_runtime) = 0;
51
52 /**
53 * Schedules a task to be invoked on a foreground thread wrt a specific
54 * |isolate|. Tasks posted for the same isolate should be execute in order of
55 * scheduling. The definition of "foreground" is opaque to V8.
56 */
57 virtual void CallOnForegroundThread(Isolate* isolate, Task* task) = 0;
58};
59
60} // namespace v8
61
62#endif // V8_V8_PLATFORM_H_