| Index: src/isolate.cc
|
| diff --git a/src/isolate.cc b/src/isolate.cc
|
| index a5ee021b142dff0194fdec61c70c944f1790afcf..e8e1d66602b90606e3728f3590af7af3aecc9511 100644
|
| --- a/src/isolate.cc
|
| +++ b/src/isolate.cc
|
| @@ -584,13 +584,6 @@ static void PrintFrames(Isolate* isolate,
|
|
|
|
|
| void Isolate::PrintStack(StringStream* accumulator) {
|
| - if (!IsInitialized()) {
|
| - accumulator->Add(
|
| - "\n==== JS stack trace is not available =======================\n\n");
|
| - accumulator->Add(
|
| - "\n==== Isolate for the thread is not initialized =============\n\n");
|
| - return;
|
| - }
|
| // The MentionedObjectCache is not GC-proof at the moment.
|
| DisallowHeapAllocation no_gc;
|
| DCHECK(StringStream::IsMentionedObjectCacheClear(this));
|
| @@ -1467,9 +1460,8 @@ void Isolate::ThreadDataTable::RemoveAllThreads(Isolate* isolate) {
|
| #endif
|
|
|
|
|
| -Isolate::Isolate()
|
| +Isolate::Isolate(bool enable_serializer)
|
| : embedder_data_(),
|
| - state_(UNINITIALIZED),
|
| entry_stack_(NULL),
|
| stack_trace_nesting_level_(0),
|
| incomplete_message_(NULL),
|
| @@ -1507,7 +1499,7 @@ 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),
|
| - serializer_enabled_(false),
|
| + serializer_enabled_(enable_serializer),
|
| has_fatal_error_(false),
|
| initialized_from_snapshot_(false),
|
| cpu_profiler_(NULL),
|
| @@ -1596,58 +1588,53 @@ void Isolate::GlobalTearDown() {
|
|
|
|
|
| void Isolate::Deinit() {
|
| - if (state_ == INITIALIZED) {
|
| - TRACE_ISOLATE(deinit);
|
| + TRACE_ISOLATE(deinit);
|
|
|
| - debug()->Unload();
|
| + debug()->Unload();
|
|
|
| - FreeThreadResources();
|
| + FreeThreadResources();
|
|
|
| - if (concurrent_recompilation_enabled()) {
|
| - optimizing_compiler_thread_->Stop();
|
| - delete optimizing_compiler_thread_;
|
| - optimizing_compiler_thread_ = NULL;
|
| - }
|
| + if (concurrent_recompilation_enabled()) {
|
| + optimizing_compiler_thread_->Stop();
|
| + delete optimizing_compiler_thread_;
|
| + optimizing_compiler_thread_ = NULL;
|
| + }
|
|
|
| - if (heap_.mark_compact_collector()->sweeping_in_progress()) {
|
| - heap_.mark_compact_collector()->EnsureSweepingCompleted();
|
| - }
|
| + if (heap_.mark_compact_collector()->sweeping_in_progress()) {
|
| + heap_.mark_compact_collector()->EnsureSweepingCompleted();
|
| + }
|
|
|
| - if (FLAG_turbo_stats) GetTStatistics()->Print("TurboFan");
|
| - if (FLAG_hydrogen_stats) GetHStatistics()->Print("Hydrogen");
|
| + if (FLAG_turbo_stats) GetTStatistics()->Print("TurboFan");
|
| + if (FLAG_hydrogen_stats) GetHStatistics()->Print("Hydrogen");
|
|
|
| - if (FLAG_print_deopt_stress) {
|
| - PrintF(stdout, "=== Stress deopt counter: %u\n", stress_deopt_count_);
|
| - }
|
| -
|
| - // We must stop the logger before we tear down other components.
|
| - Sampler* sampler = logger_->sampler();
|
| - if (sampler && sampler->IsActive()) sampler->Stop();
|
| + if (FLAG_print_deopt_stress) {
|
| + PrintF(stdout, "=== Stress deopt counter: %u\n", stress_deopt_count_);
|
| + }
|
|
|
| - delete deoptimizer_data_;
|
| - deoptimizer_data_ = NULL;
|
| - builtins_.TearDown();
|
| - bootstrapper_->TearDown();
|
| + // We must stop the logger before we tear down other components.
|
| + Sampler* sampler = logger_->sampler();
|
| + if (sampler && sampler->IsActive()) sampler->Stop();
|
|
|
| - if (runtime_profiler_ != NULL) {
|
| - delete runtime_profiler_;
|
| - runtime_profiler_ = NULL;
|
| - }
|
| + delete deoptimizer_data_;
|
| + deoptimizer_data_ = NULL;
|
| + builtins_.TearDown();
|
| + bootstrapper_->TearDown();
|
|
|
| - delete basic_block_profiler_;
|
| - basic_block_profiler_ = NULL;
|
| + if (runtime_profiler_ != NULL) {
|
| + delete runtime_profiler_;
|
| + runtime_profiler_ = NULL;
|
| + }
|
|
|
| - heap_.TearDown();
|
| - logger_->TearDown();
|
| + delete basic_block_profiler_;
|
| + basic_block_profiler_ = NULL;
|
|
|
| - delete heap_profiler_;
|
| - heap_profiler_ = NULL;
|
| - delete cpu_profiler_;
|
| - cpu_profiler_ = NULL;
|
| + heap_.TearDown();
|
| + logger_->TearDown();
|
|
|
| - // The default isolate is re-initializable due to legacy API.
|
| - state_ = UNINITIALIZED;
|
| - }
|
| + delete heap_profiler_;
|
| + heap_profiler_ = NULL;
|
| + delete cpu_profiler_;
|
| + cpu_profiler_ = NULL;
|
| }
|
|
|
|
|
| @@ -1824,7 +1811,6 @@ void Isolate::InitializeLoggingAndCounters() {
|
|
|
|
|
| bool Isolate::Init(Deserializer* des) {
|
| - DCHECK(state_ != INITIALIZED);
|
| TRACE_ISOLATE(init);
|
|
|
| stress_deopt_count_ = FLAG_deopt_every_n_times;
|
| @@ -1990,9 +1976,10 @@ bool Isolate::Init(Deserializer* des) {
|
| heap_.amount_of_external_allocated_memory_at_last_global_gc_)),
|
| Internals::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset);
|
|
|
| - state_ = INITIALIZED;
|
| time_millis_at_init_ = base::OS::TimeCurrentMillis();
|
|
|
| + heap_.NotifyDeserializationComplete();
|
| +
|
| if (!create_heap_objects) {
|
| // Now that the heap is consistent, it's OK to generate the code for the
|
| // deopt entry table that might have been referred to by optimized code in
|
|
|