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

Side by Side Diff: src/isolate.cc

Issue 358363002: Move platform abstraction to base library (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: updates Created 6 years, 5 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
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"
11 #include "src/base/utils/random-number-generator.h"
10 #include "src/bootstrapper.h" 12 #include "src/bootstrapper.h"
11 #include "src/codegen.h" 13 #include "src/codegen.h"
12 #include "src/compilation-cache.h" 14 #include "src/compilation-cache.h"
13 #include "src/cpu-profiler.h" 15 #include "src/cpu-profiler.h"
14 #include "src/debug.h" 16 #include "src/debug.h"
15 #include "src/deoptimizer.h" 17 #include "src/deoptimizer.h"
16 #include "src/heap-profiler.h" 18 #include "src/heap-profiler.h"
17 #include "src/hydrogen.h" 19 #include "src/hydrogen.h"
18 #include "src/isolate-inl.h" 20 #include "src/isolate-inl.h"
19 #include "src/lithium-allocator.h" 21 #include "src/lithium-allocator.h"
20 #include "src/log.h" 22 #include "src/log.h"
21 #include "src/messages.h" 23 #include "src/messages.h"
22 #include "src/platform.h"
23 #include "src/regexp-stack.h" 24 #include "src/regexp-stack.h"
24 #include "src/runtime-profiler.h" 25 #include "src/runtime-profiler.h"
25 #include "src/sampler.h" 26 #include "src/sampler.h"
26 #include "src/scopeinfo.h" 27 #include "src/scopeinfo.h"
27 #include "src/serialize.h" 28 #include "src/serialize.h"
28 #include "src/simulator.h" 29 #include "src/simulator.h"
29 #include "src/spaces.h" 30 #include "src/spaces.h"
30 #include "src/stub-cache.h" 31 #include "src/stub-cache.h"
31 #include "src/sweeper-thread.h" 32 #include "src/sweeper-thread.h"
32 #include "src/utils/random-number-generator.h"
33 #include "src/version.h" 33 #include "src/version.h"
34 #include "src/vm-state-inl.h" 34 #include "src/vm-state-inl.h"
35 35
36 36
37 namespace v8 { 37 namespace v8 {
38 namespace internal { 38 namespace internal {
39 39
40 base::Atomic32 ThreadId::highest_thread_id_ = 0; 40 base::Atomic32 ThreadId::highest_thread_id_ = 0;
41 41
42 int ThreadId::AllocateThreadId() { 42 int ThreadId::AllocateThreadId() {
43 int new_id = base::NoBarrier_AtomicIncrement(&highest_thread_id_, 1); 43 int new_id = base::NoBarrier_AtomicIncrement(&highest_thread_id_, 1);
44 return new_id; 44 return new_id;
45 } 45 }
46 46
47 47
48 int ThreadId::GetCurrentThreadId() { 48 int ThreadId::GetCurrentThreadId() {
49 int thread_id = Thread::GetThreadLocalInt(Isolate::thread_id_key_); 49 int thread_id = base::Thread::GetThreadLocalInt(Isolate::thread_id_key_);
50 if (thread_id == 0) { 50 if (thread_id == 0) {
51 thread_id = AllocateThreadId(); 51 thread_id = AllocateThreadId();
52 Thread::SetThreadLocalInt(Isolate::thread_id_key_, thread_id); 52 base::Thread::SetThreadLocalInt(Isolate::thread_id_key_, thread_id);
53 } 53 }
54 return thread_id; 54 return thread_id;
55 } 55 }
56 56
57 57
58 ThreadLocalTop::ThreadLocalTop() { 58 ThreadLocalTop::ThreadLocalTop() {
59 InitializeInternal(); 59 InitializeInternal();
60 } 60 }
61 61
62 62
(...skipping 28 matching lines...) Expand all
91 91
92 void ThreadLocalTop::Initialize() { 92 void ThreadLocalTop::Initialize() {
93 InitializeInternal(); 93 InitializeInternal();
94 #ifdef USE_SIMULATOR 94 #ifdef USE_SIMULATOR
95 simulator_ = Simulator::current(isolate_); 95 simulator_ = Simulator::current(isolate_);
96 #endif 96 #endif
97 thread_id_ = ThreadId::Current(); 97 thread_id_ = ThreadId::Current();
98 } 98 }
99 99
100 100
101 Thread::LocalStorageKey Isolate::isolate_key_; 101 base::Thread::LocalStorageKey Isolate::isolate_key_;
102 Thread::LocalStorageKey Isolate::thread_id_key_; 102 base::Thread::LocalStorageKey Isolate::thread_id_key_;
103 Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_; 103 base::Thread::LocalStorageKey Isolate::per_isolate_thread_data_key_;
104 #ifdef DEBUG 104 #ifdef DEBUG
105 Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key; 105 base::Thread::LocalStorageKey PerThreadAssertScopeBase::thread_local_key;
106 #endif // DEBUG 106 #endif // DEBUG
107 Mutex Isolate::process_wide_mutex_; 107 base::Mutex Isolate::process_wide_mutex_;
108 // TODO(dcarney): Remove with default isolate. 108 // TODO(dcarney): Remove with default isolate.
109 enum DefaultIsolateStatus { 109 enum DefaultIsolateStatus {
110 kDefaultIsolateUninitialized, 110 kDefaultIsolateUninitialized,
111 kDefaultIsolateInitialized, 111 kDefaultIsolateInitialized,
112 kDefaultIsolateCrashIfInitialized 112 kDefaultIsolateCrashIfInitialized
113 }; 113 };
114 static DefaultIsolateStatus default_isolate_status_ 114 static DefaultIsolateStatus default_isolate_status_
115 = kDefaultIsolateUninitialized; 115 = kDefaultIsolateUninitialized;
116 Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL; 116 Isolate::ThreadDataTable* Isolate::thread_data_table_ = NULL;
117 base::Atomic32 Isolate::isolate_counter_ = 0; 117 base::Atomic32 Isolate::isolate_counter_ = 0;
118 118
119 Isolate::PerIsolateThreadData* 119 Isolate::PerIsolateThreadData*
120 Isolate::FindOrAllocatePerThreadDataForThisThread() { 120 Isolate::FindOrAllocatePerThreadDataForThisThread() {
121 ThreadId thread_id = ThreadId::Current(); 121 ThreadId thread_id = ThreadId::Current();
122 PerIsolateThreadData* per_thread = NULL; 122 PerIsolateThreadData* per_thread = NULL;
123 { 123 {
124 LockGuard<Mutex> lock_guard(&process_wide_mutex_); 124 base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_);
125 per_thread = thread_data_table_->Lookup(this, thread_id); 125 per_thread = thread_data_table_->Lookup(this, thread_id);
126 if (per_thread == NULL) { 126 if (per_thread == NULL) {
127 per_thread = new PerIsolateThreadData(this, thread_id); 127 per_thread = new PerIsolateThreadData(this, thread_id);
128 thread_data_table_->Insert(per_thread); 128 thread_data_table_->Insert(per_thread);
129 } 129 }
130 ASSERT(thread_data_table_->Lookup(this, thread_id) == per_thread); 130 ASSERT(thread_data_table_->Lookup(this, thread_id) == per_thread);
131 } 131 }
132 return per_thread; 132 return per_thread;
133 } 133 }
134 134
135 135
136 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() { 136 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThisThread() {
137 ThreadId thread_id = ThreadId::Current(); 137 ThreadId thread_id = ThreadId::Current();
138 return FindPerThreadDataForThread(thread_id); 138 return FindPerThreadDataForThread(thread_id);
139 } 139 }
140 140
141 141
142 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread( 142 Isolate::PerIsolateThreadData* Isolate::FindPerThreadDataForThread(
143 ThreadId thread_id) { 143 ThreadId thread_id) {
144 PerIsolateThreadData* per_thread = NULL; 144 PerIsolateThreadData* per_thread = NULL;
145 { 145 {
146 LockGuard<Mutex> lock_guard(&process_wide_mutex_); 146 base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_);
147 per_thread = thread_data_table_->Lookup(this, thread_id); 147 per_thread = thread_data_table_->Lookup(this, thread_id);
148 } 148 }
149 return per_thread; 149 return per_thread;
150 } 150 }
151 151
152 152
153 void Isolate::SetCrashIfDefaultIsolateInitialized() { 153 void Isolate::SetCrashIfDefaultIsolateInitialized() {
154 LockGuard<Mutex> lock_guard(&process_wide_mutex_); 154 base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_);
155 CHECK(default_isolate_status_ != kDefaultIsolateInitialized); 155 CHECK(default_isolate_status_ != kDefaultIsolateInitialized);
156 default_isolate_status_ = kDefaultIsolateCrashIfInitialized; 156 default_isolate_status_ = kDefaultIsolateCrashIfInitialized;
157 } 157 }
158 158
159 159
160 void Isolate::EnsureDefaultIsolate() { 160 void Isolate::EnsureDefaultIsolate() {
161 LockGuard<Mutex> lock_guard(&process_wide_mutex_); 161 base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_);
162 CHECK(default_isolate_status_ != kDefaultIsolateCrashIfInitialized); 162 CHECK(default_isolate_status_ != kDefaultIsolateCrashIfInitialized);
163 if (thread_data_table_ == NULL) { 163 if (thread_data_table_ == NULL) {
164 isolate_key_ = Thread::CreateThreadLocalKey(); 164 isolate_key_ = base::Thread::CreateThreadLocalKey();
165 thread_id_key_ = Thread::CreateThreadLocalKey(); 165 thread_id_key_ = base::Thread::CreateThreadLocalKey();
166 per_isolate_thread_data_key_ = Thread::CreateThreadLocalKey(); 166 per_isolate_thread_data_key_ = base::Thread::CreateThreadLocalKey();
167 #ifdef DEBUG 167 #ifdef DEBUG
168 PerThreadAssertScopeBase::thread_local_key = Thread::CreateThreadLocalKey(); 168 PerThreadAssertScopeBase::thread_local_key =
169 base::Thread::CreateThreadLocalKey();
169 #endif // DEBUG 170 #endif // DEBUG
170 thread_data_table_ = new Isolate::ThreadDataTable(); 171 thread_data_table_ = new Isolate::ThreadDataTable();
171 } 172 }
172 } 173 }
173 174
174 struct StaticInitializer { 175 struct StaticInitializer {
175 StaticInitializer() { 176 StaticInitializer() {
176 Isolate::EnsureDefaultIsolate(); 177 Isolate::EnsureDefaultIsolate();
177 } 178 }
178 } static_initializer; 179 } static_initializer;
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 StringStream::ClearMentionedObjectCache(this); 280 StringStream::ClearMentionedObjectCache(this);
280 StringStream accumulator(&allocator); 281 StringStream accumulator(&allocator);
281 incomplete_message_ = &accumulator; 282 incomplete_message_ = &accumulator;
282 PrintStack(&accumulator); 283 PrintStack(&accumulator);
283 Handle<String> stack_trace = accumulator.ToString(this); 284 Handle<String> stack_trace = accumulator.ToString(this);
284 incomplete_message_ = NULL; 285 incomplete_message_ = NULL;
285 stack_trace_nesting_level_ = 0; 286 stack_trace_nesting_level_ = 0;
286 return stack_trace; 287 return stack_trace;
287 } else if (stack_trace_nesting_level_ == 1) { 288 } else if (stack_trace_nesting_level_ == 1) {
288 stack_trace_nesting_level_++; 289 stack_trace_nesting_level_++;
289 OS::PrintError( 290 base::OS::PrintError(
290 "\n\nAttempt to print stack while printing stack (double fault)\n"); 291 "\n\nAttempt to print stack while printing stack (double fault)\n");
291 OS::PrintError( 292 base::OS::PrintError(
292 "If you are lucky you may find a partial stack dump on stdout.\n\n"); 293 "If you are lucky you may find a partial stack dump on stdout.\n\n");
293 incomplete_message_->OutputToStdOut(); 294 incomplete_message_->OutputToStdOut();
294 return factory()->empty_string(); 295 return factory()->empty_string();
295 } else { 296 } else {
296 OS::Abort(); 297 base::OS::Abort();
297 // Unreachable 298 // Unreachable
298 return factory()->empty_string(); 299 return factory()->empty_string();
299 } 300 }
300 } 301 }
301 302
302 303
303 void Isolate::PushStackTraceAndDie(unsigned int magic, 304 void Isolate::PushStackTraceAndDie(unsigned int magic,
304 Object* object, 305 Object* object,
305 Map* map, 306 Map* map,
306 unsigned int magic2) { 307 unsigned int magic2) {
307 const int kMaxStackTraceSize = 8192; 308 const int kMaxStackTraceSize = 8192;
308 Handle<String> trace = StackTraceString(); 309 Handle<String> trace = StackTraceString();
309 uint8_t buffer[kMaxStackTraceSize]; 310 uint8_t buffer[kMaxStackTraceSize];
310 int length = Min(kMaxStackTraceSize - 1, trace->length()); 311 int length = Min(kMaxStackTraceSize - 1, trace->length());
311 String::WriteToFlat(*trace, buffer, 0, length); 312 String::WriteToFlat(*trace, buffer, 0, length);
312 buffer[length] = '\0'; 313 buffer[length] = '\0';
313 // TODO(dcarney): convert buffer to utf8? 314 // TODO(dcarney): convert buffer to utf8?
314 OS::PrintError("Stacktrace (%x-%x) %p %p: %s\n", 315 base::OS::PrintError("Stacktrace (%x-%x) %p %p: %s\n", magic, magic2,
315 magic, magic2, 316 static_cast<void*>(object), static_cast<void*>(map),
316 static_cast<void*>(object), static_cast<void*>(map), 317 reinterpret_cast<char*>(buffer));
317 reinterpret_cast<char*>(buffer)); 318 base::OS::Abort();
318 OS::Abort();
319 } 319 }
320 320
321 321
322 // Determines whether the given stack frame should be displayed in 322 // Determines whether the given stack frame should be displayed in
323 // a stack trace. The caller is the error constructor that asked 323 // a stack trace. The caller is the error constructor that asked
324 // for the stack trace to be collected. The first time a construct 324 // for the stack trace to be collected. The first time a construct
325 // call to this function is encountered it is skipped. The seen_caller 325 // call to this function is encountered it is skipped. The seen_caller
326 // in/out parameter is used to remember if the caller has been seen 326 // in/out parameter is used to remember if the caller has been seen
327 // yet. 327 // yet.
328 static bool IsVisibleInStackTrace(StackFrame* raw_frame, 328 static bool IsVisibleInStackTrace(StackFrame* raw_frame,
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 StringStream accumulator(&allocator); 564 StringStream accumulator(&allocator);
565 incomplete_message_ = &accumulator; 565 incomplete_message_ = &accumulator;
566 PrintStack(&accumulator); 566 PrintStack(&accumulator);
567 accumulator.OutputToFile(out); 567 accumulator.OutputToFile(out);
568 InitializeLoggingAndCounters(); 568 InitializeLoggingAndCounters();
569 accumulator.Log(this); 569 accumulator.Log(this);
570 incomplete_message_ = NULL; 570 incomplete_message_ = NULL;
571 stack_trace_nesting_level_ = 0; 571 stack_trace_nesting_level_ = 0;
572 } else if (stack_trace_nesting_level_ == 1) { 572 } else if (stack_trace_nesting_level_ == 1) {
573 stack_trace_nesting_level_++; 573 stack_trace_nesting_level_++;
574 OS::PrintError( 574 base::OS::PrintError(
575 "\n\nAttempt to print stack while printing stack (double fault)\n"); 575 "\n\nAttempt to print stack while printing stack (double fault)\n");
576 OS::PrintError( 576 base::OS::PrintError(
577 "If you are lucky you may find a partial stack dump on stdout.\n\n"); 577 "If you are lucky you may find a partial stack dump on stdout.\n\n");
578 incomplete_message_->OutputToFile(out); 578 incomplete_message_->OutputToFile(out);
579 } 579 }
580 } 580 }
581 581
582 582
583 static void PrintFrames(Isolate* isolate, 583 static void PrintFrames(Isolate* isolate,
584 StringStream* accumulator, 584 StringStream* accumulator,
585 StackFrame::PrintMode mode) { 585 StackFrame::PrintMode mode) {
586 StackFrameIterator it(isolate); 586 StackFrameIterator it(isolate);
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
1101 // present. This flag is intended for use by JavaScript developers, so 1101 // present. This flag is intended for use by JavaScript developers, so
1102 // print a user-friendly stack trace (not an internal one). 1102 // print a user-friendly stack trace (not an internal one).
1103 if (fatal_exception_depth == 0 && 1103 if (fatal_exception_depth == 0 &&
1104 FLAG_abort_on_uncaught_exception && 1104 FLAG_abort_on_uncaught_exception &&
1105 (report_exception || can_be_caught_externally)) { 1105 (report_exception || can_be_caught_externally)) {
1106 fatal_exception_depth++; 1106 fatal_exception_depth++;
1107 PrintF(stderr, 1107 PrintF(stderr,
1108 "%s\n\nFROM\n", 1108 "%s\n\nFROM\n",
1109 MessageHandler::GetLocalizedMessage(this, message_obj).get()); 1109 MessageHandler::GetLocalizedMessage(this, message_obj).get());
1110 PrintCurrentStackTrace(stderr); 1110 PrintCurrentStackTrace(stderr);
1111 OS::Abort(); 1111 base::OS::Abort();
1112 } 1112 }
1113 } else if (location != NULL && !location->script().is_null()) { 1113 } else if (location != NULL && !location->script().is_null()) {
1114 // We are bootstrapping and caught an error where the location is set 1114 // We are bootstrapping and caught an error where the location is set
1115 // and we have a script for the location. 1115 // and we have a script for the location.
1116 // In this case we could have an extension (or an internal error 1116 // In this case we could have an extension (or an internal error
1117 // somewhere) and we print out the line number at which the error occured 1117 // somewhere) and we print out the line number at which the error occured
1118 // to the console for easier debugging. 1118 // to the console for easier debugging.
1119 int line_number = 1119 int line_number =
1120 location->script()->GetLineNumber(location->start_pos()) + 1; 1120 location->script()->GetLineNumber(location->start_pos()) + 1;
1121 if (exception->IsString() && location->script()->name()->IsString()) { 1121 if (exception->IsString() && location->script()->name()->IsString()) {
1122 OS::PrintError( 1122 base::OS::PrintError(
1123 "Extension or internal compilation error: %s in %s at line %d.\n", 1123 "Extension or internal compilation error: %s in %s at line %d.\n",
1124 String::cast(exception)->ToCString().get(), 1124 String::cast(exception)->ToCString().get(),
1125 String::cast(location->script()->name())->ToCString().get(), 1125 String::cast(location->script()->name())->ToCString().get(),
1126 line_number); 1126 line_number);
1127 } else if (location->script()->name()->IsString()) { 1127 } else if (location->script()->name()->IsString()) {
1128 OS::PrintError( 1128 base::OS::PrintError(
1129 "Extension or internal compilation error in %s at line %d.\n", 1129 "Extension or internal compilation error in %s at line %d.\n",
1130 String::cast(location->script()->name())->ToCString().get(), 1130 String::cast(location->script()->name())->ToCString().get(),
1131 line_number); 1131 line_number);
1132 } else { 1132 } else {
1133 OS::PrintError("Extension or internal compilation error.\n"); 1133 base::OS::PrintError("Extension or internal compilation error.\n");
1134 } 1134 }
1135 #ifdef OBJECT_PRINT 1135 #ifdef OBJECT_PRINT
1136 // Since comments and empty lines have been stripped from the source of 1136 // Since comments and empty lines have been stripped from the source of
1137 // builtins, print the actual source here so that line numbers match. 1137 // builtins, print the actual source here so that line numbers match.
1138 if (location->script()->source()->IsString()) { 1138 if (location->script()->source()->IsString()) {
1139 Handle<String> src(String::cast(location->script()->source())); 1139 Handle<String> src(String::cast(location->script()->source()));
1140 PrintF("Failing script:\n"); 1140 PrintF("Failing script:\n");
1141 int len = src->length(); 1141 int len = src->length();
1142 int line_number = 1; 1142 int line_number = 1;
1143 PrintF("%5d: ", line_number); 1143 PrintF("%5d: ", line_number);
(...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after
1524 // Temporarily set this isolate as current so that various parts of 1524 // Temporarily set this isolate as current so that various parts of
1525 // the isolate can access it in their destructors without having a 1525 // the isolate can access it in their destructors without having a
1526 // direct pointer. We don't use Enter/Exit here to avoid 1526 // direct pointer. We don't use Enter/Exit here to avoid
1527 // initializing the thread data. 1527 // initializing the thread data.
1528 PerIsolateThreadData* saved_data = CurrentPerIsolateThreadData(); 1528 PerIsolateThreadData* saved_data = CurrentPerIsolateThreadData();
1529 Isolate* saved_isolate = UncheckedCurrent(); 1529 Isolate* saved_isolate = UncheckedCurrent();
1530 SetIsolateThreadLocals(this, NULL); 1530 SetIsolateThreadLocals(this, NULL);
1531 1531
1532 Deinit(); 1532 Deinit();
1533 1533
1534 { LockGuard<Mutex> lock_guard(&process_wide_mutex_); 1534 { base::LockGuard<base::Mutex> lock_guard(&process_wide_mutex_);
1535 thread_data_table_->RemoveAllThreads(this); 1535 thread_data_table_->RemoveAllThreads(this);
1536 } 1536 }
1537 1537
1538 if (serialize_partial_snapshot_cache_ != NULL) { 1538 if (serialize_partial_snapshot_cache_ != NULL) {
1539 delete[] serialize_partial_snapshot_cache_; 1539 delete[] serialize_partial_snapshot_cache_;
1540 serialize_partial_snapshot_cache_ = NULL; 1540 serialize_partial_snapshot_cache_ = NULL;
1541 } 1541 }
1542 1542
1543 delete this; 1543 delete this;
1544 1544
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1625 set_serialize_partial_snapshot_cache_capacity(new_capacity); 1625 set_serialize_partial_snapshot_cache_capacity(new_capacity);
1626 } 1626 }
1627 1627
1628 serialize_partial_snapshot_cache()[length] = obj; 1628 serialize_partial_snapshot_cache()[length] = obj;
1629 set_serialize_partial_snapshot_cache_length(length + 1); 1629 set_serialize_partial_snapshot_cache_length(length + 1);
1630 } 1630 }
1631 1631
1632 1632
1633 void Isolate::SetIsolateThreadLocals(Isolate* isolate, 1633 void Isolate::SetIsolateThreadLocals(Isolate* isolate,
1634 PerIsolateThreadData* data) { 1634 PerIsolateThreadData* data) {
1635 Thread::SetThreadLocal(isolate_key_, isolate); 1635 base::Thread::SetThreadLocal(isolate_key_, isolate);
1636 Thread::SetThreadLocal(per_isolate_thread_data_key_, data); 1636 base::Thread::SetThreadLocal(per_isolate_thread_data_key_, data);
1637 } 1637 }
1638 1638
1639 1639
1640 Isolate::~Isolate() { 1640 Isolate::~Isolate() {
1641 TRACE_ISOLATE(destructor); 1641 TRACE_ISOLATE(destructor);
1642 1642
1643 // Has to be called while counters_ are still alive 1643 // Has to be called while counters_ are still alive
1644 runtime_zone_.DeleteKeptSegment(); 1644 runtime_zone_.DeleteKeptSegment();
1645 1645
1646 // The entry stack must be empty when we get here. 1646 // The entry stack must be empty when we get here.
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 set_event_logger(Logger::LogInternalEvents); 1894 set_event_logger(Logger::LogInternalEvents);
1895 } else { 1895 } else {
1896 set_event_logger(Logger::EmptyLogInternalEvents); 1896 set_event_logger(Logger::EmptyLogInternalEvents);
1897 } 1897 }
1898 1898
1899 // Set default value if not yet set. 1899 // Set default value if not yet set.
1900 // TODO(yangguo): move this to ResourceConstraints::ConfigureDefaults 1900 // TODO(yangguo): move this to ResourceConstraints::ConfigureDefaults
1901 // once ResourceConstraints becomes an argument to the Isolate constructor. 1901 // once ResourceConstraints becomes an argument to the Isolate constructor.
1902 if (max_available_threads_ < 1) { 1902 if (max_available_threads_ < 1) {
1903 // Choose the default between 1 and 4. 1903 // Choose the default between 1 and 4.
1904 max_available_threads_ = Max(Min(OS::NumberOfProcessorsOnline(), 4), 1); 1904 max_available_threads_ =
1905 Max(Min(base::OS::NumberOfProcessorsOnline(), 4), 1);
1905 } 1906 }
1906 1907
1907 if (!FLAG_job_based_sweeping) { 1908 if (!FLAG_job_based_sweeping) {
1908 num_sweeper_threads_ = 1909 num_sweeper_threads_ =
1909 SweeperThread::NumberOfThreads(max_available_threads_); 1910 SweeperThread::NumberOfThreads(max_available_threads_);
1910 } 1911 }
1911 1912
1912 if (FLAG_trace_hydrogen || FLAG_trace_hydrogen_stubs) { 1913 if (FLAG_trace_hydrogen || FLAG_trace_hydrogen_stubs) {
1913 PrintF("Concurrent recompilation has been disabled for tracing.\n"); 1914 PrintF("Concurrent recompilation has been disabled for tracing.\n");
1914 } else if (OptimizingCompilerThread::Enabled(max_available_threads_)) { 1915 } else if (OptimizingCompilerThread::Enabled(max_available_threads_)) {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1969 Internals::kIsolateRootsOffset); 1970 Internals::kIsolateRootsOffset);
1970 CHECK_EQ(static_cast<int>( 1971 CHECK_EQ(static_cast<int>(
1971 OFFSET_OF(Isolate, heap_.amount_of_external_allocated_memory_)), 1972 OFFSET_OF(Isolate, heap_.amount_of_external_allocated_memory_)),
1972 Internals::kAmountOfExternalAllocatedMemoryOffset); 1973 Internals::kAmountOfExternalAllocatedMemoryOffset);
1973 CHECK_EQ(static_cast<int>(OFFSET_OF( 1974 CHECK_EQ(static_cast<int>(OFFSET_OF(
1974 Isolate, 1975 Isolate,
1975 heap_.amount_of_external_allocated_memory_at_last_global_gc_)), 1976 heap_.amount_of_external_allocated_memory_at_last_global_gc_)),
1976 Internals::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset); 1977 Internals::kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset);
1977 1978
1978 state_ = INITIALIZED; 1979 state_ = INITIALIZED;
1979 time_millis_at_init_ = OS::TimeCurrentMillis(); 1980 time_millis_at_init_ = base::OS::TimeCurrentMillis();
1980 1981
1981 if (!create_heap_objects) { 1982 if (!create_heap_objects) {
1982 // Now that the heap is consistent, it's OK to generate the code for the 1983 // Now that the heap is consistent, it's OK to generate the code for the
1983 // deopt entry table that might have been referred to by optimized code in 1984 // deopt entry table that might have been referred to by optimized code in
1984 // the snapshot. 1985 // the snapshot.
1985 HandleScope scope(this); 1986 HandleScope scope(this);
1986 Deoptimizer::EnsureCodeForDeoptimizationEntry( 1987 Deoptimizer::EnsureCodeForDeoptimizationEntry(
1987 this, 1988 this,
1988 Deoptimizer::LAZY, 1989 Deoptimizer::LAZY,
1989 kDeoptTableSerializeEntryCount - 1); 1990 kDeoptTableSerializeEntryCount - 1);
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
2365 // The simulator uses a separate JS stack. 2366 // The simulator uses a separate JS stack.
2366 Address jssp_address = Simulator::current(isolate_)->get_sp(); 2367 Address jssp_address = Simulator::current(isolate_)->get_sp();
2367 uintptr_t jssp = reinterpret_cast<uintptr_t>(jssp_address); 2368 uintptr_t jssp = reinterpret_cast<uintptr_t>(jssp_address);
2368 if (jssp < stack_guard->real_jslimit()) return true; 2369 if (jssp < stack_guard->real_jslimit()) return true;
2369 #endif // USE_SIMULATOR 2370 #endif // USE_SIMULATOR
2370 return reinterpret_cast<uintptr_t>(this) < stack_guard->real_climit(); 2371 return reinterpret_cast<uintptr_t>(this) < stack_guard->real_climit();
2371 } 2372 }
2372 2373
2373 2374
2374 } } // namespace v8::internal 2375 } } // namespace v8::internal
OLDNEW
« src/base/macros.h ('K') | « src/isolate.h ('k') | src/isolate-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698