| 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 "include/dart_native_api.h" | 8 #include "include/dart_native_api.h" |
| 9 #include "platform/assert.h" | 9 #include "platform/assert.h" |
| 10 #include "platform/text_buffer.h" | 10 #include "platform/text_buffer.h" |
| (...skipping 739 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 750 current_tag_(UserTag::null()), | 750 current_tag_(UserTag::null()), |
| 751 default_tag_(UserTag::null()), | 751 default_tag_(UserTag::null()), |
| 752 ic_miss_code_(Code::null()), | 752 ic_miss_code_(Code::null()), |
| 753 object_store_(NULL), | 753 object_store_(NULL), |
| 754 class_table_(), | 754 class_table_(), |
| 755 single_step_(false), | 755 single_step_(false), |
| 756 isolate_flags_(0), | 756 isolate_flags_(0), |
| 757 background_compiler_disabled_depth_(0), | 757 background_compiler_disabled_depth_(0), |
| 758 background_compiler_(NULL), | 758 background_compiler_(NULL), |
| 759 #if !defined(PRODUCT) | 759 #if !defined(PRODUCT) |
| 760 debugger_name_(NULL), | |
| 761 debugger_(NULL), | 760 debugger_(NULL), |
| 762 last_resume_timestamp_(OS::GetCurrentTimeMillis()), | 761 last_resume_timestamp_(OS::GetCurrentTimeMillis()), |
| 763 last_allocationprofile_accumulator_reset_timestamp_(0), | 762 last_allocationprofile_accumulator_reset_timestamp_(0), |
| 764 last_allocationprofile_gc_timestamp_(0), | 763 last_allocationprofile_gc_timestamp_(0), |
| 765 vm_tag_counters_(), | 764 vm_tag_counters_(), |
| 766 pending_service_extension_calls_(GrowableObjectArray::null()), | 765 pending_service_extension_calls_(GrowableObjectArray::null()), |
| 767 registered_service_extension_handlers_(GrowableObjectArray::null()), | 766 registered_service_extension_handlers_(GrowableObjectArray::null()), |
| 768 metrics_list_head_(NULL), | 767 metrics_list_head_(NULL), |
| 769 pause_loop_monitor_(NULL), | 768 pause_loop_monitor_(NULL), |
| 770 #define ISOLATE_METRIC_CONSTRUCTORS(type, variable, name, unit) \ | 769 #define ISOLATE_METRIC_CONSTRUCTORS(type, variable, name, unit) \ |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 821 // how the vm_tag (kEmbedderTagId) can be set, these tags need to | 820 // how the vm_tag (kEmbedderTagId) can be set, these tags need to |
| 822 // move to the OSThread structure. | 821 // move to the OSThread structure. |
| 823 set_user_tag(UserTags::kDefaultUserTag); | 822 set_user_tag(UserTags::kDefaultUserTag); |
| 824 } | 823 } |
| 825 | 824 |
| 826 #undef REUSABLE_HANDLE_SCOPE_INIT | 825 #undef REUSABLE_HANDLE_SCOPE_INIT |
| 827 #undef REUSABLE_HANDLE_INITIALIZERS | 826 #undef REUSABLE_HANDLE_INITIALIZERS |
| 828 | 827 |
| 829 Isolate::~Isolate() { | 828 Isolate::~Isolate() { |
| 830 #if !defined(PRODUCT) | 829 #if !defined(PRODUCT) |
| 831 free(debugger_name_); | |
| 832 delete debugger_; | 830 delete debugger_; |
| 833 if (FLAG_support_service) { | 831 if (FLAG_support_service) { |
| 834 delete object_id_ring_; | 832 delete object_id_ring_; |
| 835 } | 833 } |
| 836 object_id_ring_ = NULL; | 834 object_id_ring_ = NULL; |
| 837 delete pause_loop_monitor_; | 835 delete pause_loop_monitor_; |
| 838 pause_loop_monitor_ = NULL; | 836 pause_loop_monitor_ = NULL; |
| 839 #endif // !defined(PRODUCT) | 837 #endif // !defined(PRODUCT) |
| 840 | 838 |
| 841 free(name_); | 839 free(name_); |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 972 void Isolate::ScheduleMessageInterrupts() { | 970 void Isolate::ScheduleMessageInterrupts() { |
| 973 // We take the threads lock here to ensure that the mutator thread does not | 971 // We take the threads lock here to ensure that the mutator thread does not |
| 974 // exit the isolate while we are trying to schedule interrupts on it. | 972 // exit the isolate while we are trying to schedule interrupts on it. |
| 975 MonitorLocker ml(threads_lock()); | 973 MonitorLocker ml(threads_lock()); |
| 976 Thread* mthread = mutator_thread(); | 974 Thread* mthread = mutator_thread(); |
| 977 if (mthread != NULL) { | 975 if (mthread != NULL) { |
| 978 mthread->ScheduleInterrupts(Thread::kMessageInterrupt); | 976 mthread->ScheduleInterrupts(Thread::kMessageInterrupt); |
| 979 } | 977 } |
| 980 } | 978 } |
| 981 | 979 |
| 982 #if !defined(PRODUCT) | 980 void Isolate::set_name(const char* name) { |
| 983 void Isolate::set_debugger_name(const char* name) { | 981 free(name_); |
| 984 free(debugger_name_); | 982 name_ = strdup(name); |
| 985 debugger_name_ = strdup(name); | |
| 986 } | 983 } |
| 987 #endif // !defined(PRODUCT) | |
| 988 | 984 |
| 989 int64_t Isolate::UptimeMicros() const { | 985 int64_t Isolate::UptimeMicros() const { |
| 990 return OS::GetCurrentMonotonicMicros() - start_time_micros_; | 986 return OS::GetCurrentMonotonicMicros() - start_time_micros_; |
| 991 } | 987 } |
| 992 | 988 |
| 993 bool Isolate::IsPaused() const { | 989 bool Isolate::IsPaused() const { |
| 994 #if defined(PRODUCT) | 990 #if defined(PRODUCT) |
| 995 return false; | 991 return false; |
| 996 #else | 992 #else |
| 997 return (debugger_ != NULL) && (debugger_->PauseEvent() != NULL); | 993 return (debugger_ != NULL) && (debugger_->PauseEvent() != NULL); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1013 UNREACHABLE(); | 1009 UNREACHABLE(); |
| 1014 } | 1010 } |
| 1015 } | 1011 } |
| 1016 #endif | 1012 #endif |
| 1017 return Error::null(); | 1013 return Error::null(); |
| 1018 } | 1014 } |
| 1019 | 1015 |
| 1020 void Isolate::BuildName(const char* name_prefix) { | 1016 void Isolate::BuildName(const char* name_prefix) { |
| 1021 ASSERT(name_ == NULL); | 1017 ASSERT(name_ == NULL); |
| 1022 if (name_prefix == NULL) { | 1018 if (name_prefix == NULL) { |
| 1023 name_prefix = "isolate"; | 1019 name_ = OS::SCreate(NULL, "isolate-%" Pd64 "", main_port()); |
| 1020 } else { |
| 1021 name_ = strdup(name_prefix); |
| 1024 } | 1022 } |
| 1025 NOT_IN_PRODUCT(set_debugger_name(name_prefix)); | |
| 1026 if (ServiceIsolate::NameEquals(name_prefix)) { | |
| 1027 name_ = strdup(name_prefix); | |
| 1028 return; | |
| 1029 } | |
| 1030 name_ = OS::SCreate(NULL, "%s-%" Pd64 "", name_prefix, main_port()); | |
| 1031 } | 1023 } |
| 1032 | 1024 |
| 1033 void Isolate::DoneLoading() { | 1025 void Isolate::DoneLoading() { |
| 1034 GrowableObjectArray& libs = | 1026 GrowableObjectArray& libs = |
| 1035 GrowableObjectArray::Handle(current_zone(), object_store()->libraries()); | 1027 GrowableObjectArray::Handle(current_zone(), object_store()->libraries()); |
| 1036 Library& lib = Library::Handle(current_zone()); | 1028 Library& lib = Library::Handle(current_zone()); |
| 1037 intptr_t num_libs = libs.Length(); | 1029 intptr_t num_libs = libs.Length(); |
| 1038 for (intptr_t i = 0; i < num_libs; i++) { | 1030 for (intptr_t i = 0; i < num_libs; i++) { |
| 1039 lib ^= libs.At(i); | 1031 lib ^= libs.At(i); |
| 1040 // If this library was loaded with Dart_LoadLibrary, it was marked | 1032 // If this library was loaded with Dart_LoadLibrary, it was marked |
| (...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1897 | 1889 |
| 1898 void Isolate::PrintJSON(JSONStream* stream, bool ref) { | 1890 void Isolate::PrintJSON(JSONStream* stream, bool ref) { |
| 1899 if (!FLAG_support_service) { | 1891 if (!FLAG_support_service) { |
| 1900 return; | 1892 return; |
| 1901 } | 1893 } |
| 1902 JSONObject jsobj(stream); | 1894 JSONObject jsobj(stream); |
| 1903 jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate")); | 1895 jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate")); |
| 1904 jsobj.AddFixedServiceId(ISOLATE_SERVICE_ID_FORMAT_STRING, | 1896 jsobj.AddFixedServiceId(ISOLATE_SERVICE_ID_FORMAT_STRING, |
| 1905 static_cast<int64_t>(main_port())); | 1897 static_cast<int64_t>(main_port())); |
| 1906 | 1898 |
| 1907 jsobj.AddProperty("name", debugger_name()); | 1899 jsobj.AddProperty("name", name()); |
| 1908 jsobj.AddPropertyF("number", "%" Pd64 "", static_cast<int64_t>(main_port())); | 1900 jsobj.AddPropertyF("number", "%" Pd64 "", static_cast<int64_t>(main_port())); |
| 1909 if (ref) { | 1901 if (ref) { |
| 1910 return; | 1902 return; |
| 1911 } | 1903 } |
| 1912 jsobj.AddPropertyF("_originNumber", "%" Pd64 "", | 1904 jsobj.AddPropertyF("_originNumber", "%" Pd64 "", |
| 1913 static_cast<int64_t>(origin_id())); | 1905 static_cast<int64_t>(origin_id())); |
| 1914 int64_t uptime_millis = UptimeMicros() / kMicrosecondsPerMillisecond; | 1906 int64_t uptime_millis = UptimeMicros() / kMicrosecondsPerMillisecond; |
| 1915 int64_t start_time = OS::GetCurrentTimeMillis() - uptime_millis; | 1907 int64_t start_time = OS::GetCurrentTimeMillis() - uptime_millis; |
| 1916 jsobj.AddPropertyTimeMillis("startTime", start_time); | 1908 jsobj.AddPropertyTimeMillis("startTime", start_time); |
| 1917 { | 1909 { |
| (...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2830 void IsolateSpawnState::DecrementSpawnCount() { | 2822 void IsolateSpawnState::DecrementSpawnCount() { |
| 2831 ASSERT(spawn_count_monitor_ != NULL); | 2823 ASSERT(spawn_count_monitor_ != NULL); |
| 2832 ASSERT(spawn_count_ != NULL); | 2824 ASSERT(spawn_count_ != NULL); |
| 2833 MonitorLocker ml(spawn_count_monitor_); | 2825 MonitorLocker ml(spawn_count_monitor_); |
| 2834 ASSERT(*spawn_count_ > 0); | 2826 ASSERT(*spawn_count_ > 0); |
| 2835 *spawn_count_ = *spawn_count_ - 1; | 2827 *spawn_count_ = *spawn_count_ - 1; |
| 2836 ml.Notify(); | 2828 ml.Notify(); |
| 2837 } | 2829 } |
| 2838 | 2830 |
| 2839 } // namespace dart | 2831 } // namespace dart |
| OLD | NEW |