Chromium Code Reviews| Index: runtime/bin/main.cc |
| diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc |
| index 61d76f7a80bf32c58a635f0493746ab9ee7dc76b..6fde4afddb9218133c0966e7e7448f6a08b3b162 100644 |
| --- a/runtime/bin/main.cc |
| +++ b/runtime/bin/main.cc |
| @@ -390,6 +390,16 @@ static bool ProcessPlatformOption(const char* filename, |
| dfe.set_platform_binary_filename(filename); |
| return true; |
| } |
| + |
| +static bool ProcessVmServiceIOOption(const char* filename, |
| + CommandLineOptions* vm_options) { |
| + ASSERT(filename != NULL); |
| + if (filename[0] == '\0') { |
| + return false; |
| + } |
| + dfe.set_vmservice_io_binary_filename(filename); |
| + return true; |
| +} |
| #endif |
| @@ -617,6 +627,7 @@ static struct { |
| #if !defined(DART_PRECOMPILED_RUNTIME) |
| {"--dfe=", ProcessFrontendOption}, |
| {"--platform=", ProcessPlatformOption}, |
| + {"--vmservice_io=", ProcessVmServiceIOOption}, |
|
siva
2017/06/13 02:12:02
Can we derive the location of this file from the e
sivachandra
2017/06/14 19:25:57
I proposed a way to reduce the number of options h
|
| #endif |
| {"--enable-vm-service", ProcessEnableVmServiceOption}, |
| {"--disable-service-origin-check", ProcessDisableServiceOriginCheckOption}, |
| @@ -1028,23 +1039,45 @@ static Dart_Isolate CreateAndSetupServiceIsolate(const char* script_uri, |
| #if defined(DART_PRECOMPILED_RUNTIME) |
| // AOT: All isolates start from the app snapshot. |
| - bool isolate_run_app_snapshot = true; |
| + bool skip_library_load = true; |
| const uint8_t* isolate_snapshot_data = app_isolate_snapshot_data; |
| const uint8_t* isolate_snapshot_instructions = |
| app_isolate_snapshot_instructions; |
| #else |
| // JIT: Service isolate uses the core libraries snapshot. |
| - bool isolate_run_app_snapshot = false; |
| + bool skip_library_load = false; |
| const uint8_t* isolate_snapshot_data = core_isolate_snapshot_data; |
| const uint8_t* isolate_snapshot_instructions = |
| core_isolate_snapshot_instructions; |
| #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| + Dart_Isolate isolate = NULL; |
| IsolateData* isolate_data = |
| new IsolateData(script_uri, package_root, packages_config, NULL); |
| - Dart_Isolate isolate = Dart_CreateIsolate( |
| - script_uri, main, isolate_snapshot_data, isolate_snapshot_instructions, |
| - flags, isolate_data, error); |
| +#if defined(DART_PRECOMPILED_RUNTIME) |
| + isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, |
| + isolate_snapshot_instructions, flags, |
| + isolate_data, error); |
| +#else |
| + if (dfe.UsePlatformBinary()) { |
| + isolate = Dart_CreateIsolateFromKernel( |
| + script_uri, NULL, dfe.kernel_platform(), flags, isolate_data, error); |
| + if (isolate != NULL) { |
| + Dart_EnterScope(); |
| + Dart_Handle library = Dart_LoadKernel(dfe.kernel_vmservice_io()); |
| + if (Dart_IsError(library)) { |
| + Dart_ShutdownIsolate(); |
|
siva
2017/06/13 02:12:02
Why does shutdown isolate need to be called here?
sivachandra
2017/06/14 19:25:57
I thought ShutdownIsolate reverses the side effect
siva
2017/06/21 20:01:26
You are right I did not see that the isolate was c
|
| + isolate = NULL; |
| + } else { |
| + skip_library_load = true; |
| + } |
| + } |
| + } else { |
| + isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, |
| + isolate_snapshot_instructions, flags, |
| + isolate_data, error); |
| + } |
| +#endif // !defined(DART_PRECOMPILED_RUNTIME) |
| if (isolate == NULL) { |
| delete isolate_data; |
| return NULL; |
| @@ -1056,7 +1089,6 @@ static Dart_Isolate CreateAndSetupServiceIsolate(const char* script_uri, |
| CHECK_RESULT(result); |
| // Load embedder specific bits and return. |
| - bool skip_library_load = isolate_run_app_snapshot; |
| if (!VmService::Setup(vm_service_server_ip, vm_service_server_port, |
| skip_library_load, vm_service_dev_mode, |
| trace_loading)) { |
| @@ -1830,6 +1862,22 @@ void main(int argc, char** argv) { |
| Process::SetExitHook(SnapshotOnExitHook); |
| } |
| +#if !defined(DART_PRECOMPILED_RUNTIME) |
| + // If a kernel platform binary file is specified, read it. This |
| + // step will become redundant once we have the snapshot version |
| + // of the kernel core/platform libraries. |
| + if (dfe.UsePlatformBinary()) { |
| + if (dfe.ReadPlatform() == NULL) { |
| + Log::PrintErr("The platform binary is not a valid Dart Kernel file."); |
| + Platform::Exit(kErrorExitCode); |
| + } |
| + if (dfe.ReadVMServiceIO() == NULL) { |
| + Log::PrintErr("Could not read dart:vmservice_io binary file."); |
| + Platform::Exit(kErrorExitCode); |
| + } |
| + } |
| +#endif |
| + |
| Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); |
| // Start event handler. |
| @@ -1864,18 +1912,6 @@ void main(int argc, char** argv) { |
| &ServiceStreamCancelCallback); |
| Dart_SetFileModifiedCallback(&FileModifiedCallback); |
| -#if !defined(DART_PRECOMPILED_RUNTIME) |
| - // If a kernel platform binary file is specified, read it. This |
| - // step will become redundant once we have the snapshot version |
| - // of the kernel core/platform libraries. |
| - if (dfe.UsePlatformBinary()) { |
| - if (dfe.ReadPlatform() == NULL) { |
| - Log::PrintErr("The platform binary is not a valid Dart Kernel file."); |
| - Platform::Exit(kErrorExitCode); |
| - } |
| - } |
| -#endif |
| - |
| // Run the main isolate until we aren't told to restart. |
| while (RunMainIsolate(script_name, &dart_options)) { |
| Log::PrintErr("Restarting VM\n"); |