OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // Generate a snapshot file after loading all the scripts specified on the | 5 // Generate a snapshot file after loading all the scripts specified on the |
6 // command line. | 6 // command line. |
7 | 7 |
8 #include <stdio.h> | 8 #include <stdio.h> |
9 #include <stdlib.h> | 9 #include <stdlib.h> |
10 #include <string.h> | 10 #include <string.h> |
(...skipping 1216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1227 | 1227 |
1228 | 1228 |
1229 static Dart_Isolate CreateServiceIsolate(const char* script_uri, | 1229 static Dart_Isolate CreateServiceIsolate(const char* script_uri, |
1230 const char* main, | 1230 const char* main, |
1231 const char* package_root, | 1231 const char* package_root, |
1232 const char* package_config, | 1232 const char* package_config, |
1233 Dart_IsolateFlags* flags, | 1233 Dart_IsolateFlags* flags, |
1234 void* data, | 1234 void* data, |
1235 char** error) { | 1235 char** error) { |
1236 IsolateData* isolate_data = | 1236 IsolateData* isolate_data = |
1237 new IsolateData(script_uri, package_root, package_config); | 1237 new IsolateData(script_uri, package_root, package_config, NULL); |
1238 Dart_Isolate isolate = NULL; | 1238 Dart_Isolate isolate = NULL; |
1239 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, NULL, | 1239 isolate = Dart_CreateIsolate(script_uri, main, isolate_snapshot_data, NULL, |
1240 NULL, isolate_data, error); | 1240 NULL, isolate_data, error); |
1241 | 1241 |
1242 if (isolate == NULL) { | 1242 if (isolate == NULL) { |
1243 Log::PrintErr("Error: Could not create service isolate\n"); | 1243 Log::PrintErr("Error: Could not create service isolate\n"); |
1244 return NULL; | 1244 return NULL; |
1245 } | 1245 } |
1246 | 1246 |
1247 Dart_EnterScope(); | 1247 Dart_EnterScope(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1323 init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; | 1323 init_params.version = DART_INITIALIZE_PARAMS_CURRENT_VERSION; |
1324 if (app_script_name != NULL) { | 1324 if (app_script_name != NULL) { |
1325 init_params.create = CreateServiceIsolate; | 1325 init_params.create = CreateServiceIsolate; |
1326 } | 1326 } |
1327 init_params.file_open = DartUtils::OpenFile; | 1327 init_params.file_open = DartUtils::OpenFile; |
1328 init_params.file_read = DartUtils::ReadFile; | 1328 init_params.file_read = DartUtils::ReadFile; |
1329 init_params.file_write = DartUtils::WriteFile; | 1329 init_params.file_write = DartUtils::WriteFile; |
1330 init_params.file_close = DartUtils::CloseFile; | 1330 init_params.file_close = DartUtils::CloseFile; |
1331 init_params.entropy_source = DartUtils::EntropySource; | 1331 init_params.entropy_source = DartUtils::EntropySource; |
1332 | 1332 |
| 1333 MappedMemory* mapped_vm_snapshot_data = NULL; |
| 1334 MappedMemory* mapped_isolate_snapshot_data = NULL; |
1333 if (snapshot_kind == kScript) { | 1335 if (snapshot_kind == kScript) { |
1334 File* file = File::Open(vm_snapshot_data_filename, File::kRead); | 1336 File* file = File::Open(vm_snapshot_data_filename, File::kRead); |
1335 if (file == NULL) { | 1337 if (file == NULL) { |
1336 Log::PrintErr("Failed to open: %s\n", vm_snapshot_data_filename); | 1338 Log::PrintErr("Failed to open: %s\n", vm_snapshot_data_filename); |
1337 return kErrorExitCode; | 1339 return kErrorExitCode; |
1338 } | 1340 } |
1339 void* buffer = file->Map(File::kReadOnly, 0, file->Length()); | 1341 mapped_vm_snapshot_data = file->Map(File::kReadOnly, 0, file->Length()); |
1340 if (buffer == NULL) { | 1342 if (mapped_vm_snapshot_data == NULL) { |
1341 Log::PrintErr("Failed to read: %s\n", vm_snapshot_data_filename); | 1343 Log::PrintErr("Failed to read: %s\n", vm_snapshot_data_filename); |
1342 return kErrorExitCode; | 1344 return kErrorExitCode; |
1343 } | 1345 } |
1344 file->Close(); | 1346 file->Close(); |
1345 init_params.vm_snapshot_data = reinterpret_cast<const uint8_t*>(buffer); | 1347 init_params.vm_snapshot_data = |
| 1348 reinterpret_cast<const uint8_t*>(mapped_vm_snapshot_data->address()); |
1346 | 1349 |
1347 file = File::Open(isolate_snapshot_data_filename, File::kRead); | 1350 file = File::Open(isolate_snapshot_data_filename, File::kRead); |
1348 if (file == NULL) { | 1351 if (file == NULL) { |
1349 Log::PrintErr("Failed to open: %s\n", isolate_snapshot_data_filename); | 1352 Log::PrintErr("Failed to open: %s\n", isolate_snapshot_data_filename); |
1350 return kErrorExitCode; | 1353 return kErrorExitCode; |
1351 } | 1354 } |
1352 buffer = file->Map(File::kReadOnly, 0, file->Length()); | 1355 mapped_isolate_snapshot_data = |
1353 if (buffer == NULL) { | 1356 file->Map(File::kReadOnly, 0, file->Length()); |
| 1357 if (mapped_isolate_snapshot_data == NULL) { |
1354 Log::PrintErr("Failed to read: %s\n", isolate_snapshot_data_filename); | 1358 Log::PrintErr("Failed to read: %s\n", isolate_snapshot_data_filename); |
1355 return kErrorExitCode; | 1359 return kErrorExitCode; |
1356 } | 1360 } |
1357 file->Close(); | 1361 file->Close(); |
1358 isolate_snapshot_data = reinterpret_cast<const uint8_t*>(buffer); | 1362 isolate_snapshot_data = reinterpret_cast<const uint8_t*>( |
| 1363 mapped_isolate_snapshot_data->address()); |
1359 } | 1364 } |
1360 | 1365 |
1361 char* error = Dart_Initialize(&init_params); | 1366 char* error = Dart_Initialize(&init_params); |
1362 if (error != NULL) { | 1367 if (error != NULL) { |
1363 Log::PrintErr("VM initialization failed: %s\n", error); | 1368 Log::PrintErr("VM initialization failed: %s\n", error); |
1364 free(error); | 1369 free(error); |
1365 return kErrorExitCode; | 1370 return kErrorExitCode; |
1366 } | 1371 } |
1367 | 1372 |
1368 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, | 1373 IsolateData* isolate_data = new IsolateData(NULL, commandline_package_root, |
1369 commandline_packages_file); | 1374 commandline_packages_file, NULL); |
1370 Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, | 1375 Dart_Isolate isolate = Dart_CreateIsolate(NULL, NULL, isolate_snapshot_data, |
1371 NULL, NULL, isolate_data, &error); | 1376 NULL, NULL, isolate_data, &error); |
1372 if (isolate == NULL) { | 1377 if (isolate == NULL) { |
1373 Log::PrintErr("Error: %s\n", error); | 1378 Log::PrintErr("Error: %s\n", error); |
1374 free(error); | 1379 free(error); |
1375 exit(kErrorExitCode); | 1380 exit(kErrorExitCode); |
1376 } | 1381 } |
1377 | 1382 |
1378 Dart_Handle result; | 1383 Dart_Handle result; |
1379 Dart_Handle library; | 1384 Dart_Handle library; |
(...skipping 27 matching lines...) Expand all Loading... |
1407 result = DartUtils::SetupPackageRoot(commandline_package_root, | 1412 result = DartUtils::SetupPackageRoot(commandline_package_root, |
1408 commandline_packages_file); | 1413 commandline_packages_file); |
1409 CHECK_RESULT(result); | 1414 CHECK_RESULT(result); |
1410 | 1415 |
1411 UriResolverIsolateScope::isolate = isolate; | 1416 UriResolverIsolateScope::isolate = isolate; |
1412 Dart_ExitScope(); | 1417 Dart_ExitScope(); |
1413 Dart_ExitIsolate(); | 1418 Dart_ExitIsolate(); |
1414 | 1419 |
1415 // Now we create an isolate into which we load all the code that needs to | 1420 // Now we create an isolate into which we load all the code that needs to |
1416 // be in the snapshot. | 1421 // be in the snapshot. |
1417 isolate_data = new IsolateData(NULL, NULL, NULL); | 1422 isolate_data = new IsolateData(NULL, NULL, NULL, NULL); |
1418 const uint8_t* kernel = NULL; | 1423 const uint8_t* kernel = NULL; |
1419 intptr_t kernel_length = 0; | 1424 intptr_t kernel_length = 0; |
1420 const bool is_kernel_file = | 1425 const bool is_kernel_file = |
1421 TryReadKernel(app_script_name, &kernel, &kernel_length); | 1426 TryReadKernel(app_script_name, &kernel, &kernel_length); |
1422 | 1427 |
1423 void* kernel_program = NULL; | 1428 void* kernel_program = NULL; |
1424 if (is_kernel_file) { | 1429 if (is_kernel_file) { |
1425 kernel_program = Dart_ReadKernelBinary(kernel, kernel_length); | 1430 kernel_program = Dart_ReadKernelBinary(kernel, kernel_length); |
1426 free(const_cast<uint8_t*>(kernel)); | 1431 free(const_cast<uint8_t*>(kernel)); |
1427 } | 1432 } |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1503 | 1508 |
1504 Dart_ExitScope(); | 1509 Dart_ExitScope(); |
1505 Dart_ShutdownIsolate(); | 1510 Dart_ShutdownIsolate(); |
1506 } | 1511 } |
1507 error = Dart_Cleanup(); | 1512 error = Dart_Cleanup(); |
1508 if (error != NULL) { | 1513 if (error != NULL) { |
1509 Log::PrintErr("VM cleanup failed: %s\n", error); | 1514 Log::PrintErr("VM cleanup failed: %s\n", error); |
1510 free(error); | 1515 free(error); |
1511 } | 1516 } |
1512 EventHandler::Stop(); | 1517 EventHandler::Stop(); |
| 1518 delete mapped_vm_snapshot_data; |
| 1519 delete mapped_isolate_snapshot_data; |
1513 return 0; | 1520 return 0; |
1514 } | 1521 } |
1515 | 1522 |
1516 } // namespace bin | 1523 } // namespace bin |
1517 } // namespace dart | 1524 } // namespace dart |
1518 | 1525 |
1519 int main(int argc, char** argv) { | 1526 int main(int argc, char** argv) { |
1520 return dart::bin::main(argc, argv); | 1527 return dart::bin::main(argc, argv); |
1521 } | 1528 } |
OLD | NEW |