• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // 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 
8 #include "v8.h"
9 
10 namespace v8 {
11 
12 /**
13  * A Task represents a unit of work.
14  */
15 class Task {
16  public:
~Task()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  */
28 class 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   /**
41    * Schedules a task to be invoked on a background thread. |expected_runtime|
42    * indicates that the task will run a long time. The Platform implementation
43    * takes ownership of |task|. There is no guarantee about order of execution
44    * of tasks wrt order of scheduling, nor is there a guarantee about the
45    * thread the task will be run on.
46    */
47   virtual void CallOnBackgroundThread(Task* task,
48                                       ExpectedRuntime expected_runtime) = 0;
49 
50   /**
51    * Schedules a task to be invoked on a foreground thread wrt a specific
52    * |isolate|. Tasks posted for the same isolate should be execute in order of
53    * scheduling. The definition of "foreground" is opaque to V8.
54    */
55   virtual void CallOnForegroundThread(Isolate* isolate, Task* task) = 0;
56 
57  protected:
~Platform()58   virtual ~Platform() {}
59 };
60 
61 }  // namespace v8
62 
63 #endif  // V8_V8_PLATFORM_H_
64