Home | History | Annotate | Download | only in include
      1 // Copyright 2013 the V8 project authors. All rights reserved.
      2 // Redistribution and use in source and binary forms, with or without
      3 // modification, are permitted provided that the following conditions are
      4 // met:
      5 //
      6 //     * Redistributions of source code must retain the above copyright
      7 //       notice, this list of conditions and the following disclaimer.
      8 //     * Redistributions in binary form must reproduce the above
      9 //       copyright notice, this list of conditions and the following
     10 //       disclaimer in the documentation and/or other materials provided
     11 //       with the distribution.
     12 //     * Neither the name of Google Inc. nor the names of its
     13 //       contributors may be used to endorse or promote products derived
     14 //       from this software without specific prior written permission.
     15 //
     16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27 
     28 #ifndef V8_V8_PLATFORM_H_
     29 #define V8_V8_PLATFORM_H_
     30 
     31 #include "v8.h"
     32 
     33 namespace v8 {
     34 
     35 /**
     36  * A Task represents a unit of work.
     37  */
     38 class Task {
     39  public:
     40   virtual ~Task() {}
     41 
     42   virtual void Run() = 0;
     43 };
     44 
     45 /**
     46  * V8 Platform abstraction layer.
     47  *
     48  * The embedder has to provide an implementation of this interface before
     49  * initializing the rest of V8.
     50  */
     51 class Platform {
     52  public:
     53   /**
     54    * This enum is used to indicate whether a task is potentially long running,
     55    * or causes a long wait. The embedder might want to use this hint to decide
     56    * whether to execute the task on a dedicated thread.
     57    */
     58   enum ExpectedRuntime {
     59     kShortRunningTask,
     60     kLongRunningTask
     61   };
     62 
     63   /**
     64    * Schedules a task to be invoked on a background thread. |expected_runtime|
     65    * indicates that the task will run a long time. The Platform implementation
     66    * takes ownership of |task|. There is no guarantee about order of execution
     67    * of tasks wrt order of scheduling, nor is there a guarantee about the
     68    * thread the task will be run on.
     69    */
     70   virtual void CallOnBackgroundThread(Task* task,
     71                                       ExpectedRuntime expected_runtime) = 0;
     72 
     73   /**
     74    * Schedules a task to be invoked on a foreground thread wrt a specific
     75    * |isolate|. Tasks posted for the same isolate should be execute in order of
     76    * scheduling. The definition of "foreground" is opaque to V8.
     77    */
     78   virtual void CallOnForegroundThread(Isolate* isolate, Task* task) = 0;
     79 
     80  protected:
     81   virtual ~Platform() {}
     82 };
     83 
     84 }  // namespace v8
     85 
     86 #endif  // V8_V8_PLATFORM_H_
     87