| Index: runtime/vm/dart_api_impl.cc
|
| diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
|
| index 2fef2775ca41364b25ad44affad7c739326c5f53..bd29493e904c304350af159c7b7fd81b387ba76c 100644
|
| --- a/runtime/vm/dart_api_impl.cc
|
| +++ b/runtime/vm/dart_api_impl.cc
|
| @@ -1188,12 +1188,11 @@ DART_EXPORT char* Dart_Initialize(Dart_InitializeParams* params) {
|
| "Invalid Dart_InitializeParams version.");
|
| }
|
|
|
| - return Dart::InitOnce(params->vm_isolate_snapshot,
|
| - params->instructions_snapshot, params->data_snapshot,
|
| - params->create, params->shutdown, params->thread_exit,
|
| - params->file_open, params->file_read,
|
| - params->file_write, params->file_close,
|
| - params->entropy_source, params->get_service_assets);
|
| + return Dart::InitOnce(
|
| + params->vm_snapshot_data, params->vm_snapshot_instructions,
|
| + params->create, params->shutdown, params->thread_exit, params->file_open,
|
| + params->file_read, params->file_write, params->file_close,
|
| + params->entropy_source, params->get_service_assets);
|
| }
|
|
|
|
|
| @@ -1256,7 +1255,8 @@ static char* BuildIsolateName(const char* script_uri, const char* main) {
|
|
|
| static Dart_Isolate CreateIsolate(const char* script_uri,
|
| const char* main,
|
| - const uint8_t* snapshot_buffer,
|
| + const uint8_t* snapshot_data,
|
| + const uint8_t* snapshot_instructions,
|
| intptr_t snapshot_length,
|
| kernel::Program* kernel_program,
|
| Dart_IsolateFlags* flags,
|
| @@ -1285,9 +1285,10 @@ static Dart_Isolate CreateIsolate(const char* script_uri,
|
| // bootstrap library files which call out to a tag handler that may create
|
| // Api Handles when an error is encountered.
|
| Dart_EnterScope();
|
| - const Error& error_obj = Error::Handle(
|
| - Z, Dart::InitializeIsolate(snapshot_buffer, snapshot_length,
|
| - kernel_program, callback_data));
|
| + const Error& error_obj =
|
| + Error::Handle(Z, Dart::InitializeIsolate(
|
| + snapshot_data, snapshot_instructions,
|
| + snapshot_length, kernel_program, callback_data));
|
| if (error_obj.IsNull()) {
|
| #if defined(DART_NO_SNAPSHOT) && !defined(PRODUCT)
|
| if (FLAG_check_function_fingerprints && kernel_program == NULL) {
|
| @@ -1313,14 +1314,16 @@ static Dart_Isolate CreateIsolate(const char* script_uri,
|
| }
|
|
|
|
|
| -DART_EXPORT Dart_Isolate Dart_CreateIsolate(const char* script_uri,
|
| - const char* main,
|
| - const uint8_t* snapshot_buffer,
|
| - Dart_IsolateFlags* flags,
|
| - void* callback_data,
|
| - char** error) {
|
| - return CreateIsolate(script_uri, main, snapshot_buffer, -1, NULL, flags,
|
| - callback_data, error);
|
| +DART_EXPORT Dart_Isolate
|
| +Dart_CreateIsolate(const char* script_uri,
|
| + const char* main,
|
| + const uint8_t* snapshot_data,
|
| + const uint8_t* snapshot_instructions,
|
| + Dart_IsolateFlags* flags,
|
| + void* callback_data,
|
| + char** error) {
|
| + return CreateIsolate(script_uri, main, snapshot_data, snapshot_instructions,
|
| + -1, NULL, flags, callback_data, error);
|
| }
|
|
|
|
|
| @@ -1330,7 +1333,7 @@ DART_EXPORT Dart_Isolate Dart_CreateIsolateFromKernel(const char* script_uri,
|
| Dart_IsolateFlags* flags,
|
| void* callback_data,
|
| char** error) {
|
| - return CreateIsolate(script_uri, main, NULL, -1,
|
| + return CreateIsolate(script_uri, main, NULL, NULL, -1,
|
| reinterpret_cast<kernel::Program*>(kernel_program),
|
| flags, callback_data, error);
|
| }
|
| @@ -1560,10 +1563,10 @@ static uint8_t* ApiReallocate(uint8_t* ptr,
|
|
|
|
|
| DART_EXPORT Dart_Handle
|
| -Dart_CreateSnapshot(uint8_t** vm_isolate_snapshot_buffer,
|
| - intptr_t* vm_isolate_snapshot_size,
|
| - uint8_t** isolate_snapshot_buffer,
|
| - intptr_t* isolate_snapshot_size) {
|
| +Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer,
|
| + intptr_t* vm_snapshot_data_size,
|
| + uint8_t** isolate_snapshot_data_buffer,
|
| + intptr_t* isolate_snapshot_data_size) {
|
| DARTSCOPE(Thread::Current());
|
| API_TIMELINE_DURATION;
|
| Isolate* I = T->isolate();
|
| @@ -1571,14 +1574,14 @@ Dart_CreateSnapshot(uint8_t** vm_isolate_snapshot_buffer,
|
| return Api::NewError(
|
| "Creating full snapshots requires --load_deferred_eagerly");
|
| }
|
| - if (vm_isolate_snapshot_buffer != NULL && vm_isolate_snapshot_size == NULL) {
|
| - RETURN_NULL_ERROR(vm_isolate_snapshot_size);
|
| + if (vm_snapshot_data_buffer != NULL && vm_snapshot_data_size == NULL) {
|
| + RETURN_NULL_ERROR(vm_snapshot_data_size);
|
| }
|
| - if (isolate_snapshot_buffer == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_buffer);
|
| + if (isolate_snapshot_data_buffer == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_buffer);
|
| }
|
| - if (isolate_snapshot_size == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_size);
|
| + if (isolate_snapshot_data_size == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_size);
|
| }
|
| // Finalize all classes if needed.
|
| Dart_Handle state = Api::CheckAndFinalizePendingClasses(T);
|
| @@ -1595,28 +1598,30 @@ Dart_CreateSnapshot(uint8_t** vm_isolate_snapshot_buffer,
|
|
|
| Symbols::Compact(I);
|
|
|
| - FullSnapshotWriter writer(Snapshot::kCore, vm_isolate_snapshot_buffer,
|
| - isolate_snapshot_buffer, ApiReallocate,
|
| - NULL /* instructions_writer */);
|
| + FullSnapshotWriter writer(Snapshot::kCore, vm_snapshot_data_buffer,
|
| + isolate_snapshot_data_buffer, ApiReallocate,
|
| + NULL /* vm_instructions_writer */,
|
| + NULL /* isolate_instructions_writer */);
|
| writer.WriteFullSnapshot();
|
| - if (vm_isolate_snapshot_buffer != NULL) {
|
| - *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize();
|
| + if (vm_snapshot_data_buffer != NULL) {
|
| + *vm_snapshot_data_size = writer.VmIsolateSnapshotSize();
|
| }
|
| - *isolate_snapshot_size = writer.IsolateSnapshotSize();
|
| + *isolate_snapshot_data_size = writer.IsolateSnapshotSize();
|
| return Api::Success();
|
| }
|
|
|
|
|
| -DART_EXPORT Dart_Handle Dart_CreateScriptSnapshot(uint8_t** buffer,
|
| - intptr_t* size) {
|
| +DART_EXPORT Dart_Handle
|
| +Dart_CreateScriptSnapshot(uint8_t** script_snapshot_buffer,
|
| + intptr_t* script_snapshot_size) {
|
| API_TIMELINE_DURATION;
|
| DARTSCOPE(Thread::Current());
|
| Isolate* I = T->isolate();
|
| - if (buffer == NULL) {
|
| - RETURN_NULL_ERROR(buffer);
|
| + if (script_snapshot_buffer == NULL) {
|
| + RETURN_NULL_ERROR(script_snapshot_buffer);
|
| }
|
| - if (size == NULL) {
|
| - RETURN_NULL_ERROR(size);
|
| + if (script_snapshot_size == NULL) {
|
| + RETURN_NULL_ERROR(script_snapshot_size);
|
| }
|
| // Finalize all classes if needed.
|
| Dart_Handle state = Api::CheckAndFinalizePendingClasses(T);
|
| @@ -1631,9 +1636,9 @@ DART_EXPORT Dart_Handle Dart_CreateScriptSnapshot(uint8_t** buffer,
|
| I->heap()->IterateObjects(&check_canonical);
|
| #endif // #if defined(DEBUG)
|
|
|
| - ScriptSnapshotWriter writer(buffer, ApiReallocate);
|
| + ScriptSnapshotWriter writer(script_snapshot_buffer, ApiReallocate);
|
| writer.WriteScriptSnapshot(lib);
|
| - *size = writer.BytesWritten();
|
| + *script_snapshot_size = writer.BytesWritten();
|
| return Api::Success();
|
| }
|
|
|
| @@ -3884,7 +3889,8 @@ DART_EXPORT Dart_Handle Dart_New(Dart_Handle type,
|
| }
|
| if (constructor.IsGenerativeConstructor()) {
|
| #if defined(DEBUG)
|
| - if (!cls.is_allocated() && (Dart::snapshot_kind() == Snapshot::kAppAOT)) {
|
| + if (!cls.is_allocated() &&
|
| + (Dart::vm_snapshot_kind() == Snapshot::kAppAOT)) {
|
| return Api::NewError("Precompilation dropped '%s'", cls.ToCString());
|
| }
|
| #endif
|
| @@ -3979,7 +3985,7 @@ DART_EXPORT Dart_Handle Dart_Allocate(Dart_Handle type) {
|
| }
|
| const Class& cls = Class::Handle(Z, type_obj.type_class());
|
| #if defined(DEBUG)
|
| - if (!cls.is_allocated() && (Dart::snapshot_kind() == Snapshot::kAppAOT)) {
|
| + if (!cls.is_allocated() && (Dart::vm_snapshot_kind() == Snapshot::kAppAOT)) {
|
| return Api::NewError("Precompilation dropped '%s'", cls.ToCString());
|
| }
|
| #endif
|
| @@ -4009,7 +4015,7 @@ Dart_AllocateWithNativeFields(Dart_Handle type,
|
| }
|
| const Class& cls = Class::Handle(Z, type_obj.type_class());
|
| #if defined(DEBUG)
|
| - if (!cls.is_allocated() && (Dart::snapshot_kind() == Snapshot::kAppAOT)) {
|
| + if (!cls.is_allocated() && (Dart::vm_snapshot_kind() == Snapshot::kAppAOT)) {
|
| return Api::NewError("Precompilation dropped '%s'", cls.ToCString());
|
| }
|
| #endif
|
| @@ -6654,11 +6660,11 @@ Dart_CreateAppAOTSnapshotAsAssembly(uint8_t** assembly_buffer,
|
| "WriteAppAOTSnapshot"));
|
| AssemblyInstructionsWriter instructions_writer(assembly_buffer, ApiReallocate,
|
| 2 * MB /* initial_size */);
|
| - uint8_t* vm_isolate_snapshot_buffer = NULL;
|
| - uint8_t* isolate_snapshot_buffer = NULL;
|
| - FullSnapshotWriter writer(Snapshot::kAppAOT, &vm_isolate_snapshot_buffer,
|
| - &isolate_snapshot_buffer, ApiReallocate,
|
| - &instructions_writer);
|
| + uint8_t* vm_snapshot_data_buffer = NULL;
|
| + uint8_t* isolate_snapshot_data_buffer = NULL;
|
| + FullSnapshotWriter writer(Snapshot::kAppAOT, &vm_snapshot_data_buffer,
|
| + &isolate_snapshot_data_buffer, ApiReallocate,
|
| + &instructions_writer, &instructions_writer);
|
|
|
| writer.WriteFullSnapshot();
|
| *assembly_size = instructions_writer.AssemblySize();
|
| @@ -6669,14 +6675,14 @@ Dart_CreateAppAOTSnapshotAsAssembly(uint8_t** assembly_buffer,
|
|
|
|
|
| DART_EXPORT Dart_Handle
|
| -Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_isolate_snapshot_buffer,
|
| - intptr_t* vm_isolate_snapshot_size,
|
| - uint8_t** isolate_snapshot_buffer,
|
| - intptr_t* isolate_snapshot_size,
|
| - uint8_t** instructions_blob_buffer,
|
| - intptr_t* instructions_blob_size,
|
| - uint8_t** rodata_blob_buffer,
|
| - intptr_t* rodata_blob_size) {
|
| +Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_snapshot_data_buffer,
|
| + intptr_t* vm_snapshot_data_size,
|
| + uint8_t** vm_snapshot_instructions_buffer,
|
| + intptr_t* vm_snapshot_instructions_size,
|
| + uint8_t** isolate_snapshot_data_buffer,
|
| + intptr_t* isolate_snapshot_data_size,
|
| + uint8_t** isolate_snapshot_instructions_buffer,
|
| + intptr_t* isolate_snapshot_instructions_size) {
|
| #if defined(TARGET_ARCH_IA32)
|
| return Api::NewError("AOT compilation is not supported on IA32.");
|
| #elif defined(TARGET_ARCH_DBC)
|
| @@ -6694,45 +6700,50 @@ Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_isolate_snapshot_buffer,
|
| "Did you forget to call Dart_Precompile?");
|
| }
|
| ASSERT(FLAG_load_deferred_eagerly);
|
| - if (vm_isolate_snapshot_buffer == NULL) {
|
| - RETURN_NULL_ERROR(vm_isolate_snapshot_buffer);
|
| + if (vm_snapshot_data_buffer == NULL) {
|
| + RETURN_NULL_ERROR(vm_snapshot_data_buffer);
|
| }
|
| - if (vm_isolate_snapshot_size == NULL) {
|
| - RETURN_NULL_ERROR(vm_isolate_snapshot_size);
|
| + if (vm_snapshot_data_size == NULL) {
|
| + RETURN_NULL_ERROR(vm_snapshot_data_size);
|
| }
|
| - if (isolate_snapshot_buffer == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_buffer);
|
| + if (vm_snapshot_instructions_buffer == NULL) {
|
| + RETURN_NULL_ERROR(vm_snapshot_instructions_buffer);
|
| }
|
| - if (isolate_snapshot_size == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_size);
|
| + if (vm_snapshot_instructions_size == NULL) {
|
| + RETURN_NULL_ERROR(vm_snapshot_instructions_size);
|
| }
|
| - if (instructions_blob_buffer == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_buffer);
|
| + if (isolate_snapshot_data_buffer == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_buffer);
|
| }
|
| - if (instructions_blob_size == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_size);
|
| + if (isolate_snapshot_data_size == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_size);
|
| }
|
| - if (rodata_blob_buffer == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_buffer);
|
| + if (isolate_snapshot_instructions_buffer == NULL) {
|
| + RETURN_NULL_ERROR(instructions_snapshot_blob_buffer);
|
| }
|
| - if (rodata_blob_size == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_size);
|
| + if (isolate_snapshot_instructions_buffer == NULL) {
|
| + RETURN_NULL_ERROR(instructions_snapshot_blob_size);
|
| }
|
|
|
| NOT_IN_PRODUCT(TimelineDurationScope tds2(T, Timeline::GetIsolateStream(),
|
| "WriteAppAOTSnapshot"));
|
| - BlobInstructionsWriter instructions_writer(instructions_blob_buffer,
|
| - rodata_blob_buffer, ApiReallocate,
|
| - 2 * MB /* initial_size */);
|
| - FullSnapshotWriter writer(Snapshot::kAppAOT, vm_isolate_snapshot_buffer,
|
| - isolate_snapshot_buffer, ApiReallocate,
|
| - &instructions_writer);
|
| + BlobInstructionsWriter vm_instructions_writer(vm_snapshot_instructions_buffer,
|
| + ApiReallocate,
|
| + 2 * MB /* initial_size */);
|
| + BlobInstructionsWriter isolate_instructions_writer(
|
| + isolate_snapshot_instructions_buffer, ApiReallocate,
|
| + 2 * MB /* initial_size */);
|
| + FullSnapshotWriter writer(
|
| + Snapshot::kAppAOT, vm_snapshot_data_buffer, isolate_snapshot_data_buffer,
|
| + ApiReallocate, &vm_instructions_writer, &isolate_instructions_writer);
|
|
|
| writer.WriteFullSnapshot();
|
| - *vm_isolate_snapshot_size = writer.VmIsolateSnapshotSize();
|
| - *isolate_snapshot_size = writer.IsolateSnapshotSize();
|
| - *instructions_blob_size = instructions_writer.InstructionsBlobSize();
|
| - *rodata_blob_size = instructions_writer.RodataBlobSize();
|
| + *vm_snapshot_data_size = writer.VmIsolateSnapshotSize();
|
| + *vm_snapshot_instructions_size =
|
| + vm_instructions_writer.InstructionsBlobSize();
|
| + *isolate_snapshot_data_size = writer.IsolateSnapshotSize();
|
| + *isolate_snapshot_instructions_size =
|
| + isolate_instructions_writer.InstructionsBlobSize();
|
|
|
| return Api::Success();
|
| #endif
|
| @@ -6740,12 +6751,10 @@ Dart_CreateAppAOTSnapshotAsBlobs(uint8_t** vm_isolate_snapshot_buffer,
|
|
|
|
|
| DART_EXPORT Dart_Handle
|
| -Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_buffer,
|
| - intptr_t* isolate_snapshot_size,
|
| - uint8_t** instructions_blob_buffer,
|
| - intptr_t* instructions_blob_size,
|
| - uint8_t** rodata_blob_buffer,
|
| - intptr_t* rodata_blob_size) {
|
| +Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_data_buffer,
|
| + intptr_t* isolate_snapshot_data_size,
|
| + uint8_t** isolate_snapshot_instructions_buffer,
|
| + intptr_t* isolate_snapshot_instructions_size) {
|
| #if defined(TARGET_ARCH_IA32)
|
| return Api::NewError("Snapshots with code are not supported on IA32.");
|
| #elif defined(TARGET_ARCH_DBC)
|
| @@ -6760,23 +6769,17 @@ Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_buffer,
|
| return Api::NewError(
|
| "Creating full snapshots requires --load_deferred_eagerly");
|
| }
|
| - if (isolate_snapshot_buffer == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_buffer);
|
| - }
|
| - if (isolate_snapshot_size == NULL) {
|
| - RETURN_NULL_ERROR(isolate_snapshot_size);
|
| + if (isolate_snapshot_data_buffer == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_buffer);
|
| }
|
| - if (instructions_blob_buffer == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_buffer);
|
| + if (isolate_snapshot_data_size == NULL) {
|
| + RETURN_NULL_ERROR(isolate_snapshot_data_size);
|
| }
|
| - if (instructions_blob_size == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_size);
|
| + if (isolate_snapshot_instructions_buffer == NULL) {
|
| + RETURN_NULL_ERROR(instructions_snapshot_blob_buffer);
|
| }
|
| - if (rodata_blob_buffer == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_buffer);
|
| - }
|
| - if (rodata_blob_size == NULL) {
|
| - RETURN_NULL_ERROR(instructions_blob_size);
|
| + if (isolate_snapshot_instructions_buffer == NULL) {
|
| + RETURN_NULL_ERROR(instructions_snapshot_blob_size);
|
| }
|
| // Finalize all classes if needed.
|
| Dart_Handle state = Api::CheckAndFinalizePendingClasses(T);
|
| @@ -6789,15 +6792,17 @@ Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_buffer,
|
|
|
| NOT_IN_PRODUCT(TimelineDurationScope tds2(T, Timeline::GetIsolateStream(),
|
| "WriteAppJITSnapshot"));
|
| - BlobInstructionsWriter instructions_writer(instructions_blob_buffer,
|
| - rodata_blob_buffer, ApiReallocate,
|
| - 2 * MB /* initial_size */);
|
| - FullSnapshotWriter writer(Snapshot::kAppJIT, NULL, isolate_snapshot_buffer,
|
| - ApiReallocate, &instructions_writer);
|
| + BlobInstructionsWriter isolate_instructions_writer(
|
| + isolate_snapshot_instructions_buffer, ApiReallocate,
|
| + 2 * MB /* initial_size */);
|
| + FullSnapshotWriter writer(Snapshot::kAppJIT, NULL,
|
| + isolate_snapshot_data_buffer, ApiReallocate, NULL,
|
| + &isolate_instructions_writer);
|
| writer.WriteFullSnapshot();
|
| - *isolate_snapshot_size = writer.IsolateSnapshotSize();
|
| - *instructions_blob_size = instructions_writer.InstructionsBlobSize();
|
| - *rodata_blob_size = instructions_writer.RodataBlobSize();
|
| +
|
| + *isolate_snapshot_data_size = writer.IsolateSnapshotSize();
|
| + *isolate_snapshot_instructions_size =
|
| + isolate_instructions_writer.InstructionsBlobSize();
|
|
|
| return Api::Success();
|
| #endif
|
|
|