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

Side by Side Diff: runtime/bin/loader.cc

Issue 2483373002: Add Kernel Isolate (Closed)
Patch Set: wip Created 4 years 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/bin/loader.h ('k') | runtime/bin/main.cc » ('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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 5
6 #include "bin/loader.h" 6 #include "bin/loader.h"
7 7
8 #include "bin/builtin.h" 8 #include "bin/builtin.h"
9 #include "bin/dartutils.h" 9 #include "bin/dartutils.h"
10 #include "bin/extensions.h" 10 #include "bin/extensions.h"
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 Dart_ListSetAt(request, 4, url); 199 Dart_ListSetAt(request, 4, url);
200 Dart_ListSetAt(request, 5, library_url); 200 Dart_ListSetAt(request, 5, library_url);
201 201
202 if (Dart_Post(loader_port, request)) { 202 if (Dart_Post(loader_port, request)) {
203 MonitorLocker ml(monitor_); 203 MonitorLocker ml(monitor_);
204 pending_operations_++; 204 pending_operations_++;
205 } 205 }
206 } 206 }
207 207
208 208
209 // Forward a request from the tag handler to the kernel isolate.
210 // [ tag, send port, url ]
211 void Loader::SendKernelRequest(Dart_LibraryTag tag, Dart_Handle url) {
212 // This port delivers loading messages to the Kernel isolate.
213 Dart_Port kernel_port = Dart_KernelPort();
214 ASSERT(kernel_port != ILLEGAL_PORT);
215
216 Dart_Handle request = Dart_NewList(3);
217 Dart_ListSetAt(request, 0, Dart_NewInteger(tag));
218 Dart_ListSetAt(request, 1, Dart_NewSendPort(port_));
219 Dart_ListSetAt(request, 2, url);
220 if (Dart_Post(kernel_port, request)) {
221 MonitorLocker ml(monitor_);
222 pending_operations_++;
223 }
224 }
225
226
209 void Loader::QueueMessage(Dart_CObject* message) { 227 void Loader::QueueMessage(Dart_CObject* message) {
210 MonitorLocker ml(monitor_); 228 MonitorLocker ml(monitor_);
211 if (results_length_ == results_capacity_) { 229 if (results_length_ == results_capacity_) {
212 // Grow to an initial capacity or double in size. 230 // Grow to an initial capacity or double in size.
213 results_capacity_ = (results_capacity_ == 0) ? 4 : results_capacity_ * 2; 231 results_capacity_ = (results_capacity_ == 0) ? 4 : results_capacity_ * 2;
214 results_ = reinterpret_cast<IOResult*>( 232 results_ = reinterpret_cast<IOResult*>(
215 realloc(results_, sizeof(IOResult) * results_capacity_)); 233 realloc(results_, sizeof(IOResult) * results_capacity_));
216 ASSERT(results_ != NULL); 234 ASSERT(results_ != NULL);
217 } 235 }
218 ASSERT(results_ != NULL); 236 ASSERT(results_ != NULL);
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 // work with the service isolate. 636 // work with the service isolate.
619 // Use the existing loader. 637 // Use the existing loader.
620 loader = isolate_data->loader(); 638 loader = isolate_data->loader();
621 } 639 }
622 ASSERT(loader != NULL); 640 ASSERT(loader != NULL);
623 ASSERT(isolate_data->HasLoader()); 641 ASSERT(isolate_data->HasLoader());
624 642
625 if (DartUtils::IsDartExtensionSchemeURL(url_string)) { 643 if (DartUtils::IsDartExtensionSchemeURL(url_string)) {
626 loader->SendImportExtensionRequest(url, Dart_LibraryUrl(library)); 644 loader->SendImportExtensionRequest(url, Dart_LibraryUrl(library));
627 } else { 645 } else {
628 loader->SendRequest(tag, url, (library != Dart_Null()) 646 if (Dart_KernelIsolateIsRunning()) {
629 ? Dart_LibraryUrl(library) 647 loader->SendKernelRequest(tag, url);
630 : Dart_Null()); 648 } else {
649 loader->SendRequest(tag, url, (library != Dart_Null())
650 ? Dart_LibraryUrl(library)
651 : Dart_Null());
652 }
631 } 653 }
632 654
633
634 if (blocking_call) { 655 if (blocking_call) {
635 // The outer invocation of the tag handler will block here until all nested 656 // The outer invocation of the tag handler will block here until all nested
636 // invocations complete. 657 // invocations complete.
637 loader->BlockUntilComplete(ProcessResultLocked); 658 loader->BlockUntilComplete(ProcessResultLocked);
638 659
639 // Remember the error (if any). 660 // Remember the error (if any).
640 Dart_Handle error = loader->error(); 661 Dart_Handle error = loader->error();
641 // Destroy the loader. The destructor does a bunch of leg work. 662 // Destroy the loader. The destructor does a bunch of leg work.
642 delete loader; 663 delete loader;
643 664
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
800 MutexLocker ml(loader_infos_lock_); 821 MutexLocker ml(loader_infos_lock_);
801 Loader* loader = LoaderForLocked(dest_port_id); 822 Loader* loader = LoaderForLocked(dest_port_id);
802 if (loader == NULL) { 823 if (loader == NULL) {
803 return; 824 return;
804 } 825 }
805 loader->QueueMessage(message); 826 loader->QueueMessage(message);
806 } 827 }
807 828
808 } // namespace bin 829 } // namespace bin
809 } // namespace dart 830 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/loader.h ('k') | runtime/bin/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698