OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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/isolate.h" | 5 #include "vm/isolate.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "platform/json.h" | 9 #include "platform/json.h" |
10 #include "vm/code_observers.h" | 10 #include "vm/code_observers.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "vm/parser.h" | 22 #include "vm/parser.h" |
23 #include "vm/port.h" | 23 #include "vm/port.h" |
24 #include "vm/profiler.h" | 24 #include "vm/profiler.h" |
25 #include "vm/reusable_handles.h" | 25 #include "vm/reusable_handles.h" |
26 #include "vm/service.h" | 26 #include "vm/service.h" |
27 #include "vm/simulator.h" | 27 #include "vm/simulator.h" |
28 #include "vm/stack_frame.h" | 28 #include "vm/stack_frame.h" |
29 #include "vm/stub_code.h" | 29 #include "vm/stub_code.h" |
30 #include "vm/symbols.h" | 30 #include "vm/symbols.h" |
31 #include "vm/tags.h" | 31 #include "vm/tags.h" |
32 #include "vm/thread.h" | 32 #include "vm/os_thread.h" |
33 #include "vm/thread_interrupter.h" | 33 #include "vm/thread_interrupter.h" |
34 #include "vm/timer.h" | 34 #include "vm/timer.h" |
35 #include "vm/visitor.h" | 35 #include "vm/visitor.h" |
36 | 36 |
37 | 37 |
38 namespace dart { | 38 namespace dart { |
39 | 39 |
40 DEFINE_FLAG(bool, trace_isolates, false, | 40 DEFINE_FLAG(bool, trace_isolates, false, |
41 "Trace isolate creation and shut down."); | 41 "Trace isolate creation and shut down."); |
42 DEFINE_FLAG(bool, pause_isolates_on_start, false, | 42 DEFINE_FLAG(bool, pause_isolates_on_start, false, |
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
573 } | 573 } |
574 | 574 |
575 | 575 |
576 void Isolate::SetCurrent(Isolate* current) { | 576 void Isolate::SetCurrent(Isolate* current) { |
577 Isolate* old_current = Current(); | 577 Isolate* old_current = Current(); |
578 if (old_current != NULL) { | 578 if (old_current != NULL) { |
579 old_current->set_vm_tag(VMTag::kIdleTagId); | 579 old_current->set_vm_tag(VMTag::kIdleTagId); |
580 old_current->set_thread_state(NULL); | 580 old_current->set_thread_state(NULL); |
581 Profiler::EndExecution(old_current); | 581 Profiler::EndExecution(old_current); |
582 } | 582 } |
583 Thread::SetThreadLocal(isolate_key, reinterpret_cast<uword>(current)); | 583 OSThread::SetThreadLocal(isolate_key, reinterpret_cast<uword>(current)); |
584 if (current != NULL) { | 584 if (current != NULL) { |
585 ASSERT(current->thread_state() == NULL); | 585 ASSERT(current->thread_state() == NULL); |
586 InterruptableThreadState* thread_state = | 586 InterruptableThreadState* thread_state = |
587 ThreadInterrupter::GetCurrentThreadState(); | 587 ThreadInterrupter::GetCurrentThreadState(); |
588 #if defined(DEBUG) | 588 #if defined(DEBUG) |
589 CheckForDuplicateThreadState(thread_state); | 589 CheckForDuplicateThreadState(thread_state); |
590 #endif | 590 #endif |
591 ASSERT(thread_state != NULL); | 591 ASSERT(thread_state != NULL); |
592 Profiler::BeginExecution(current); | 592 Profiler::BeginExecution(current); |
593 current->set_thread_state(thread_state); | 593 current->set_thread_state(thread_state); |
594 current->set_vm_tag(VMTag::kVMTagId); | 594 current->set_vm_tag(VMTag::kVMTagId); |
595 } | 595 } |
596 } | 596 } |
597 | 597 |
598 | 598 |
599 // The single thread local key which stores all the thread local data | 599 // The single thread local key which stores all the thread local data |
600 // for a thread. Since an Isolate is the central repository for | 600 // for a thread. Since an Isolate is the central repository for |
601 // storing all isolate specific information a single thread local key | 601 // storing all isolate specific information a single thread local key |
602 // is sufficient. | 602 // is sufficient. |
603 ThreadLocalKey Isolate::isolate_key = Thread::kUnsetThreadLocalKey; | 603 ThreadLocalKey Isolate::isolate_key = OSThread::kUnsetThreadLocalKey; |
604 | 604 |
605 | 605 |
606 void Isolate::InitOnce() { | 606 void Isolate::InitOnce() { |
607 ASSERT(isolate_key == Thread::kUnsetThreadLocalKey); | 607 ASSERT(isolate_key == OSThread::kUnsetThreadLocalKey); |
608 isolate_key = Thread::CreateThreadLocal(); | 608 isolate_key = OSThread::CreateThreadLocal(); |
609 ASSERT(isolate_key != Thread::kUnsetThreadLocalKey); | 609 ASSERT(isolate_key != OSThread::kUnsetThreadLocalKey); |
610 create_callback_ = NULL; | 610 create_callback_ = NULL; |
611 isolates_list_monitor_ = new Monitor(); | 611 isolates_list_monitor_ = new Monitor(); |
612 ASSERT(isolates_list_monitor_ != NULL); | 612 ASSERT(isolates_list_monitor_ != NULL); |
613 } | 613 } |
614 | 614 |
615 | 615 |
616 Isolate* Isolate::Init(const char* name_prefix) { | 616 Isolate* Isolate::Init(const char* name_prefix) { |
617 Isolate* result = new Isolate(); | 617 Isolate* result = new Isolate(); |
618 ASSERT(result != NULL); | 618 ASSERT(result != NULL); |
619 | 619 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
686 const char* kFormat = "%s-%lld"; | 686 const char* kFormat = "%s-%lld"; |
687 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name_prefix, main_port()) + 1; | 687 intptr_t len = OS::SNPrint(NULL, 0, kFormat, name_prefix, main_port()) + 1; |
688 name_ = new char[len]; | 688 name_ = new char[len]; |
689 OS::SNPrint(name_, len, kFormat, name_prefix, main_port()); | 689 OS::SNPrint(name_, len, kFormat, name_prefix, main_port()); |
690 } | 690 } |
691 | 691 |
692 | 692 |
693 // TODO(5411455): Use flag to override default value and Validate the | 693 // TODO(5411455): Use flag to override default value and Validate the |
694 // stack size by querying OS. | 694 // stack size by querying OS. |
695 uword Isolate::GetSpecifiedStackSize() { | 695 uword Isolate::GetSpecifiedStackSize() { |
696 ASSERT(Isolate::kStackSizeBuffer < Thread::GetMaxStackSize()); | 696 ASSERT(Isolate::kStackSizeBuffer < OSThread::GetMaxStackSize()); |
697 uword stack_size = Thread::GetMaxStackSize() - Isolate::kStackSizeBuffer; | 697 uword stack_size = OSThread::GetMaxStackSize() - Isolate::kStackSizeBuffer; |
698 return stack_size; | 698 return stack_size; |
699 } | 699 } |
700 | 700 |
701 | 701 |
702 void Isolate::SetStackLimitFromStackBase(uword stack_base) { | 702 void Isolate::SetStackLimitFromStackBase(uword stack_base) { |
703 // Set stack base. | 703 // Set stack base. |
704 stack_base_ = stack_base; | 704 stack_base_ = stack_base; |
705 | 705 |
706 // Set stack limit. | 706 // Set stack limit. |
707 #if defined(USING_SIMULATOR) | 707 #if defined(USING_SIMULATOR) |
(...skipping 650 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1358 msg_handler->paused_on_exit())) { | 1358 msg_handler->paused_on_exit())) { |
1359 // Paused at start / exit . Don't tick. | 1359 // Paused at start / exit . Don't tick. |
1360 return 0; | 1360 return 0; |
1361 } | 1361 } |
1362 InterruptableThreadState* state = thread_state(); | 1362 InterruptableThreadState* state = thread_state(); |
1363 if (state == NULL) { | 1363 if (state == NULL) { |
1364 // Isolate is not scheduled on a thread. | 1364 // Isolate is not scheduled on a thread. |
1365 ProfileIdle(); | 1365 ProfileIdle(); |
1366 return 1; | 1366 return 1; |
1367 } | 1367 } |
1368 ASSERT(state->id != Thread::kInvalidThreadId); | 1368 ASSERT(state->id != OSThread::kInvalidThreadId); |
1369 ThreadInterrupter::InterruptThread(state); | 1369 ThreadInterrupter::InterruptThread(state); |
1370 return 1; | 1370 return 1; |
1371 } | 1371 } |
1372 | 1372 |
1373 | 1373 |
1374 void Isolate::ProfileIdle() { | 1374 void Isolate::ProfileIdle() { |
1375 vm_tag_counters_.Increment(vm_tag()); | 1375 vm_tag_counters_.Increment(vm_tag()); |
1376 } | 1376 } |
1377 | 1377 |
1378 | 1378 |
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1631 serialized_message_, serialized_message_len_); | 1631 serialized_message_, serialized_message_len_); |
1632 } | 1632 } |
1633 | 1633 |
1634 | 1634 |
1635 void IsolateSpawnState::Cleanup() { | 1635 void IsolateSpawnState::Cleanup() { |
1636 SwitchIsolateScope switch_scope(I); | 1636 SwitchIsolateScope switch_scope(I); |
1637 Dart::ShutdownIsolate(); | 1637 Dart::ShutdownIsolate(); |
1638 } | 1638 } |
1639 | 1639 |
1640 } // namespace dart | 1640 } // namespace dart |
OLD | NEW |