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