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: ~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 ~Platform()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