Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1193)

Side by Side Diff: src/isolate.cc

Issue 633363002: Get rid of isolate state. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/isolate.h ('k') | src/sampler.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stdlib.h> 5 #include <stdlib.h>
6 6
7 #include "src/v8.h" 7 #include "src/v8.h"
8 8
9 #include "src/ast.h" 9 #include "src/ast.h"
10 #include "src/base/platform/platform.h" 10 #include "src/base/platform/platform.h"
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after
577 StringStream* accumulator, 577 StringStream* accumulator,
578 StackFrame::PrintMode mode) { 578 StackFrame::PrintMode mode) {
579 StackFrameIterator it(isolate); 579 StackFrameIterator it(isolate);
580 for (int i = 0; !it.done(); it.Advance()) { 580 for (int i = 0; !it.done(); it.Advance()) {
581 it.frame()->Print(accumulator, mode, i++); 581 it.frame()->Print(accumulator, mode, i++);
582 } 582 }
583 } 583 }
584 584
585 585
586 void Isolate::PrintStack(StringStream* accumulator) { 586 void Isolate::PrintStack(StringStream* accumulator) {
587 if (!IsInitialized()) {
588 accumulator->Add(
589 "\n==== JS stack trace is not available =======================\n\n");
590 accumulator->Add(
591 "\n==== Isolate for the thread is not initialized =============\n\n");
592 return;
593 }
594 // The MentionedObjectCache is not GC-proof at the moment. 587 // The MentionedObjectCache is not GC-proof at the moment.
595 DisallowHeapAllocation no_gc; 588 DisallowHeapAllocation no_gc;
596 DCHECK(StringStream::IsMentionedObjectCacheClear(this)); 589 DCHECK(StringStream::IsMentionedObjectCacheClear(this));
597 590
598 // Avoid printing anything if there are no frames. 591 // Avoid printing anything if there are no frames.
599 if (c_entry_fp(thread_local_top()) == 0) return; 592 if (c_entry_fp(thread_local_top()) == 0) return;
600 593
601 accumulator->Add( 594 accumulator->Add(
602 "\n==== JS stack trace =========================================\n\n"); 595 "\n==== JS stack trace =========================================\n\n");
603 PrintFrames(this, accumulator, StackFrame::OVERVIEW); 596 PrintFrames(this, accumulator, StackFrame::OVERVIEW);
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after
1460 if (FLAG_trace_isolates) { \ 1453 if (FLAG_trace_isolates) { \
1461 PrintF("Isolate %p (id %d)" #tag "\n", \ 1454 PrintF("Isolate %p (id %d)" #tag "\n", \
1462 reinterpret_cast<void*>(this), id()); \ 1455 reinterpret_cast<void*>(this), id()); \
1463 } \ 1456 } \
1464 } while (false) 1457 } while (false)
1465 #else 1458 #else
1466 #define TRACE_ISOLATE(tag) 1459 #define TRACE_ISOLATE(tag)
1467 #endif 1460 #endif
1468 1461
1469 1462
1470 Isolate::Isolate() 1463 Isolate::Isolate(bool enable_serializer)
1471 : embedder_data_(), 1464 : embedder_data_(),
1472 state_(UNINITIALIZED),
1473 entry_stack_(NULL), 1465 entry_stack_(NULL),
1474 stack_trace_nesting_level_(0), 1466 stack_trace_nesting_level_(0),
1475 incomplete_message_(NULL), 1467 incomplete_message_(NULL),
1476 bootstrapper_(NULL), 1468 bootstrapper_(NULL),
1477 runtime_profiler_(NULL), 1469 runtime_profiler_(NULL),
1478 compilation_cache_(NULL), 1470 compilation_cache_(NULL),
1479 counters_(NULL), 1471 counters_(NULL),
1480 code_range_(NULL), 1472 code_range_(NULL),
1481 logger_(NULL), 1473 logger_(NULL),
1482 stats_table_(NULL), 1474 stats_table_(NULL),
(...skipping 17 matching lines...) Expand all
1500 eternal_handles_(NULL), 1492 eternal_handles_(NULL),
1501 thread_manager_(NULL), 1493 thread_manager_(NULL),
1502 has_installed_extensions_(false), 1494 has_installed_extensions_(false),
1503 string_tracker_(NULL), 1495 string_tracker_(NULL),
1504 regexp_stack_(NULL), 1496 regexp_stack_(NULL),
1505 date_cache_(NULL), 1497 date_cache_(NULL),
1506 call_descriptor_data_(NULL), 1498 call_descriptor_data_(NULL),
1507 // TODO(bmeurer) Initialized lazily because it depends on flags; can 1499 // TODO(bmeurer) Initialized lazily because it depends on flags; can
1508 // be fixed once the default isolate cleanup is done. 1500 // be fixed once the default isolate cleanup is done.
1509 random_number_generator_(NULL), 1501 random_number_generator_(NULL),
1510 serializer_enabled_(false), 1502 serializer_enabled_(enable_serializer),
1511 has_fatal_error_(false), 1503 has_fatal_error_(false),
1512 initialized_from_snapshot_(false), 1504 initialized_from_snapshot_(false),
1513 cpu_profiler_(NULL), 1505 cpu_profiler_(NULL),
1514 heap_profiler_(NULL), 1506 heap_profiler_(NULL),
1515 function_entry_hook_(NULL), 1507 function_entry_hook_(NULL),
1516 deferred_handles_head_(NULL), 1508 deferred_handles_head_(NULL),
1517 optimizing_compiler_thread_(NULL), 1509 optimizing_compiler_thread_(NULL),
1518 stress_deopt_count_(0), 1510 stress_deopt_count_(0),
1519 next_optimization_id_(0), 1511 next_optimization_id_(0),
1520 use_counter_callback_(NULL), 1512 use_counter_callback_(NULL),
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1589 } 1581 }
1590 1582
1591 1583
1592 void Isolate::GlobalTearDown() { 1584 void Isolate::GlobalTearDown() {
1593 delete thread_data_table_; 1585 delete thread_data_table_;
1594 thread_data_table_ = NULL; 1586 thread_data_table_ = NULL;
1595 } 1587 }
1596 1588
1597 1589
1598 void Isolate::Deinit() { 1590 void Isolate::Deinit() {
1599 if (state_ == INITIALIZED) { 1591 TRACE_ISOLATE(deinit);
1600 TRACE_ISOLATE(deinit);
1601 1592
1602 debug()->Unload(); 1593 debug()->Unload();
1603 1594
1604 FreeThreadResources(); 1595 FreeThreadResources();
1605 1596
1606 if (concurrent_recompilation_enabled()) { 1597 if (concurrent_recompilation_enabled()) {
1607 optimizing_compiler_thread_->Stop(); 1598 optimizing_compiler_thread_->Stop();
1608 delete optimizing_compiler_thread_; 1599 delete optimizing_compiler_thread_;
1609 optimizing_compiler_thread_ = NULL; 1600 optimizing_compiler_thread_ = NULL;
1610 } 1601 }
1611 1602
1612 if (heap_.mark_compact_collector()->sweeping_in_progress()) { 1603 if (heap_.mark_compact_collector()->sweeping_in_progress()) {
1613 heap_.mark_compact_collector()->EnsureSweepingCompleted(); 1604 heap_.mark_compact_collector()->EnsureSweepingCompleted();
1614 } 1605 }
1615 1606
1616 if (FLAG_turbo_stats) GetTStatistics()->Print("TurboFan"); 1607 if (FLAG_turbo_stats) GetTStatistics()->Print("TurboFan");
1617 if (FLAG_hydrogen_stats) GetHStatistics()->Print("Hydrogen"); 1608 if (FLAG_hydrogen_stats) GetHStatistics()->Print("Hydrogen");
1618 1609
1619 if (FLAG_print_deopt_stress) { 1610 if (FLAG_print_deopt_stress) {
1620 PrintF(stdout, "=== Stress deopt counter: %u\n", stress_deopt_count_); 1611 PrintF(stdout, "=== Stress deopt counter: %u\n", stress_deopt_count_);
1621 } 1612 }
1622 1613
1623 // We must stop the logger before we tear down other components. 1614 // We must stop the logger before we tear down other components.
1624 Sampler* sampler = logger_->sampler(); 1615 Sampler* sampler = logger_->sampler();
1625 if (sampler && sampler->IsActive()) sampler->Stop(); 1616 if (sampler && sampler->IsActive()) sampler->Stop();
1626 1617
1627 delete deoptimizer_data_; 1618 delete deoptimizer_data_;
1628 deoptimizer_data_ = NULL; 1619 deoptimizer_data_ = NULL;
1629 builtins_.TearDown(); 1620 builtins_.TearDown();
1630 bootstrapper_->TearDown(); 1621 bootstrapper_->TearDown();
1631 1622
1632 if (runtime_profiler_ != NULL) { 1623 if (runtime_profiler_ != NULL) {
1633 delete runtime_profiler_; 1624 delete runtime_profiler_;
1634 runtime_profiler_ = NULL; 1625 runtime_profiler_ = NULL;
1635 } 1626 }
1636 1627
1637 delete basic_block_profiler_; 1628 delete basic_block_profiler_;
1638 basic_block_profiler_ = NULL; 1629 basic_block_profiler_ = NULL;
1639 1630
1640 heap_.TearDown(); 1631 heap_.TearDown();
1641 logger_->TearDown(); 1632 logger_->TearDown();
1642 1633
1643 delete heap_profiler_; 1634 delete heap_profiler_;
1644 heap_profiler_ = NULL; 1635 heap_profiler_ = NULL;
1645 delete cpu_profiler_; 1636 delete cpu_profiler_;
1646 cpu_profiler_ = NULL; 1637 cpu_profiler_ = NULL;
1647
1648 // The default isolate is re-initializable due to legacy API.
1649 state_ = UNINITIALIZED;
1650 }
1651 } 1638 }
1652 1639
1653 1640
1654 void Isolate::PushToPartialSnapshotCache(Object* obj) { 1641 void Isolate::PushToPartialSnapshotCache(Object* obj) {
1655 int length = serialize_partial_snapshot_cache_length(); 1642 int length = serialize_partial_snapshot_cache_length();
1656 int capacity = serialize_partial_snapshot_cache_capacity(); 1643 int capacity = serialize_partial_snapshot_cache_capacity();
1657 1644
1658 if (length >= capacity) { 1645 if (length >= capacity) {
1659 int new_capacity = static_cast<int>((capacity + 10) * 1.2); 1646 int new_capacity = static_cast<int>((capacity + 10) * 1.2);
1660 Object** new_array = new Object*[new_capacity]; 1647 Object** new_array = new Object*[new_capacity];
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
1817 if (logger_ == NULL) { 1804 if (logger_ == NULL) {
1818 logger_ = new Logger(this); 1805 logger_ = new Logger(this);
1819 } 1806 }
1820 if (counters_ == NULL) { 1807 if (counters_ == NULL) {
1821 counters_ = new Counters(this); 1808 counters_ = new Counters(this);
1822 } 1809 }
1823 } 1810 }
1824 1811
1825 1812
1826 bool Isolate::Init(Deserializer* des) { 1813 bool Isolate::Init(Deserializer* des) {
1827 DCHECK(state_ != INITIALIZED);
1828 TRACE_ISOLATE(init); 1814 TRACE_ISOLATE(init);
1829 1815
1830 stress_deopt_count_ = FLAG_deopt_every_n_times; 1816 stress_deopt_count_ = FLAG_deopt_every_n_times;
1831 1817
1832 has_fatal_error_ = false; 1818 has_fatal_error_ = false;
1833 1819
1834 if (function_entry_hook() != NULL) { 1820 if (function_entry_hook() != NULL) {
1835 // When function entry hooking is in effect, we have to create the code 1821 // When function entry hooking is in effect, we have to create the code
1836 // stubs from scratch to get entry hooks, rather than loading the previously 1822 // stubs from scratch to get entry hooks, rather than loading the previously
1837 // generated stubs from disk. 1823 // generated stubs from disk.
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1983 CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, heap_.roots_)), 1969 CHECK_EQ(static_cast<int>(OFFSET_OF(Isolate, heap_.roots_)),
1984 Internals::kIsolateRootsOffset); 1970 Internals::kIsolateRootsOffset);
1985 CHECK_EQ(static_cast<int>( 1971 CHECK_EQ(static_cast<int>(
1986 OFFSET_OF(Isolate, heap_.amount_of_external_allocated_memory_)), 1972 OFFSET_OF(Isolate, heap_.amount_of_external_allocated_memory_)),
1987 Internals::kAmountOfExternalAllocatedMemoryOffset); 1973 Internals::kAmountOfExternalAllocatedMemoryOffset);
1988 CHECK_EQ(static_cast<int>(OFFSET_OF( 1974 CHECK_EQ(static_cast<int>(OFFSET_OF(
1989 Isolate, 1975 Isolate,
1990 heap_.amount_of_external_allocated_memory_at_last_global_gc_)), 1976 heap_.amount_of_external_allocated_memory_at_last_global_gc_)),
1991 Internals::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset); 1977 Internals::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset);
1992 1978
1993 state_ = INITIALIZED;
1994 time_millis_at_init_ = base::OS::TimeCurrentMillis(); 1979 time_millis_at_init_ = base::OS::TimeCurrentMillis();
1995 1980
1981 heap_.NotifyDeserializationComplete();
1982
1996 if (!create_heap_objects) { 1983 if (!create_heap_objects) {
1997 // Now that the heap is consistent, it's OK to generate the code for the 1984 // Now that the heap is consistent, it's OK to generate the code for the
1998 // deopt entry table that might have been referred to by optimized code in 1985 // deopt entry table that might have been referred to by optimized code in
1999 // the snapshot. 1986 // the snapshot.
2000 HandleScope scope(this); 1987 HandleScope scope(this);
2001 Deoptimizer::EnsureCodeForDeoptimizationEntry( 1988 Deoptimizer::EnsureCodeForDeoptimizationEntry(
2002 this, 1989 this,
2003 Deoptimizer::LAZY, 1990 Deoptimizer::LAZY,
2004 kDeoptTableSerializeEntryCount - 1); 1991 kDeoptTableSerializeEntryCount - 1);
2005 } 1992 }
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
2394 if (prev_ && prev_->Intercept(flag)) return true; 2381 if (prev_ && prev_->Intercept(flag)) return true;
2395 // Then check whether this scope intercepts. 2382 // Then check whether this scope intercepts.
2396 if ((flag & intercept_mask_)) { 2383 if ((flag & intercept_mask_)) {
2397 intercepted_flags_ |= flag; 2384 intercepted_flags_ |= flag;
2398 return true; 2385 return true;
2399 } 2386 }
2400 return false; 2387 return false;
2401 } 2388 }
2402 2389
2403 } } // namespace v8::internal 2390 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/isolate.h ('k') | src/sampler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698