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_LIBPLATFORM_DEFAULT_PLATFORM_H_ 6 #define V8_LIBPLATFORM_DEFAULT_PLATFORM_H_ 7 8 #include <map> 9 #include <queue> 10 #include <vector> 11 12 #include "include/v8-platform.h" 13 #include "src/base/macros.h" 14 #include "src/base/platform/mutex.h" 15 #include "src/libplatform/task-queue.h" 16 17 namespace v8 { 18 namespace platform { 19 20 class TaskQueue; 21 class Thread; 22 class WorkerThread; 23 24 class DefaultPlatform : public Platform { 25 public: 26 DefaultPlatform(); 27 virtual ~DefaultPlatform(); 28 29 void SetThreadPoolSize(int thread_pool_size); 30 31 void EnsureInitialized(); 32 33 bool PumpMessageLoop(v8::Isolate* isolate); 34 35 // v8::Platform implementation. 36 virtual void CallOnBackgroundThread( 37 Task* task, ExpectedRuntime expected_runtime) OVERRIDE; 38 virtual void CallOnForegroundThread(v8::Isolate* isolate, 39 Task* task) OVERRIDE; 40 41 private: 42 static const int kMaxThreadPoolSize; 43 44 base::Mutex lock_; 45 bool initialized_; 46 int thread_pool_size_; 47 std::vector<WorkerThread*> thread_pool_; 48 TaskQueue queue_; 49 std::map<v8::Isolate*, std::queue<Task*> > main_thread_queue_; 50 51 DISALLOW_COPY_AND_ASSIGN(DefaultPlatform); 52 }; 53 54 55 } } // namespace v8::platform 56 57 58 #endif // V8_LIBPLATFORM_DEFAULT_PLATFORM_H_ 59