Chromium Code Reviews| Index: runtime/vm/isolate.cc |
| diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc |
| index 2ba8ae05af06d7e83f8c6aad08e010064a5e0476..f01c41994ccf42b3a0db16e044477d0b3ab01c0c 100644 |
| --- a/runtime/vm/isolate.cc |
| +++ b/runtime/vm/isolate.cc |
| @@ -357,7 +357,7 @@ RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) { |
| if (!I->VerifyPauseCapability(obj)) return Error::null(); |
| // If we are already paused, don't pause again. |
| - if (I->debugger()->PauseEvent() == NULL) { |
| + if (FLAG_support_debugger && (I->debugger()->PauseEvent() == NULL)) { |
| return I->debugger()->SignalIsolateInterrupted(); |
| } |
| break; |
| @@ -510,7 +510,11 @@ MessageHandler::MessageStatus IsolateMessageHandler::HandleMessage( |
| if (oob_tag.IsSmi()) { |
| switch (Smi::Cast(oob_tag).Value()) { |
| case Message::kServiceOOBMsg: { |
| +#ifdef PRODUCT |
|
rmacnak
2016/02/04 21:26:41
+ FLAG_support_service
|
| + UNREACHABLE(); |
| +#else |
| Service::HandleIsolateMessage(I, oob_msg); |
| +#endif // PRODUCT |
| break; |
| } |
| case Message::kIsolateLibOOBMsg: { |
| @@ -572,6 +576,9 @@ MessageHandler::MessageStatus IsolateMessageHandler::HandleMessage( |
| void IsolateMessageHandler::NotifyPauseOnStart() { |
| + if (!FLAG_support_service) { |
| + return; |
| + } |
| if (Service::debug_stream.enabled() || FLAG_warn_on_pause_with_no_debugger) { |
| StartIsolateScope start_isolate(I); |
| StackZone zone(T); |
| @@ -586,6 +593,9 @@ void IsolateMessageHandler::NotifyPauseOnStart() { |
| void IsolateMessageHandler::NotifyPauseOnExit() { |
| + if (!FLAG_support_service) { |
| + return; |
| + } |
| if (Service::debug_stream.enabled() || FLAG_warn_on_pause_with_no_debugger) { |
| StartIsolateScope start_isolate(I); |
| StackZone zone(T); |
| @@ -638,7 +648,9 @@ MessageHandler::MessageStatus IsolateMessageHandler::ProcessUnhandledException( |
| if ((exception == I->object_store()->out_of_memory()) || |
| (exception == I->object_store()->stack_overflow())) { |
| // We didn't notify the debugger when the stack was full. Do it now. |
| - I->debugger()->SignalExceptionThrown(Instance::Handle(exception)); |
| + if (FLAG_support_debugger) { |
| + I->debugger()->SignalExceptionThrown(Instance::Handle(exception)); |
| + } |
| } |
| } |
| @@ -823,7 +835,9 @@ Isolate::~Isolate() { |
| delete heap_; |
| delete object_store_; |
| delete api_state_; |
| +#ifndef PRODUCT |
| delete debugger_; |
| +#endif // !PRODUCT |
| #if defined(USING_SIMULATOR) |
| delete simulator_; |
| #endif |
| @@ -833,7 +847,9 @@ Isolate::~Isolate() { |
| message_handler_ = NULL; // Fail fast if we send messages to a dead isolate. |
| ASSERT(deopt_context_ == NULL); // No deopt in progress when isolate deleted. |
| delete spawn_state_; |
| +#ifndef PRODUCT |
| delete object_id_ring_; |
| +#endif // !PRODUCT |
| object_id_ring_ = NULL; |
| delete pause_loop_monitor_; |
| pause_loop_monitor_ = NULL; |
| @@ -913,8 +929,10 @@ Isolate* Isolate::Init(const char* name_prefix, |
| result->set_terminate_capability(result->random()->NextUInt64()); |
| result->BuildName(name_prefix); |
| +#ifndef PRODUCT |
|
rmacnak
2016/02/04 21:26:41
+ FLAG_support_debugger
|
| result->debugger_ = new Debugger(); |
| result->debugger_->Initialize(result); |
| +#endif // !PRODUCT |
| if (FLAG_trace_isolates) { |
| if (name_prefix == NULL || strcmp(name_prefix, "vm-isolate") != 0) { |
| OS::Print("[+] Starting isolate:\n" |
| @@ -927,7 +945,9 @@ Isolate* Isolate::Init(const char* name_prefix, |
| result->compiler_stats_->EnableBenchmark(); |
| } |
| - ObjectIdRing::Init(result); |
| + if (FLAG_support_service) { |
| + ObjectIdRing::Init(result); |
| + } |
| // Add to isolate list. Shutdown and delete the isolate on failure. |
| if (!AddIsolateToList(result)) { |
| @@ -1068,7 +1088,7 @@ bool Isolate::MakeRunnable() { |
| // isolate on thread pool for execution. |
| ASSERT(object_store()->root_library() != Library::null()); |
| set_is_runnable(true); |
| - if (!ServiceIsolate::IsServiceIsolate(this)) { |
| + if (FLAG_support_debugger && !ServiceIsolate::IsServiceIsolate(this)) { |
| if (FLAG_pause_isolates_on_unhandled_exceptions) { |
| debugger()->SetExceptionPauseInfo(kPauseOnUnhandledExceptions); |
| } |
| @@ -1085,7 +1105,7 @@ bool Isolate::MakeRunnable() { |
| event->Instant("Runnable"); |
| event->Complete(); |
| } |
| - if (Service::isolate_stream.enabled()) { |
| + if (FLAG_support_service && Service::isolate_stream.enabled()) { |
| ServiceEvent runnableEvent(this, ServiceEvent::kIsolateRunnable); |
| Service::HandleEvent(&runnableEvent); |
| } |
| @@ -1357,7 +1377,7 @@ static MessageHandler::MessageStatus RunIsolate(uword parameter) { |
| // way to debug. Set the breakpoint on the static function instead |
| // of its implicit closure function because that latter is merely |
| // a dispatcher that is marked as undebuggable. |
| - if (FLAG_break_at_isolate_spawn) { |
| + if (FLAG_support_debugger && FLAG_break_at_isolate_spawn) { |
| isolate->debugger()->OneTimeBreakAtEntry(func); |
| } |
| @@ -1578,7 +1598,10 @@ void Isolate::LowLevelShutdown() { |
| } |
| // Clean up debugger resources. |
| - debugger()->Shutdown(); |
| + if (FLAG_support_debugger) { |
| + debugger()->Shutdown(); |
| + } |
| + |
| // Close all the ports owned by this isolate. |
| PortMap::ClosePorts(message_handler()); |
| @@ -1754,7 +1777,9 @@ void Isolate::VisitObjectPointers(ObjectPointerVisitor* visitor, |
| reinterpret_cast<RawObject**>(®istered_service_extension_handlers_)); |
| // Visit objects in the debugger. |
| +#ifndef PRODUCT |
|
rmacnak
2016/02/04 21:26:41
+ FLAG_support_debugger
|
| debugger()->VisitObjectPointers(visitor); |
| +#endif // !PRODUCT |
| // Visit objects that are being used for deoptimization. |
| if (deopt_context() != NULL) { |
| @@ -1794,6 +1819,9 @@ static const char* ExceptionPauseInfoToServiceEnum(Dart_ExceptionPauseInfo pi) { |
| void Isolate::PrintJSON(JSONStream* stream, bool ref) { |
| + if (!FLAG_support_service) { |
| + return; |
| + } |
| JSONObject jsobj(stream); |
| jsobj.AddProperty("type", (ref ? "@Isolate" : "Isolate")); |
| jsobj.AddFixedServiceId("isolates/%" Pd64 "", |
| @@ -1952,6 +1980,9 @@ void Isolate::set_registered_service_extension_handlers( |
| RawObject* Isolate::InvokePendingServiceExtensionCalls() { |
| + if (!FLAG_support_service) { |
| + return Object::null(); |
| + } |
| GrowableObjectArray& calls = |
| GrowableObjectArray::Handle(GetAndClearPendingServiceExtensionCalls()); |
| if (calls.IsNull()) { |
| @@ -2059,6 +2090,9 @@ void Isolate::AppendServiceExtensionCall(const Instance& closure, |
| // done atomically. |
| void Isolate::RegisterServiceExtensionHandler(const String& name, |
| const Instance& closure) { |
| + if (!FLAG_support_service) { |
| + return; |
| + } |
| GrowableObjectArray& handlers = |
| GrowableObjectArray::Handle(registered_service_extension_handlers()); |
| if (handlers.IsNull()) { |
| @@ -2091,6 +2125,9 @@ void Isolate::RegisterServiceExtensionHandler(const String& name, |
| // to Dart code unless you can ensure that the operations will can be |
| // done atomically. |
| RawInstance* Isolate::LookupServiceExtensionHandler(const String& name) { |
| + if (!FLAG_support_service) { |
| + return Instance::null(); |
| + } |
| const GrowableObjectArray& handlers = |
| GrowableObjectArray::Handle(registered_service_extension_handlers()); |
| if (handlers.IsNull()) { |