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 829 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
840 spawn_count_monitor_(new Monitor()), | 840 spawn_count_monitor_(new Monitor()), |
841 spawn_count_(0), | 841 spawn_count_(0), |
842 #define ISOLATE_METRIC_CONSTRUCTORS(type, variable, name, unit) \ | 842 #define ISOLATE_METRIC_CONSTRUCTORS(type, variable, name, unit) \ |
843 metric_##variable##_(), | 843 metric_##variable##_(), |
844 ISOLATE_METRIC_LIST(ISOLATE_METRIC_CONSTRUCTORS) | 844 ISOLATE_METRIC_LIST(ISOLATE_METRIC_CONSTRUCTORS) |
845 #undef ISOLATE_METRIC_CONSTRUCTORS | 845 #undef ISOLATE_METRIC_CONSTRUCTORS |
846 has_attempted_reload_(false), | 846 has_attempted_reload_(false), |
847 no_reload_scope_depth_(0), | 847 no_reload_scope_depth_(0), |
848 reload_every_n_stack_overflow_checks_(FLAG_reload_every), | 848 reload_every_n_stack_overflow_checks_(FLAG_reload_every), |
849 reload_context_(NULL), | 849 reload_context_(NULL), |
850 last_reload_timestamp_(OS::GetCurrentTimeMillis()) { | 850 last_reload_timestamp_(OS::GetCurrentTimeMillis()), |
| 851 should_pause_post_service_request_(false) { |
851 NOT_IN_PRODUCT(FlagsCopyFrom(api_flags)); | 852 NOT_IN_PRODUCT(FlagsCopyFrom(api_flags)); |
852 // TODO(asiva): A Thread is not available here, need to figure out | 853 // TODO(asiva): A Thread is not available here, need to figure out |
853 // how the vm_tag (kEmbedderTagId) can be set, these tags need to | 854 // how the vm_tag (kEmbedderTagId) can be set, these tags need to |
854 // move to the OSThread structure. | 855 // move to the OSThread structure. |
855 set_user_tag(UserTags::kDefaultUserTag); | 856 set_user_tag(UserTags::kDefaultUserTag); |
856 } | 857 } |
857 | 858 |
858 #undef REUSABLE_HANDLE_SCOPE_INIT | 859 #undef REUSABLE_HANDLE_SCOPE_INIT |
859 #undef REUSABLE_HANDLE_INITIALIZERS | 860 #undef REUSABLE_HANDLE_INITIALIZERS |
860 | 861 |
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1041 } | 1042 } |
1042 } | 1043 } |
1043 | 1044 |
1044 | 1045 |
1045 void Isolate::set_debugger_name(const char* name) { | 1046 void Isolate::set_debugger_name(const char* name) { |
1046 free(debugger_name_); | 1047 free(debugger_name_); |
1047 debugger_name_ = strdup(name); | 1048 debugger_name_ = strdup(name); |
1048 } | 1049 } |
1049 | 1050 |
1050 | 1051 |
| 1052 bool Isolate::IsPaused() const { |
| 1053 return (debugger_ != NULL) && (debugger_->PauseEvent() != NULL); |
| 1054 } |
| 1055 |
| 1056 |
| 1057 void Isolate::PausePostRequest() { |
| 1058 if (debugger_ == NULL) { |
| 1059 return; |
| 1060 } |
| 1061 ASSERT(!IsPaused()); |
| 1062 const Error& error = Error::Handle(debugger_->PausePostRequest()); |
| 1063 if (!error.IsNull()) { |
| 1064 Exceptions::PropagateError(error); |
| 1065 } |
| 1066 } |
| 1067 |
| 1068 |
1051 void Isolate::BuildName(const char* name_prefix) { | 1069 void Isolate::BuildName(const char* name_prefix) { |
1052 ASSERT(name_ == NULL); | 1070 ASSERT(name_ == NULL); |
1053 if (name_prefix == NULL) { | 1071 if (name_prefix == NULL) { |
1054 name_prefix = "isolate"; | 1072 name_prefix = "isolate"; |
1055 } | 1073 } |
1056 set_debugger_name(name_prefix); | 1074 set_debugger_name(name_prefix); |
1057 if (ServiceIsolate::NameEquals(name_prefix)) { | 1075 if (ServiceIsolate::NameEquals(name_prefix)) { |
1058 name_ = strdup(name_prefix); | 1076 name_ = strdup(name_prefix); |
1059 return; | 1077 return; |
1060 } | 1078 } |
(...skipping 934 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1995 if (!is_runnable()) { | 2013 if (!is_runnable()) { |
1996 // Isolate is not yet runnable. | 2014 // Isolate is not yet runnable. |
1997 ASSERT((debugger() == NULL) || (debugger()->PauseEvent() == NULL)); | 2015 ASSERT((debugger() == NULL) || (debugger()->PauseEvent() == NULL)); |
1998 ServiceEvent pause_event(this, ServiceEvent::kNone); | 2016 ServiceEvent pause_event(this, ServiceEvent::kNone); |
1999 jsobj.AddProperty("pauseEvent", &pause_event); | 2017 jsobj.AddProperty("pauseEvent", &pause_event); |
2000 } else if (message_handler()->is_paused_on_start() || | 2018 } else if (message_handler()->is_paused_on_start() || |
2001 message_handler()->should_pause_on_start()) { | 2019 message_handler()->should_pause_on_start()) { |
2002 ASSERT((debugger() == NULL) || (debugger()->PauseEvent() == NULL)); | 2020 ASSERT((debugger() == NULL) || (debugger()->PauseEvent() == NULL)); |
2003 ServiceEvent pause_event(this, ServiceEvent::kPauseStart); | 2021 ServiceEvent pause_event(this, ServiceEvent::kPauseStart); |
2004 jsobj.AddProperty("pauseEvent", &pause_event); | 2022 jsobj.AddProperty("pauseEvent", &pause_event); |
2005 } else if (message_handler()->is_paused_on_exit()) { | 2023 } else if (message_handler()->is_paused_on_exit() && |
2006 ASSERT((debugger() == NULL) || (debugger()->PauseEvent() == NULL)); | 2024 ((debugger() == NULL) || (debugger()->PauseEvent() == NULL))) { |
2007 ServiceEvent pause_event(this, ServiceEvent::kPauseExit); | 2025 ServiceEvent pause_event(this, ServiceEvent::kPauseExit); |
2008 jsobj.AddProperty("pauseEvent", &pause_event); | 2026 jsobj.AddProperty("pauseEvent", &pause_event); |
2009 } else if ((debugger() != NULL) && | 2027 } else if ((debugger() != NULL) && |
2010 (debugger()->PauseEvent() != NULL) && | 2028 (debugger()->PauseEvent() != NULL) && |
2011 !resume_request_) { | 2029 !resume_request_) { |
2012 jsobj.AddProperty("pauseEvent", debugger()->PauseEvent()); | 2030 jsobj.AddProperty("pauseEvent", debugger()->PauseEvent()); |
2013 } else { | 2031 } else { |
2014 ServiceEvent pause_event(this, ServiceEvent::kResume); | 2032 ServiceEvent pause_event(this, ServiceEvent::kResume); |
2015 | 2033 |
2016 if (debugger() != NULL) { | 2034 if (debugger() != NULL) { |
(...skipping 929 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2946 void IsolateSpawnState::DecrementSpawnCount() { | 2964 void IsolateSpawnState::DecrementSpawnCount() { |
2947 ASSERT(spawn_count_monitor_ != NULL); | 2965 ASSERT(spawn_count_monitor_ != NULL); |
2948 ASSERT(spawn_count_ != NULL); | 2966 ASSERT(spawn_count_ != NULL); |
2949 MonitorLocker ml(spawn_count_monitor_); | 2967 MonitorLocker ml(spawn_count_monitor_); |
2950 ASSERT(*spawn_count_ > 0); | 2968 ASSERT(*spawn_count_ > 0); |
2951 *spawn_count_ = *spawn_count_ - 1; | 2969 *spawn_count_ = *spawn_count_ - 1; |
2952 ml.Notify(); | 2970 ml.Notify(); |
2953 } | 2971 } |
2954 | 2972 |
2955 } // namespace dart | 2973 } // namespace dart |
OLD | NEW |