Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: runtime/vm/service_isolate.cc

Issue 1312813006: - Remove deprecated StackZone constructor with Isolate parameter. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/service_isolate.h" 5 #include "vm/service_isolate.h"
6 6
7 #include "vm/compiler.h" 7 #include "vm/compiler.h"
8 #include "vm/dart_api_impl.h" 8 #include "vm/dart_api_impl.h"
9 #include "vm/dart_entry.h" 9 #include "vm/dart_entry.h"
10 #include "vm/isolate.h" 10 #include "vm/isolate.h"
11 #include "vm/lockers.h" 11 #include "vm/lockers.h"
12 #include "vm/message.h" 12 #include "vm/message.h"
13 #include "vm/message_handler.h" 13 #include "vm/message_handler.h"
14 #include "vm/native_entry.h" 14 #include "vm/native_entry.h"
15 #include "vm/native_arguments.h" 15 #include "vm/native_arguments.h"
16 #include "vm/object.h" 16 #include "vm/object.h"
17 #include "vm/object_store.h" 17 #include "vm/object_store.h"
18 #include "vm/port.h" 18 #include "vm/port.h"
19 #include "vm/service.h" 19 #include "vm/service.h"
20 #include "vm/symbols.h" 20 #include "vm/symbols.h"
21 #include "vm/thread_pool.h" 21 #include "vm/thread_pool.h"
22 22
23 namespace dart { 23 namespace dart {
24 24
25 #define Z (T->zone())
26
27
25 DEFINE_FLAG(bool, trace_service, false, "Trace VM service requests."); 28 DEFINE_FLAG(bool, trace_service, false, "Trace VM service requests.");
26 DEFINE_FLAG(bool, trace_service_pause_events, false, 29 DEFINE_FLAG(bool, trace_service_pause_events, false,
27 "Trace VM service isolate pause events."); 30 "Trace VM service isolate pause events.");
28 31
29 struct ResourcesEntry { 32 struct ResourcesEntry {
30 const char* path_; 33 const char* path_;
31 const char* resource_; 34 const char* resource_;
32 int length_; 35 int length_;
33 }; 36 };
34 37
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 origin_ = ILLEGAL_PORT; 522 origin_ = ILLEGAL_PORT;
520 } 523 }
521 } 524 }
522 525
523 void ServiceIsolate::SetLoadPort(Dart_Port port) { 526 void ServiceIsolate::SetLoadPort(Dart_Port port) {
524 MonitorLocker ml(monitor_); 527 MonitorLocker ml(monitor_);
525 load_port_ = port; 528 load_port_ = port;
526 } 529 }
527 530
528 531
529 void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* isolate) { 532 void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* I) {
530 Thread* thread = Thread::Current(); 533 Thread* T = Thread::Current();
531 ASSERT(isolate == thread->isolate()); 534 ASSERT(I == T->isolate());
532 ASSERT(isolate != NULL); 535 ASSERT(I != NULL);
533 ASSERT(isolate->name() != NULL); 536 ASSERT(I->name() != NULL);
534 if (!ServiceIsolate::NameEquals(isolate->name())) { 537 if (!ServiceIsolate::NameEquals(I->name())) {
535 // Not service isolate. 538 // Not service isolate.
536 return; 539 return;
537 } 540 }
538 if (Exists()) { 541 if (Exists()) {
539 // Service isolate already exists. 542 // Service isolate already exists.
540 return; 543 return;
541 } 544 }
542 SetServiceIsolate(isolate); 545 SetServiceIsolate(I);
543 546
544 StackZone zone(isolate); 547 StackZone zone(T);
545 HANDLESCOPE(thread); 548 HANDLESCOPE(T);
546 549
547 // Register dart:vmservice library. 550 // Register dart:vmservice library.
548 const String& url_str = String::Handle(Symbols::DartVMService().raw()); 551 const String& url_str = String::Handle(Z, Symbols::DartVMService().raw());
srdjan 2015/09/02 22:24:09 ditto
Ivan Posva 2015/09/02 22:59:26 ditto
549 const Library& library = Library::Handle(Library::New(url_str)); 552 const Library& library = Library::Handle(Z, Library::New(url_str));
550 library.Register(); 553 library.Register();
551 library.set_native_entry_resolver(ServiceNativeResolver); 554 library.set_native_entry_resolver(ServiceNativeResolver);
552 555
553 // Temporarily install our library tag handler. 556 // Temporarily install our library tag handler.
554 isolate->set_library_tag_handler(LibraryTagHandler); 557 I->set_library_tag_handler(LibraryTagHandler);
555 558
556 // Get script source. 559 // Get script source.
557 const char* resource = NULL; 560 const char* resource = NULL;
558 const char* path = "/vmservice.dart"; 561 const char* path = "/vmservice.dart";
559 intptr_t r = Resources::ResourceLookup(path, &resource); 562 intptr_t r = Resources::ResourceLookup(path, &resource);
560 ASSERT(r != Resources::kNoSuchInstance); 563 ASSERT(r != Resources::kNoSuchInstance);
561 ASSERT(resource != NULL); 564 ASSERT(resource != NULL);
562 const String& source_str = String::Handle( 565 const String& source_str = String::Handle(Z,
563 String::FromUTF8(reinterpret_cast<const uint8_t*>(resource), r)); 566 String::FromUTF8(reinterpret_cast<const uint8_t*>(resource), r));
564 ASSERT(!source_str.IsNull()); 567 ASSERT(!source_str.IsNull());
565 const Script& script = Script::Handle( 568 const Script& script = Script::Handle(Z,
566 isolate, Script::New(url_str, source_str, RawScript::kLibraryTag)); 569 Script::New(url_str, source_str, RawScript::kLibraryTag));
567 570
568 // Compile script. 571 // Compile script.
569 Dart_EnterScope(); // Need to enter scope for tag handler. 572 Dart_EnterScope(); // Need to enter scope for tag handler.
570 library.SetLoadInProgress(); 573 library.SetLoadInProgress();
571 const Error& error = Error::Handle(isolate, 574 const Error& error = Error::Handle(Z, Compiler::Compile(library, script));
572 Compiler::Compile(library, script));
573 if (!error.IsNull()) { 575 if (!error.IsNull()) {
574 OS::PrintErr("vm-service: Isolate creation error: %s\n", 576 OS::PrintErr("vm-service: Isolate creation error: %s\n",
575 error.ToErrorCString()); 577 error.ToErrorCString());
576 } 578 }
577 ASSERT(error.IsNull()); 579 ASSERT(error.IsNull());
578 Dart_Handle result = Dart_FinalizeLoading(false); 580 Dart_Handle result = Dart_FinalizeLoading(false);
579 ASSERT(!Dart_IsError(result)); 581 ASSERT(!Dart_IsError(result));
580 Dart_ExitScope(); 582 Dart_ExitScope();
581 583
582 // Uninstall our library tag handler. 584 // Uninstall our library tag handler.
583 isolate->set_library_tag_handler(NULL); 585 I->set_library_tag_handler(NULL);
584 } 586 }
585 587
586 588
587 void ServiceIsolate::ConstructExitMessageAndCache(Isolate* isolate) { 589 void ServiceIsolate::ConstructExitMessageAndCache(Isolate* I) {
588 // Construct and cache exit message here so we can send it without needing an 590 // Construct and cache exit message here so we can send it without needing an
589 // isolate. 591 // isolate.
590 StartIsolateScope iso_scope(isolate); 592 StartIsolateScope iso_scope(I);
591 Thread* thread = Thread::Current(); 593 Thread* T = Thread::Current();
592 ASSERT(isolate == thread->isolate()); 594 ASSERT(I == T->isolate());
593 ASSERT(isolate != NULL); 595 ASSERT(I != NULL);
594 StackZone zone(isolate); 596 StackZone zone(T);
595 HANDLESCOPE(thread); 597 HANDLESCOPE(T);
596 ASSERT(exit_message_ == NULL); 598 ASSERT(exit_message_ == NULL);
597 ASSERT(exit_message_length_ == 0); 599 ASSERT(exit_message_length_ == 0);
598 const Array& list = Array::Handle(MakeServiceExitMessage()); 600 const Array& list = Array::Handle(Z, MakeServiceExitMessage());
599 ASSERT(!list.IsNull()); 601 ASSERT(!list.IsNull());
600 MessageWriter writer(&exit_message_, &allocator, false); 602 MessageWriter writer(&exit_message_, &allocator, false);
601 writer.WriteMessage(list); 603 writer.WriteMessage(list);
602 exit_message_length_ = writer.BytesWritten(); 604 exit_message_length_ = writer.BytesWritten();
603 ASSERT(exit_message_ != NULL); 605 ASSERT(exit_message_ != NULL);
604 ASSERT(exit_message_length_ != 0); 606 ASSERT(exit_message_length_ != 0);
605 } 607 }
606 608
607 609
608 void ServiceIsolate::FinishedExiting() { 610 void ServiceIsolate::FinishedExiting() {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 ServiceIsolate::FinishedInitializing(); 666 ServiceIsolate::FinishedInitializing();
665 667
666 isolate->message_handler()->Run(Dart::thread_pool(), 668 isolate->message_handler()->Run(Dart::thread_pool(),
667 NULL, 669 NULL,
668 ShutdownIsolate, 670 ShutdownIsolate,
669 reinterpret_cast<uword>(isolate)); 671 reinterpret_cast<uword>(isolate));
670 } 672 }
671 673
672 protected: 674 protected:
673 static void ShutdownIsolate(uword parameter) { 675 static void ShutdownIsolate(uword parameter) {
674 Isolate* isolate = reinterpret_cast<Isolate*>(parameter); 676 Isolate* I = reinterpret_cast<Isolate*>(parameter);
675 ASSERT(ServiceIsolate::IsServiceIsolate(isolate)); 677 ASSERT(ServiceIsolate::IsServiceIsolate(I));
676 { 678 {
677 // Print the error if there is one. This may execute dart code to 679 // Print the error if there is one. This may execute dart code to
678 // print the exception object, so we need to use a StartIsolateScope. 680 // print the exception object, so we need to use a StartIsolateScope.
679 StartIsolateScope start_scope(isolate); 681 StartIsolateScope start_scope(I);
680 Thread* thread = Thread::Current(); 682 Thread* T = Thread::Current();
681 ASSERT(isolate == thread->isolate()); 683 ASSERT(I == T->isolate());
682 StackZone zone(isolate); 684 StackZone zone(T);
683 HandleScope handle_scope(thread); 685 HandleScope handle_scope(T);
684 Error& error = Error::Handle(); 686 Error& error = Error::Handle(Z);
685 error = isolate->object_store()->sticky_error(); 687 error = I->object_store()->sticky_error();
686 if (!error.IsNull()) { 688 if (!error.IsNull()) {
687 OS::PrintErr("vm-service: Error: %s\n", error.ToErrorCString()); 689 OS::PrintErr("vm-service: Error: %s\n", error.ToErrorCString());
688 } 690 }
689 Dart::RunShutdownCallback(); 691 Dart::RunShutdownCallback();
690 } 692 }
691 { 693 {
692 // Shut the isolate down. 694 // Shut the isolate down.
693 SwitchIsolateScope switch_scope(isolate); 695 SwitchIsolateScope switch_scope(I);
694 Dart::ShutdownIsolate(); 696 Dart::ShutdownIsolate();
695 } 697 }
696 ServiceIsolate::SetServiceIsolate(NULL); 698 ServiceIsolate::SetServiceIsolate(NULL);
697 ServiceIsolate::SetServicePort(ILLEGAL_PORT); 699 ServiceIsolate::SetServicePort(ILLEGAL_PORT);
698 if (FLAG_trace_service) { 700 if (FLAG_trace_service) {
699 OS::Print("vm-service: Shutdown.\n"); 701 OS::Print("vm-service: Shutdown.\n");
700 } 702 }
701 ServiceIsolate::FinishedExiting(); 703 ServiceIsolate::FinishedExiting();
702 } 704 }
703 705
704 void RunMain(Isolate* isolate) { 706 void RunMain(Isolate* I) {
705 StartIsolateScope iso_scope(isolate); 707 StartIsolateScope iso_scope(I);
706 Thread* thread = Thread::Current(); 708 Thread* T = Thread::Current();
707 ASSERT(isolate == thread->isolate()); 709 ASSERT(I == T->isolate());
708 StackZone zone(isolate); 710 StackZone zone(T);
709 HANDLESCOPE(thread); 711 HANDLESCOPE(T);
710 // Invoke main which will return the loadScriptPort. 712 // Invoke main which will return the loadScriptPort.
711 const Library& root_library = 713 const Library& root_library = Library::Handle(Z,
712 Library::Handle(isolate, isolate->object_store()->root_library()); 714 I->object_store()->root_library());
713 if (root_library.IsNull()) { 715 if (root_library.IsNull()) {
714 if (FLAG_trace_service) { 716 if (FLAG_trace_service) {
715 OS::Print("vm-service: Embedder did not install a script."); 717 OS::Print("vm-service: Embedder did not install a script.");
716 } 718 }
717 // Service isolate is not supported by embedder. 719 // Service isolate is not supported by embedder.
718 return; 720 return;
719 } 721 }
720 ASSERT(!root_library.IsNull()); 722 ASSERT(!root_library.IsNull());
721 const String& entry_name = String::Handle(isolate, String::New("main")); 723 const String& entry_name = String::Handle(Z, String::New("main"));
722 ASSERT(!entry_name.IsNull()); 724 ASSERT(!entry_name.IsNull());
723 const Function& entry = 725 const Function& entry = Function::Handle(Z,
724 Function::Handle(isolate, 726 root_library.LookupFunctionAllowPrivate(entry_name));
725 root_library.LookupFunctionAllowPrivate(entry_name));
726 if (entry.IsNull()) { 727 if (entry.IsNull()) {
727 // Service isolate is not supported by embedder. 728 // Service isolate is not supported by embedder.
728 if (FLAG_trace_service) { 729 if (FLAG_trace_service) {
729 OS::Print("vm-service: Embedder did not provide a main function."); 730 OS::Print("vm-service: Embedder did not provide a main function.");
730 } 731 }
731 return; 732 return;
732 } 733 }
733 ASSERT(!entry.IsNull()); 734 ASSERT(!entry.IsNull());
734 const Object& result = 735 const Object& result = Object::Handle(Z,
735 Object::Handle(isolate, 736 DartEntry::InvokeFunction(entry, Object::empty_array()));
736 DartEntry::InvokeFunction(entry,
737 Object::empty_array()));
738 ASSERT(!result.IsNull()); 737 ASSERT(!result.IsNull());
739 if (result.IsError()) { 738 if (result.IsError()) {
740 // Service isolate did not initialize properly. 739 // Service isolate did not initialize properly.
741 if (FLAG_trace_service) { 740 if (FLAG_trace_service) {
742 const Error& error = Error::Cast(result); 741 const Error& error = Error::Cast(result);
743 OS::Print("vm-service: Calling main resulted in an error: %s", 742 OS::Print("vm-service: Calling main resulted in an error: %s",
744 error.ToErrorCString()); 743 error.ToErrorCString());
745 } 744 }
746 return; 745 return;
747 } 746 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 return result; 820 return result;
822 } 821 }
823 Dart_Handle source = GetSource(url_string); 822 Dart_Handle source = GetSource(url_string);
824 if (Dart_IsError(source)) { 823 if (Dart_IsError(source)) {
825 return source; 824 return source;
826 } 825 }
827 return Dart_LoadSource(library, url, source, 0, 0); 826 return Dart_LoadSource(library, url, source, 0, 0);
828 } 827 }
829 828
830 } // namespace dart 829 } // namespace dart
OLDNEW
« runtime/vm/service.cc ('K') | « runtime/vm/service.cc ('k') | runtime/vm/snapshot_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698