| OLD | NEW |
| 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 "v8.h" | 7 #include "v8.h" |
| 8 | 8 |
| 9 #include "ast.h" | 9 #include "ast.h" |
| 10 #include "bootstrapper.h" | 10 #include "bootstrapper.h" |
| (...skipping 1404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1415 : embedder_data_(), | 1415 : embedder_data_(), |
| 1416 state_(UNINITIALIZED), | 1416 state_(UNINITIALIZED), |
| 1417 entry_stack_(NULL), | 1417 entry_stack_(NULL), |
| 1418 stack_trace_nesting_level_(0), | 1418 stack_trace_nesting_level_(0), |
| 1419 incomplete_message_(NULL), | 1419 incomplete_message_(NULL), |
| 1420 bootstrapper_(NULL), | 1420 bootstrapper_(NULL), |
| 1421 runtime_profiler_(NULL), | 1421 runtime_profiler_(NULL), |
| 1422 compilation_cache_(NULL), | 1422 compilation_cache_(NULL), |
| 1423 counters_(NULL), | 1423 counters_(NULL), |
| 1424 code_range_(NULL), | 1424 code_range_(NULL), |
| 1425 debugger_initialized_(false), | |
| 1426 logger_(NULL), | 1425 logger_(NULL), |
| 1427 stats_table_(NULL), | 1426 stats_table_(NULL), |
| 1428 stub_cache_(NULL), | 1427 stub_cache_(NULL), |
| 1429 deoptimizer_data_(NULL), | 1428 deoptimizer_data_(NULL), |
| 1430 materialized_object_store_(NULL), | 1429 materialized_object_store_(NULL), |
| 1431 capture_stack_trace_for_uncaught_exceptions_(false), | 1430 capture_stack_trace_for_uncaught_exceptions_(false), |
| 1432 stack_trace_for_uncaught_exceptions_frame_limit_(0), | 1431 stack_trace_for_uncaught_exceptions_frame_limit_(0), |
| 1433 stack_trace_for_uncaught_exceptions_options_(StackTrace::kOverview), | 1432 stack_trace_for_uncaught_exceptions_options_(StackTrace::kOverview), |
| 1434 memory_allocator_(NULL), | 1433 memory_allocator_(NULL), |
| 1435 keyed_lookup_cache_(NULL), | 1434 keyed_lookup_cache_(NULL), |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1476 // ThreadManager is initialized early to support locking an isolate | 1475 // ThreadManager is initialized early to support locking an isolate |
| 1477 // before it is entered. | 1476 // before it is entered. |
| 1478 thread_manager_ = new ThreadManager(); | 1477 thread_manager_ = new ThreadManager(); |
| 1479 thread_manager_->isolate_ = this; | 1478 thread_manager_->isolate_ = this; |
| 1480 | 1479 |
| 1481 #ifdef DEBUG | 1480 #ifdef DEBUG |
| 1482 // heap_histograms_ initializes itself. | 1481 // heap_histograms_ initializes itself. |
| 1483 memset(&js_spill_information_, 0, sizeof(js_spill_information_)); | 1482 memset(&js_spill_information_, 0, sizeof(js_spill_information_)); |
| 1484 #endif | 1483 #endif |
| 1485 | 1484 |
| 1486 debug_ = NULL; | |
| 1487 debugger_ = NULL; | |
| 1488 | |
| 1489 handle_scope_data_.Initialize(); | 1485 handle_scope_data_.Initialize(); |
| 1490 | 1486 |
| 1491 #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \ | 1487 #define ISOLATE_INIT_EXECUTE(type, name, initial_value) \ |
| 1492 name##_ = (initial_value); | 1488 name##_ = (initial_value); |
| 1493 ISOLATE_INIT_LIST(ISOLATE_INIT_EXECUTE) | 1489 ISOLATE_INIT_LIST(ISOLATE_INIT_EXECUTE) |
| 1494 #undef ISOLATE_INIT_EXECUTE | 1490 #undef ISOLATE_INIT_EXECUTE |
| 1495 | 1491 |
| 1496 #define ISOLATE_INIT_ARRAY_EXECUTE(type, name, length) \ | 1492 #define ISOLATE_INIT_ARRAY_EXECUTE(type, name, length) \ |
| 1497 memset(name##_, 0, sizeof(type) * length); | 1493 memset(name##_, 0, sizeof(type) * length); |
| 1498 ISOLATE_INIT_ARRAY_LIST(ISOLATE_INIT_ARRAY_EXECUTE) | 1494 ISOLATE_INIT_ARRAY_LIST(ISOLATE_INIT_ARRAY_EXECUTE) |
| 1499 #undef ISOLATE_INIT_ARRAY_EXECUTE | 1495 #undef ISOLATE_INIT_ARRAY_EXECUTE |
| 1496 |
| 1497 InitializeLoggingAndCounters(); |
| 1498 debug_ = new Debug(this); |
| 1499 debugger_ = new Debugger(this); |
| 1500 } | 1500 } |
| 1501 | 1501 |
| 1502 | 1502 |
| 1503 void Isolate::TearDown() { | 1503 void Isolate::TearDown() { |
| 1504 TRACE_ISOLATE(tear_down); | 1504 TRACE_ISOLATE(tear_down); |
| 1505 | 1505 |
| 1506 // Temporarily set this isolate as current so that various parts of | 1506 // Temporarily set this isolate as current so that various parts of |
| 1507 // the isolate can access it in their destructors without having a | 1507 // the isolate can access it in their destructors without having a |
| 1508 // direct pointer. We don't use Enter/Exit here to avoid | 1508 // direct pointer. We don't use Enter/Exit here to avoid |
| 1509 // initializing the thread data. | 1509 // initializing the thread data. |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1757 void Isolate::InitializeLoggingAndCounters() { | 1757 void Isolate::InitializeLoggingAndCounters() { |
| 1758 if (logger_ == NULL) { | 1758 if (logger_ == NULL) { |
| 1759 logger_ = new Logger(this); | 1759 logger_ = new Logger(this); |
| 1760 } | 1760 } |
| 1761 if (counters_ == NULL) { | 1761 if (counters_ == NULL) { |
| 1762 counters_ = new Counters(this); | 1762 counters_ = new Counters(this); |
| 1763 } | 1763 } |
| 1764 } | 1764 } |
| 1765 | 1765 |
| 1766 | 1766 |
| 1767 void Isolate::InitializeDebugger() { | |
| 1768 LockGuard<RecursiveMutex> lock_guard(debugger_access()); | |
| 1769 if (NoBarrier_Load(&debugger_initialized_)) return; | |
| 1770 InitializeLoggingAndCounters(); | |
| 1771 debug_ = new Debug(this); | |
| 1772 debugger_ = new Debugger(this); | |
| 1773 Release_Store(&debugger_initialized_, true); | |
| 1774 } | |
| 1775 | |
| 1776 | |
| 1777 bool Isolate::Init(Deserializer* des) { | 1767 bool Isolate::Init(Deserializer* des) { |
| 1778 ASSERT(state_ != INITIALIZED); | 1768 ASSERT(state_ != INITIALIZED); |
| 1779 TRACE_ISOLATE(init); | 1769 TRACE_ISOLATE(init); |
| 1780 | 1770 |
| 1781 stress_deopt_count_ = FLAG_deopt_every_n_times; | 1771 stress_deopt_count_ = FLAG_deopt_every_n_times; |
| 1782 | 1772 |
| 1783 has_fatal_error_ = false; | 1773 has_fatal_error_ = false; |
| 1784 | 1774 |
| 1785 use_crankshaft_ = FLAG_crankshaft | 1775 use_crankshaft_ = FLAG_crankshaft |
| 1786 && !Serializer::enabled(this) | 1776 && !Serializer::enabled(this) |
| 1787 && CpuFeatures::SupportsCrankshaft(); | 1777 && CpuFeatures::SupportsCrankshaft(); |
| 1788 | 1778 |
| 1789 if (function_entry_hook() != NULL) { | 1779 if (function_entry_hook() != NULL) { |
| 1790 // When function entry hooking is in effect, we have to create the code | 1780 // When function entry hooking is in effect, we have to create the code |
| 1791 // stubs from scratch to get entry hooks, rather than loading the previously | 1781 // stubs from scratch to get entry hooks, rather than loading the previously |
| 1792 // generated stubs from disk. | 1782 // generated stubs from disk. |
| 1793 // If this assert fires, the initialization path has regressed. | 1783 // If this assert fires, the initialization path has regressed. |
| 1794 ASSERT(des == NULL); | 1784 ASSERT(des == NULL); |
| 1795 } | 1785 } |
| 1796 | 1786 |
| 1797 // The initialization process does not handle memory exhaustion. | 1787 // The initialization process does not handle memory exhaustion. |
| 1798 DisallowAllocationFailure disallow_allocation_failure(this); | 1788 DisallowAllocationFailure disallow_allocation_failure(this); |
| 1799 | 1789 |
| 1800 InitializeLoggingAndCounters(); | |
| 1801 | |
| 1802 InitializeDebugger(); | |
| 1803 | |
| 1804 memory_allocator_ = new MemoryAllocator(this); | 1790 memory_allocator_ = new MemoryAllocator(this); |
| 1805 code_range_ = new CodeRange(this); | 1791 code_range_ = new CodeRange(this); |
| 1806 | 1792 |
| 1807 // Safe after setting Heap::isolate_, and initializing StackGuard | 1793 // Safe after setting Heap::isolate_, and initializing StackGuard |
| 1808 heap_.SetStackLimits(); | 1794 heap_.SetStackLimits(); |
| 1809 | 1795 |
| 1810 #define ASSIGN_ELEMENT(CamelName, hacker_name) \ | 1796 #define ASSIGN_ELEMENT(CamelName, hacker_name) \ |
| 1811 isolate_addresses_[Isolate::k##CamelName##Address] = \ | 1797 isolate_addresses_[Isolate::k##CamelName##Address] = \ |
| 1812 reinterpret_cast<Address>(hacker_name##_address()); | 1798 reinterpret_cast<Address>(hacker_name##_address()); |
| 1813 FOR_EACH_ISOLATE_ADDRESS_NAME(ASSIGN_ELEMENT) | 1799 FOR_EACH_ISOLATE_ADDRESS_NAME(ASSIGN_ELEMENT) |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1908 } | 1894 } |
| 1909 | 1895 |
| 1910 if (num_sweeper_threads_ > 0) { | 1896 if (num_sweeper_threads_ > 0) { |
| 1911 sweeper_thread_ = new SweeperThread*[num_sweeper_threads_]; | 1897 sweeper_thread_ = new SweeperThread*[num_sweeper_threads_]; |
| 1912 for (int i = 0; i < num_sweeper_threads_; i++) { | 1898 for (int i = 0; i < num_sweeper_threads_; i++) { |
| 1913 sweeper_thread_[i] = new SweeperThread(this); | 1899 sweeper_thread_[i] = new SweeperThread(this); |
| 1914 sweeper_thread_[i]->Start(); | 1900 sweeper_thread_[i]->Start(); |
| 1915 } | 1901 } |
| 1916 } | 1902 } |
| 1917 | 1903 |
| 1918 debug_->SetUp(create_heap_objects); | |
| 1919 | |
| 1920 // If we are deserializing, read the state into the now-empty heap. | 1904 // If we are deserializing, read the state into the now-empty heap. |
| 1921 if (!create_heap_objects) { | 1905 if (!create_heap_objects) { |
| 1922 des->Deserialize(this); | 1906 des->Deserialize(this); |
| 1923 } | 1907 } |
| 1924 stub_cache_->Initialize(); | 1908 stub_cache_->Initialize(); |
| 1925 | 1909 |
| 1926 // Finish initialization of ThreadLocal after deserialization is done. | 1910 // Finish initialization of ThreadLocal after deserialization is done. |
| 1927 clear_pending_exception(); | 1911 clear_pending_exception(); |
| 1928 clear_pending_message(); | 1912 clear_pending_message(); |
| 1929 clear_scheduled_exception(); | 1913 clear_scheduled_exception(); |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2246 handle_scope_implementer()->IncrementCallDepth(); | 2230 handle_scope_implementer()->IncrementCallDepth(); |
| 2247 if (run_microtasks) Execution::RunMicrotasks(this); | 2231 if (run_microtasks) Execution::RunMicrotasks(this); |
| 2248 for (int i = 0; i < call_completed_callbacks_.length(); i++) { | 2232 for (int i = 0; i < call_completed_callbacks_.length(); i++) { |
| 2249 call_completed_callbacks_.at(i)(); | 2233 call_completed_callbacks_.at(i)(); |
| 2250 } | 2234 } |
| 2251 handle_scope_implementer()->DecrementCallDepth(); | 2235 handle_scope_implementer()->DecrementCallDepth(); |
| 2252 } | 2236 } |
| 2253 | 2237 |
| 2254 | 2238 |
| 2255 } } // namespace v8::internal | 2239 } } // namespace v8::internal |
| OLD | NEW |