OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/thread.h" | 5 #include "vm/thread.h" |
6 | 6 |
7 #include "vm/compiler_stats.h" | 7 #include "vm/compiler_stats.h" |
8 #include "vm/dart_api_state.h" | 8 #include "vm/dart_api_state.h" |
9 #include "vm/growable_array.h" | 9 #include "vm/growable_array.h" |
10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 Thread::Thread(Isolate* isolate) | 63 Thread::Thread(Isolate* isolate) |
64 : BaseThread(false), | 64 : BaseThread(false), |
65 stack_limit_(0), | 65 stack_limit_(0), |
66 stack_overflow_flags_(0), | 66 stack_overflow_flags_(0), |
67 isolate_(NULL), | 67 isolate_(NULL), |
68 heap_(NULL), | 68 heap_(NULL), |
69 top_exit_frame_info_(0), | 69 top_exit_frame_info_(0), |
70 store_buffer_block_(NULL), | 70 store_buffer_block_(NULL), |
71 vm_tag_(0), | 71 vm_tag_(0), |
72 task_kind_(kUnknownTask), | 72 task_kind_(kUnknownTask), |
| 73 async_stack_trace_(StackTrace::null()), |
73 dart_stream_(NULL), | 74 dart_stream_(NULL), |
74 os_thread_(NULL), | 75 os_thread_(NULL), |
75 thread_lock_(new Monitor()), | 76 thread_lock_(new Monitor()), |
76 zone_(NULL), | 77 zone_(NULL), |
77 current_thread_memory_(0), | 78 current_thread_memory_(0), |
78 memory_high_watermark_(0), | 79 memory_high_watermark_(0), |
79 api_reusable_scope_(NULL), | 80 api_reusable_scope_(NULL), |
80 api_top_scope_(NULL), | 81 api_top_scope_(NULL), |
81 top_resource_(NULL), | 82 top_resource_(NULL), |
82 long_jump_base_(NULL), | 83 long_jump_base_(NULL), |
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 return "kMarkerTask"; | 297 return "kMarkerTask"; |
297 case kFinalizerTask: | 298 case kFinalizerTask: |
298 return "kFinalizerTask"; | 299 return "kFinalizerTask"; |
299 default: | 300 default: |
300 UNREACHABLE(); | 301 UNREACHABLE(); |
301 return ""; | 302 return ""; |
302 } | 303 } |
303 } | 304 } |
304 | 305 |
305 | 306 |
| 307 RawStackTrace* Thread::async_stack_trace() const { |
| 308 return async_stack_trace_; |
| 309 } |
| 310 |
| 311 |
| 312 void Thread::set_async_stack_trace(const StackTrace& stack_trace) { |
| 313 ASSERT(!stack_trace.IsNull()); |
| 314 async_stack_trace_ = stack_trace.raw(); |
| 315 } |
| 316 |
| 317 |
| 318 void Thread::set_raw_async_stack_trace(RawStackTrace* raw_stack_trace) { |
| 319 async_stack_trace_ = raw_stack_trace; |
| 320 } |
| 321 |
| 322 |
| 323 void Thread::clear_async_stack_trace() { |
| 324 async_stack_trace_ = StackTrace::null(); |
| 325 } |
| 326 |
| 327 |
306 bool Thread::EnterIsolate(Isolate* isolate) { | 328 bool Thread::EnterIsolate(Isolate* isolate) { |
307 const bool kIsMutatorThread = true; | 329 const bool kIsMutatorThread = true; |
308 Thread* thread = isolate->ScheduleThread(kIsMutatorThread); | 330 Thread* thread = isolate->ScheduleThread(kIsMutatorThread); |
309 if (thread != NULL) { | 331 if (thread != NULL) { |
310 ASSERT(thread->store_buffer_block_ == NULL); | 332 ASSERT(thread->store_buffer_block_ == NULL); |
311 thread->task_kind_ = kMutatorTask; | 333 thread->task_kind_ = kMutatorTask; |
312 thread->StoreBufferAcquire(); | 334 thread->StoreBufferAcquire(); |
313 return true; | 335 return true; |
314 } | 336 } |
315 return false; | 337 return false; |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 zone_->VisitObjectPointers(visitor); | 696 zone_->VisitObjectPointers(visitor); |
675 } | 697 } |
676 | 698 |
677 // Visit objects in thread specific handles area. | 699 // Visit objects in thread specific handles area. |
678 reusable_handles_.VisitObjectPointers(visitor); | 700 reusable_handles_.VisitObjectPointers(visitor); |
679 | 701 |
680 visitor->VisitPointer(reinterpret_cast<RawObject**>(&pending_functions_)); | 702 visitor->VisitPointer(reinterpret_cast<RawObject**>(&pending_functions_)); |
681 visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_exception_)); | 703 visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_exception_)); |
682 visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_stacktrace_)); | 704 visitor->VisitPointer(reinterpret_cast<RawObject**>(&active_stacktrace_)); |
683 visitor->VisitPointer(reinterpret_cast<RawObject**>(&sticky_error_)); | 705 visitor->VisitPointer(reinterpret_cast<RawObject**>(&sticky_error_)); |
| 706 visitor->VisitPointer(reinterpret_cast<RawObject**>(&async_stack_trace_)); |
684 | 707 |
685 // Visit the api local scope as it has all the api local handles. | 708 // Visit the api local scope as it has all the api local handles. |
686 ApiLocalScope* scope = api_top_scope_; | 709 ApiLocalScope* scope = api_top_scope_; |
687 while (scope != NULL) { | 710 while (scope != NULL) { |
688 scope->local_handles()->VisitObjectPointers(visitor); | 711 scope->local_handles()->VisitObjectPointers(visitor); |
689 scope = scope->previous(); | 712 scope = scope->previous(); |
690 } | 713 } |
691 | 714 |
692 // Iterate over all the stack frames and visit objects on the stack. | 715 // Iterate over all the stack frames and visit objects on the stack. |
693 StackFrameIterator frames_iterator(top_exit_frame_info(), validate_frames); | 716 StackFrameIterator frames_iterator(top_exit_frame_info(), validate_frames); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
885 | 908 |
886 DisableThreadInterruptsScope::~DisableThreadInterruptsScope() { | 909 DisableThreadInterruptsScope::~DisableThreadInterruptsScope() { |
887 if (thread() != NULL) { | 910 if (thread() != NULL) { |
888 OSThread* os_thread = thread()->os_thread(); | 911 OSThread* os_thread = thread()->os_thread(); |
889 ASSERT(os_thread != NULL); | 912 ASSERT(os_thread != NULL); |
890 os_thread->EnableThreadInterrupts(); | 913 os_thread->EnableThreadInterrupts(); |
891 } | 914 } |
892 } | 915 } |
893 | 916 |
894 } // namespace dart | 917 } // namespace dart |
OLD | NEW |