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

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

Issue 1140263005: Revert "Hide Isolate pointer from embedder" (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « runtime/vm/port.cc ('k') | runtime/vm/unit_test.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 102
103 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) { 103 static uint8_t* allocator(uint8_t* ptr, intptr_t old_size, intptr_t new_size) {
104 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size); 104 void* new_ptr = realloc(reinterpret_cast<void*>(ptr), new_size);
105 return reinterpret_cast<uint8_t*>(new_ptr); 105 return reinterpret_cast<uint8_t*>(new_ptr);
106 } 106 }
107 107
108 108
109 static Dart_Port ExtractPort(Isolate* isolate, Dart_Handle receivePort) { 109 static Dart_Port ExtractPort(Isolate* isolate, Dart_Handle receivePort) {
110 const ReceivePort& rp = Api::UnwrapReceivePortHandle(isolate, receivePort); 110 const ReceivePort& rp = Api::UnwrapReceivePortHandle(isolate, receivePort);
111 if (rp.IsNull()) { 111 if (rp.IsNull()) {
112 return DART_ILLEGAL_PORT; 112 return ILLEGAL_PORT;
113 } 113 }
114 return rp.Id(); 114 return rp.Id();
115 } 115 }
116 116
117 117
118 // These must be kept in sync with service/constants.dart 118 // These must be kept in sync with service/constants.dart
119 #define VM_SERVICE_ISOLATE_EXIT_MESSAGE_ID 0 119 #define VM_SERVICE_ISOLATE_EXIT_MESSAGE_ID 0
120 #define VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID 1 120 #define VM_SERVICE_ISOLATE_STARTUP_MESSAGE_ID 1
121 #define VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID 2 121 #define VM_SERVICE_ISOLATE_SHUTDOWN_MESSAGE_ID 2
122 122
(...skipping 17 matching lines...) Expand all
140 ASSERT(!list.IsNull()); 140 ASSERT(!list.IsNull());
141 const intptr_t code = VM_SERVICE_ISOLATE_EXIT_MESSAGE_ID; 141 const intptr_t code = VM_SERVICE_ISOLATE_EXIT_MESSAGE_ID;
142 const Integer& code_int = Integer::Handle(Integer::New(code)); 142 const Integer& code_int = Integer::Handle(Integer::New(code));
143 list.SetAt(0, code_int); 143 list.SetAt(0, code_int);
144 return list.raw(); 144 return list.raw();
145 } 145 }
146 146
147 147
148 const char* ServiceIsolate::kName = "vm-service"; 148 const char* ServiceIsolate::kName = "vm-service";
149 Isolate* ServiceIsolate::isolate_ = NULL; 149 Isolate* ServiceIsolate::isolate_ = NULL;
150 Dart_Port ServiceIsolate::port_ = DART_ILLEGAL_PORT; 150 Dart_Port ServiceIsolate::port_ = ILLEGAL_PORT;
151 Dart_Port ServiceIsolate::load_port_ = DART_ILLEGAL_PORT; 151 Dart_Port ServiceIsolate::load_port_ = ILLEGAL_PORT;
152 Dart_Port ServiceIsolate::origin_ = DART_ILLEGAL_PORT; 152 Dart_Port ServiceIsolate::origin_ = ILLEGAL_PORT;
153 Dart_IsolateCreateCallback ServiceIsolate::create_callback_ = NULL; 153 Dart_IsolateCreateCallback ServiceIsolate::create_callback_ = NULL;
154 uint8_t* ServiceIsolate::exit_message_ = NULL; 154 uint8_t* ServiceIsolate::exit_message_ = NULL;
155 intptr_t ServiceIsolate::exit_message_length_ = 0; 155 intptr_t ServiceIsolate::exit_message_length_ = 0;
156 Monitor* ServiceIsolate::monitor_ = NULL; 156 Monitor* ServiceIsolate::monitor_ = NULL;
157 bool ServiceIsolate::initializing_ = true; 157 bool ServiceIsolate::initializing_ = true;
158 bool ServiceIsolate::shutting_down_ = false; 158 bool ServiceIsolate::shutting_down_ = false;
159 159
160 160
161 class RegisterRunningIsolatesVisitor : public IsolateVisitor { 161 class RegisterRunningIsolatesVisitor : public IsolateVisitor {
162 public: 162 public:
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 // Boot the dart:vmservice library. 263 // Boot the dart:vmservice library.
264 Dart_EnterScope(); 264 Dart_EnterScope();
265 Dart_Handle url_str = 265 Dart_Handle url_str =
266 Dart_NewStringFromCString(Symbols::Name(Symbols::kDartVMServiceId)); 266 Dart_NewStringFromCString(Symbols::Name(Symbols::kDartVMServiceId));
267 Dart_Handle library = Dart_LookupLibrary(url_str); 267 Dart_Handle library = Dart_LookupLibrary(url_str);
268 ASSERT(Dart_IsLibrary(library)); 268 ASSERT(Dart_IsLibrary(library));
269 Dart_Handle result = 269 Dart_Handle result =
270 Dart_Invoke(library, Dart_NewStringFromCString("boot"), 0, NULL); 270 Dart_Invoke(library, Dart_NewStringFromCString("boot"), 0, NULL);
271 ASSERT(!Dart_IsError(result)); 271 ASSERT(!Dart_IsError(result));
272 Dart_Port port = ExtractPort(isolate, result); 272 Dart_Port port = ExtractPort(isolate, result);
273 ASSERT(port != DART_ILLEGAL_PORT); 273 ASSERT(port != ILLEGAL_PORT);
274 ServiceIsolate::SetServicePort(port); 274 ServiceIsolate::SetServicePort(port);
275 Dart_ExitScope(); 275 Dart_ExitScope();
276 } 276 }
277 277
278 { 278 {
279 if (FLAG_trace_service) { 279 if (FLAG_trace_service) {
280 OS::Print("vm-service: Registering running isolates.\n"); 280 OS::Print("vm-service: Registering running isolates.\n");
281 } 281 }
282 // Register running isolates with service. 282 // Register running isolates with service.
283 RegisterRunningIsolatesVisitor register_isolates(isolate); 283 RegisterRunningIsolatesVisitor register_isolates(isolate);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 349
350 350
351 bool ServiceIsolate::Exists() { 351 bool ServiceIsolate::Exists() {
352 MonitorLocker ml(monitor_); 352 MonitorLocker ml(monitor_);
353 return isolate_ != NULL; 353 return isolate_ != NULL;
354 } 354 }
355 355
356 356
357 bool ServiceIsolate::IsRunning() { 357 bool ServiceIsolate::IsRunning() {
358 MonitorLocker ml(monitor_); 358 MonitorLocker ml(monitor_);
359 return (port_ != DART_ILLEGAL_PORT) && (isolate_ != NULL); 359 return (port_ != ILLEGAL_PORT) && (isolate_ != NULL);
360 } 360 }
361 361
362 362
363 bool ServiceIsolate::IsServiceIsolate(Isolate* isolate) { 363 bool ServiceIsolate::IsServiceIsolate(Isolate* isolate) {
364 MonitorLocker ml(monitor_); 364 MonitorLocker ml(monitor_);
365 return isolate == isolate_; 365 return isolate == isolate_;
366 } 366 }
367 367
368 368
369 bool ServiceIsolate::IsServiceIsolateDescendant(Isolate* isolate) { 369 bool ServiceIsolate::IsServiceIsolateDescendant(Isolate* isolate) {
370 MonitorLocker ml(monitor_); 370 MonitorLocker ml(monitor_);
371 return isolate->origin_id() == origin_; 371 return isolate->origin_id() == origin_;
372 } 372 }
373 373
374 374
375 Dart_Port ServiceIsolate::Port() { 375 Dart_Port ServiceIsolate::Port() {
376 MonitorLocker ml(monitor_); 376 MonitorLocker ml(monitor_);
377 return port_; 377 return port_;
378 } 378 }
379 379
380 380
381 Dart_Port ServiceIsolate::WaitForLoadPort() { 381 Dart_Port ServiceIsolate::WaitForLoadPort() {
382 MonitorLocker ml(monitor_); 382 MonitorLocker ml(monitor_);
383 383
384 while (initializing_ && (load_port_ == DART_ILLEGAL_PORT)) { 384 while (initializing_ && (load_port_ == ILLEGAL_PORT)) {
385 ml.Wait(); 385 ml.Wait();
386 } 386 }
387 387
388 return load_port_; 388 return load_port_;
389 } 389 }
390 390
391 391
392 Dart_Port ServiceIsolate::LoadPort() { 392 Dart_Port ServiceIsolate::LoadPort() {
393 MonitorLocker ml(monitor_); 393 MonitorLocker ml(monitor_);
394 return load_port_; 394 return load_port_;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 } 480 }
481 481
482 482
483 void ServiceIsolate::SetServiceIsolate(Isolate* isolate) { 483 void ServiceIsolate::SetServiceIsolate(Isolate* isolate) {
484 MonitorLocker ml(monitor_); 484 MonitorLocker ml(monitor_);
485 isolate_ = isolate; 485 isolate_ = isolate;
486 if (isolate_ != NULL) { 486 if (isolate_ != NULL) {
487 isolate_->is_service_isolate_ = true; 487 isolate_->is_service_isolate_ = true;
488 origin_ = isolate_->origin_id(); 488 origin_ = isolate_->origin_id();
489 } else { 489 } else {
490 origin_ = DART_ILLEGAL_PORT; 490 origin_ = ILLEGAL_PORT;
491 } 491 }
492 } 492 }
493 493
494 void ServiceIsolate::SetLoadPort(Dart_Port port) { 494 void ServiceIsolate::SetLoadPort(Dart_Port port) {
495 MonitorLocker ml(monitor_); 495 MonitorLocker ml(monitor_);
496 load_port_ = port; 496 load_port_ = port;
497 } 497 }
498 498
499 499
500 void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* isolate) { 500 void ServiceIsolate::MaybeInjectVMServiceLibrary(Isolate* isolate) {
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 594
595 Dart_IsolateCreateCallback create_callback = 595 Dart_IsolateCreateCallback create_callback =
596 ServiceIsolate::create_callback(); 596 ServiceIsolate::create_callback();
597 // TODO(johnmccutchan): Support starting up service isolate without embedder 597 // TODO(johnmccutchan): Support starting up service isolate without embedder
598 // provided isolate creation callback. 598 // provided isolate creation callback.
599 if (create_callback == NULL) { 599 if (create_callback == NULL) {
600 ServiceIsolate::FinishedInitializing(); 600 ServiceIsolate::FinishedInitializing();
601 return; 601 return;
602 } 602 }
603 603
604 isolate = Api::CastIsolate(create_callback(ServiceIsolate::kName, 604 isolate =
605 NULL, 605 reinterpret_cast<Isolate*>(create_callback(ServiceIsolate::kName,
606 NULL, 606 NULL,
607 NULL, 607 NULL,
608 &error)); 608 NULL,
609 &error));
609 if (isolate == NULL) { 610 if (isolate == NULL) {
610 OS::PrintErr("vm-service: Isolate creation error: %s\n", error); 611 OS::PrintErr("vm-service: Isolate creation error: %s\n", error);
611 ServiceIsolate::FinishedInitializing(); 612 ServiceIsolate::FinishedInitializing();
612 return; 613 return;
613 } 614 }
614 615
615 Thread::ExitIsolate(); 616 Thread::ExitIsolate();
616 617
617 ServiceIsolate::ConstructExitMessageAndCache(isolate); 618 ServiceIsolate::ConstructExitMessageAndCache(isolate);
618 619
(...skipping 23 matching lines...) Expand all
642 OS::PrintErr("vm-service: Error: %s\n", error.ToErrorCString()); 643 OS::PrintErr("vm-service: Error: %s\n", error.ToErrorCString());
643 } 644 }
644 Dart::RunShutdownCallback(); 645 Dart::RunShutdownCallback();
645 } 646 }
646 { 647 {
647 // Shut the isolate down. 648 // Shut the isolate down.
648 SwitchIsolateScope switch_scope(isolate); 649 SwitchIsolateScope switch_scope(isolate);
649 Dart::ShutdownIsolate(); 650 Dart::ShutdownIsolate();
650 } 651 }
651 ServiceIsolate::SetServiceIsolate(NULL); 652 ServiceIsolate::SetServiceIsolate(NULL);
652 ServiceIsolate::SetServicePort(DART_ILLEGAL_PORT); 653 ServiceIsolate::SetServicePort(ILLEGAL_PORT);
653 if (FLAG_trace_service) { 654 if (FLAG_trace_service) {
654 OS::Print("vm-service: Shutdown.\n"); 655 OS::Print("vm-service: Shutdown.\n");
655 } 656 }
656 ServiceIsolate::FinishedExiting(); 657 ServiceIsolate::FinishedExiting();
657 } 658 }
658 659
659 void RunMain(Isolate* isolate) { 660 void RunMain(Isolate* isolate) {
660 StartIsolateScope iso_scope(isolate); 661 StartIsolateScope iso_scope(isolate);
661 StackZone zone(isolate); 662 StackZone zone(isolate);
662 HANDLESCOPE(isolate); 663 HANDLESCOPE(isolate);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 if (!IsRunning()) { 721 if (!IsRunning()) {
721 return; 722 return;
722 } 723 }
723 { 724 {
724 MonitorLocker ml(monitor_); 725 MonitorLocker ml(monitor_);
725 shutting_down_ = true; 726 shutting_down_ = true;
726 } 727 }
727 SendServiceExitMessage(); 728 SendServiceExitMessage();
728 { 729 {
729 MonitorLocker ml(monitor_); 730 MonitorLocker ml(monitor_);
730 while (shutting_down_ && (port_ != DART_ILLEGAL_PORT)) { 731 while (shutting_down_ && (port_ != ILLEGAL_PORT)) {
731 ml.Wait(); 732 ml.Wait();
732 } 733 }
733 } 734 }
734 } 735 }
735 736
736 737
737 Dart_Handle ServiceIsolate::GetSource(const char* name) { 738 Dart_Handle ServiceIsolate::GetSource(const char* name) {
738 ASSERT(name != NULL); 739 ASSERT(name != NULL);
739 int i = 0; 740 int i = 0;
740 while (true) { 741 while (true) {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 return result; 775 return result;
775 } 776 }
776 Dart_Handle source = GetSource(url_string); 777 Dart_Handle source = GetSource(url_string);
777 if (Dart_IsError(source)) { 778 if (Dart_IsError(source)) {
778 return source; 779 return source;
779 } 780 }
780 return Dart_LoadSource(library, url, source, 0, 0); 781 return Dart_LoadSource(library, url, source, 0, 0);
781 } 782 }
782 783
783 } // namespace dart 784 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/port.cc ('k') | runtime/vm/unit_test.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698