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 "src/isolate.h" | 5 #include "src/isolate.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 | 8 |
9 #include <fstream> // NOLINT(readability/streams) | 9 #include <fstream> // NOLINT(readability/streams) |
10 #include <sstream> | 10 #include <sstream> |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 #include "src/profiler/cpu-profiler.h" | 43 #include "src/profiler/cpu-profiler.h" |
44 #include "src/prototype.h" | 44 #include "src/prototype.h" |
45 #include "src/regexp/regexp-stack.h" | 45 #include "src/regexp/regexp-stack.h" |
46 #include "src/runtime-profiler.h" | 46 #include "src/runtime-profiler.h" |
47 #include "src/setup-isolate.h" | 47 #include "src/setup-isolate.h" |
48 #include "src/simulator.h" | 48 #include "src/simulator.h" |
49 #include "src/snapshot/deserializer.h" | 49 #include "src/snapshot/deserializer.h" |
50 #include "src/tracing/tracing-category-observer.h" | 50 #include "src/tracing/tracing-category-observer.h" |
51 #include "src/v8.h" | 51 #include "src/v8.h" |
52 #include "src/version.h" | 52 #include "src/version.h" |
| 53 #include "src/visitors.h" |
53 #include "src/vm-state-inl.h" | 54 #include "src/vm-state-inl.h" |
54 #include "src/wasm/wasm-module.h" | 55 #include "src/wasm/wasm-module.h" |
55 #include "src/wasm/wasm-objects.h" | 56 #include "src/wasm/wasm-objects.h" |
56 #include "src/zone/accounting-allocator.h" | 57 #include "src/zone/accounting-allocator.h" |
57 | 58 |
58 namespace v8 { | 59 namespace v8 { |
59 namespace internal { | 60 namespace internal { |
60 | 61 |
61 base::Atomic32 ThreadId::highest_thread_id_ = 0; | 62 base::Atomic32 ThreadId::highest_thread_id_ = 0; |
62 | 63 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 thread_id_key_ = base::Thread::CreateThreadLocalKey(); | 194 thread_id_key_ = base::Thread::CreateThreadLocalKey(); |
194 per_isolate_thread_data_key_ = base::Thread::CreateThreadLocalKey(); | 195 per_isolate_thread_data_key_ = base::Thread::CreateThreadLocalKey(); |
195 thread_data_table_ = new Isolate::ThreadDataTable(); | 196 thread_data_table_ = new Isolate::ThreadDataTable(); |
196 } | 197 } |
197 | 198 |
198 | 199 |
199 Address Isolate::get_address_from_id(Isolate::AddressId id) { | 200 Address Isolate::get_address_from_id(Isolate::AddressId id) { |
200 return isolate_addresses_[id]; | 201 return isolate_addresses_[id]; |
201 } | 202 } |
202 | 203 |
203 | 204 char* Isolate::Iterate(RootVisitor* v, char* thread_storage) { |
204 char* Isolate::Iterate(ObjectVisitor* v, char* thread_storage) { | |
205 ThreadLocalTop* thread = reinterpret_cast<ThreadLocalTop*>(thread_storage); | 205 ThreadLocalTop* thread = reinterpret_cast<ThreadLocalTop*>(thread_storage); |
206 Iterate(v, thread); | 206 Iterate(v, thread); |
207 return thread_storage + sizeof(ThreadLocalTop); | 207 return thread_storage + sizeof(ThreadLocalTop); |
208 } | 208 } |
209 | 209 |
210 | 210 |
211 void Isolate::IterateThread(ThreadVisitor* v, char* t) { | 211 void Isolate::IterateThread(ThreadVisitor* v, char* t) { |
212 ThreadLocalTop* thread = reinterpret_cast<ThreadLocalTop*>(t); | 212 ThreadLocalTop* thread = reinterpret_cast<ThreadLocalTop*>(t); |
213 v->VisitThread(this, thread); | 213 v->VisitThread(this, thread); |
214 } | 214 } |
215 | 215 |
216 | 216 void Isolate::Iterate(RootVisitor* v, ThreadLocalTop* thread) { |
217 void Isolate::Iterate(ObjectVisitor* v, ThreadLocalTop* thread) { | |
218 // Visit the roots from the top for a given thread. | 217 // Visit the roots from the top for a given thread. |
219 v->VisitPointer(&thread->pending_exception_); | 218 v->VisitRootPointer(Root::kTop, &thread->pending_exception_); |
220 v->VisitPointer(&(thread->pending_message_obj_)); | 219 v->VisitRootPointer(Root::kTop, &thread->pending_message_obj_); |
221 v->VisitPointer(bit_cast<Object**>(&(thread->context_))); | 220 v->VisitRootPointer(Root::kTop, bit_cast<Object**>(&(thread->context_))); |
222 v->VisitPointer(&thread->scheduled_exception_); | 221 v->VisitRootPointer(Root::kTop, &thread->scheduled_exception_); |
223 | 222 |
224 for (v8::TryCatch* block = thread->try_catch_handler(); | 223 for (v8::TryCatch* block = thread->try_catch_handler(); |
225 block != NULL; | 224 block != NULL; |
226 block = block->next_) { | 225 block = block->next_) { |
227 v->VisitPointer(bit_cast<Object**>(&(block->exception_))); | 226 v->VisitRootPointer(Root::kTop, bit_cast<Object**>(&(block->exception_))); |
228 v->VisitPointer(bit_cast<Object**>(&(block->message_obj_))); | 227 v->VisitRootPointer(Root::kTop, bit_cast<Object**>(&(block->message_obj_))); |
229 } | 228 } |
230 | 229 |
231 // Iterate over pointers on native execution stack. | 230 // Iterate over pointers on native execution stack. |
232 for (StackFrameIterator it(this, thread); !it.done(); it.Advance()) { | 231 for (StackFrameIterator it(this, thread); !it.done(); it.Advance()) { |
233 it.frame()->Iterate(v); | 232 it.frame()->Iterate(v); |
234 } | 233 } |
235 } | 234 } |
236 | 235 |
237 | 236 void Isolate::Iterate(RootVisitor* v) { |
238 void Isolate::Iterate(ObjectVisitor* v) { | |
239 ThreadLocalTop* current_t = thread_local_top(); | 237 ThreadLocalTop* current_t = thread_local_top(); |
240 Iterate(v, current_t); | 238 Iterate(v, current_t); |
241 } | 239 } |
242 | 240 |
243 | 241 void Isolate::IterateDeferredHandles(RootVisitor* visitor) { |
244 void Isolate::IterateDeferredHandles(ObjectVisitor* visitor) { | |
245 for (DeferredHandles* deferred = deferred_handles_head_; | 242 for (DeferredHandles* deferred = deferred_handles_head_; |
246 deferred != NULL; | 243 deferred != NULL; |
247 deferred = deferred->next_) { | 244 deferred = deferred->next_) { |
248 deferred->Iterate(visitor); | 245 deferred->Iterate(visitor); |
249 } | 246 } |
250 } | 247 } |
251 | 248 |
252 | 249 |
253 #ifdef DEBUG | 250 #ifdef DEBUG |
254 bool Isolate::IsDeferredHandle(Object** handle) { | 251 bool Isolate::IsDeferredHandle(Object** handle) { |
(...skipping 3523 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3778 // Then check whether this scope intercepts. | 3775 // Then check whether this scope intercepts. |
3779 if ((flag & intercept_mask_)) { | 3776 if ((flag & intercept_mask_)) { |
3780 intercepted_flags_ |= flag; | 3777 intercepted_flags_ |= flag; |
3781 return true; | 3778 return true; |
3782 } | 3779 } |
3783 return false; | 3780 return false; |
3784 } | 3781 } |
3785 | 3782 |
3786 } // namespace internal | 3783 } // namespace internal |
3787 } // namespace v8 | 3784 } // namespace v8 |
OLD | NEW |