diff options
Diffstat (limited to 'deps/v8/src/isolate.cc')
-rw-r--r-- | deps/v8/src/isolate.cc | 67 |
1 files changed, 31 insertions, 36 deletions
diff --git a/deps/v8/src/isolate.cc b/deps/v8/src/isolate.cc index 6fa496a90..71cd30158 100644 --- a/deps/v8/src/isolate.cc +++ b/deps/v8/src/isolate.cc @@ -42,7 +42,6 @@ #include "isolate-inl.h" #include "lithium-allocator.h" #include "log.h" -#include "marking-thread.h" #include "messages.h" #include "platform.h" #include "regexp-stack.h" @@ -121,11 +120,7 @@ void ThreadLocalTop::InitializeInternal() { void ThreadLocalTop::Initialize() { InitializeInternal(); #ifdef USE_SIMULATOR -#if V8_TARGET_ARCH_ARM simulator_ = Simulator::current(isolate_); -#elif V8_TARGET_ARCH_MIPS - simulator_ = Simulator::current(isolate_); -#endif #endif thread_id_ = ThreadId::Current(); } @@ -147,8 +142,6 @@ int SystemThreadManager::NumberOfParallelSystemThreads( return number_of_threads; } else if (type == CONCURRENT_SWEEPING) { return number_of_threads - 1; - } else if (type == PARALLEL_MARKING) { - return number_of_threads; } return 1; } @@ -345,6 +338,14 @@ Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_; Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key; #endif // DEBUG Mutex Isolate::process_wide_mutex_; +// TODO(dcarney): Remove with default isolate. +enum DefaultIsolateStatus { + kDefaultIsolateUninitialized, + kDefaultIsolateInitialized, + kDefaultIsolateCrashIfInitialized +}; +static DefaultIsolateStatus default_isolate_status_ + = kDefaultIsolateUninitialized; Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL; Atomic32 Isolate::isolate_counter_ = 0; @@ -382,8 +383,16 @@ Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread( } +void Isolate::SetCrashIfDefaultIsolateInitialized() { + LockGuard<Mutex> lock_guard(&process_wide_mutex_); + CHECK(default_isolate_status_ != kDefaultIsolateInitialized); + default_isolate_status_ = kDefaultIsolateCrashIfInitialized; +} + + void Isolate::EnsureDefaultIsolate() { LockGuard<Mutex> lock_guard(&process_wide_mutex_); + CHECK(default_isolate_status_ != kDefaultIsolateCrashIfInitialized); if (default_isolate_ == NULL) { isolate_key_ = Thread::CreateThreadLocalKey(); thread_id_key_ = Thread::CreateThreadLocalKey(); @@ -1087,7 +1096,7 @@ Failure* Isolate::StackOverflow() { Handle<String> key = factory()->stack_overflow_string(); Handle<JSObject> boilerplate = Handle<JSObject>::cast(GetProperty(this, js_builtins_object(), key)); - Handle<JSObject> exception = Copy(boilerplate); + Handle<JSObject> exception = JSObject::Copy(boilerplate); DoThrow(*exception, NULL); // Get stack trace limit. @@ -1657,11 +1666,7 @@ char* Isolate::RestoreThread(char* from) { // This might be just paranoia, but it seems to be needed in case a // thread_local_top_ is restored on a separate OS thread. #ifdef USE_SIMULATOR -#if V8_TARGET_ARCH_ARM thread_local_top()->simulator_ = Simulator::current(this); -#elif V8_TARGET_ARCH_MIPS - thread_local_top()->simulator_ = Simulator::current(this); -#endif #endif ASSERT(context() == NULL || context()->IsContext()); return from + sizeof(ThreadLocalTop); @@ -1776,7 +1781,6 @@ Isolate::Isolate() // TODO(bmeurer) Initialized lazily because it depends on flags; can // be fixed once the default isolate cleanup is done. random_number_generator_(NULL), - is_memory_constrained_(false), has_fatal_error_(false), use_crankshaft_(true), initialized_from_snapshot_(false), @@ -1784,8 +1788,7 @@ Isolate::Isolate() heap_profiler_(NULL), function_entry_hook_(NULL), deferred_handles_head_(NULL), - optimizing_compiler_thread_(this), - marking_thread_(NULL), + optimizing_compiler_thread_(NULL), sweeper_thread_(NULL), stress_deopt_count_(0) { id_ = NoBarrier_AtomicIncrement(&isolate_counter_, 1); @@ -1879,7 +1882,10 @@ void Isolate::Deinit() { debugger()->UnloadDebugger(); #endif - if (FLAG_concurrent_recompilation) optimizing_compiler_thread_.Stop(); + if (FLAG_concurrent_recompilation) { + optimizing_compiler_thread_->Stop(); + delete optimizing_compiler_thread_; + } if (FLAG_sweeper_threads > 0) { for (int i = 0; i < FLAG_sweeper_threads; i++) { @@ -1889,14 +1895,6 @@ void Isolate::Deinit() { delete[] sweeper_thread_; } - if (FLAG_marking_threads > 0) { - for (int i = 0; i < FLAG_marking_threads; i++) { - marking_thread_[i]->Stop(); - delete marking_thread_[i]; - } - delete[] marking_thread_; - } - if (FLAG_hydrogen_stats) GetHStatistics()->Print(); if (FLAG_print_deopt_stress) { @@ -1911,7 +1909,7 @@ void Isolate::Deinit() { deoptimizer_data_ = NULL; if (FLAG_preemption) { v8::Locker locker(reinterpret_cast<v8::Isolate*>(this)); - v8::Locker::StopPreemption(); + v8::Locker::StopPreemption(reinterpret_cast<v8::Isolate*>(this)); } builtins_.TearDown(); bootstrapper_->TearDown(); @@ -2219,6 +2217,11 @@ bool Isolate::Init(Deserializer* des) { deoptimizer_data_ = new DeoptimizerData(memory_allocator_); + if (FLAG_concurrent_recompilation) { + optimizing_compiler_thread_ = new OptimizingCompilerThread(this); + optimizing_compiler_thread_->Start(); + } + const bool create_heap_objects = (des == NULL); if (create_heap_objects && !heap_.CreateHeapObjects()) { V8::FatalProcessOutOfMemory("heap object creation"); @@ -2248,7 +2251,7 @@ bool Isolate::Init(Deserializer* des) { if (FLAG_preemption) { v8::Locker locker(reinterpret_cast<v8::Isolate*>(this)); - v8::Locker::StartPreemption(100); + v8::Locker::StartPreemption(reinterpret_cast<v8::Isolate*>(this), 100); } #ifdef ENABLE_DEBUGGER_SUPPORT @@ -2318,21 +2321,13 @@ bool Isolate::Init(Deserializer* des) { DONT_TRACK_ALLOCATION_SITE, 0); stub.InitializeInterfaceDescriptor( this, code_stub_interface_descriptor(CodeStub::FastCloneShallowArray)); + BinaryOpStub::InitializeForIsolate(this); CompareNilICStub::InitializeForIsolate(this); ToBooleanStub::InitializeForIsolate(this); ArrayConstructorStubBase::InstallDescriptors(this); InternalArrayConstructorStubBase::InstallDescriptors(this); FastNewClosureStub::InstallDescriptors(this); - } - - if (FLAG_concurrent_recompilation) optimizing_compiler_thread_.Start(); - - if (FLAG_marking_threads > 0) { - marking_thread_ = new MarkingThread*[FLAG_marking_threads]; - for (int i = 0; i < FLAG_marking_threads; i++) { - marking_thread_[i] = new MarkingThread(this); - marking_thread_[i]->Start(); - } + NumberToStringStub::InstallDescriptors(this); } if (FLAG_sweeper_threads > 0) { |