From 1b93245a761161f9bb5265a8223c97fd25de3f9c Mon Sep 17 00:00:00 2001 From: "jochen@chromium.org" Date: Fri, 20 Dec 2013 08:34:42 +0000 Subject: [PATCH] Lazily initialize thread pool to avoid allocating all the threads during startup R=hpayer@chromium.org BUG=none LOG=n Review URL: https://codereview.chromium.org/98123004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@18381 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/libplatform/default-platform.cc | 22 +++++++++++----------- src/libplatform/default-platform.h | 3 +++ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/libplatform/default-platform.cc b/src/libplatform/default-platform.cc index f05dc1107..72e6002c3 100644 --- a/src/libplatform/default-platform.cc +++ b/src/libplatform/default-platform.cc @@ -40,7 +40,7 @@ namespace internal { DefaultPlatform::DefaultPlatform() - : initialized_(false) {} + : initialized_(false), thread_pool_size_(0) {} DefaultPlatform::~DefaultPlatform() { @@ -58,24 +58,24 @@ DefaultPlatform::~DefaultPlatform() { void DefaultPlatform::SetThreadPoolSize(int thread_pool_size) { LockGuard guard(&lock_); ASSERT(thread_pool_size >= 0); - if (initialized_) return; - initialized_ = true; if (thread_pool_size < 1) thread_pool_size = CPU::NumberOfProcessorsOnline(); - thread_pool_size = Max(Min(thread_pool_size, kMaxThreadPoolSize), 1); + thread_pool_size_ = Max(Min(thread_pool_size, kMaxThreadPoolSize), 1); +} - for (int i = 0; i < thread_pool_size; ++i) + +void DefaultPlatform::EnsureInitialized() { + LockGuard guard(&lock_); + if (initialized_) return; + initialized_ = true; + + for (int i = 0; i < thread_pool_size_; ++i) thread_pool_.push_back(new WorkerThread(&queue_)); } void DefaultPlatform::CallOnBackgroundThread(Task *task, ExpectedRuntime expected_runtime) { -#ifdef DEBUG - { - LockGuard guard(&lock_); - ASSERT(initialized_); - } -#endif + EnsureInitialized(); queue_.Append(task); } diff --git a/src/libplatform/default-platform.h b/src/libplatform/default-platform.h index 72e886999..877b3a63e 100644 --- a/src/libplatform/default-platform.h +++ b/src/libplatform/default-platform.h @@ -59,8 +59,11 @@ class DefaultPlatform : public Platform { private: static const int kMaxThreadPoolSize = 4; + void EnsureInitialized(); + Mutex lock_; bool initialized_; + int thread_pool_size_; std::vector thread_pool_; TaskQueue queue_; -- 2.34.1