Home | History | Annotate | Download | only in include
      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 namespace v8 {
      9 
     10 class Isolate;
     11 
     12 /**
     13  * A Task represents a unit of work.
     14  */
     15 class 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  */
     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   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_
     63