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

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

Issue 1507943002: Add ./tools/test.py -c precompiler -r dart_precompiled. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 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 | « no previous file | runtime/bin/platform.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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 <stdlib.h> 5 #include <stdlib.h>
6 #include <string.h> 6 #include <string.h>
7 #include <stdio.h> 7 #include <stdio.h>
8 8
9 #include "include/dart_api.h" 9 #include "include/dart_api.h"
10 #include "include/dart_tools_api.h" 10 #include "include/dart_tools_api.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 // Global flag that is used to indicate that we want to compile all the 64 // Global flag that is used to indicate that we want to compile all the
65 // dart functions before running main and not compile anything thereafter. 65 // dart functions before running main and not compile anything thereafter.
66 static bool has_gen_precompiled_snapshot = false; 66 static bool has_gen_precompiled_snapshot = false;
67 67
68 68
69 // Global flag that is used to indicate that we want to run from a precompiled 69 // Global flag that is used to indicate that we want to run from a precompiled
70 // snapshot. 70 // snapshot.
71 static bool has_run_precompiled_snapshot = false; 71 static bool has_run_precompiled_snapshot = false;
72 72
73 73
74 // Value of the --gen/run_precompiled_snapshot flag.
75 // (This pointer points into an argv buffer and does not need to be
76 // free'd.)
77 static const char* precompiled_snapshot_directory = NULL;
78
79
74 // Global flag that is used to indicate that we want to compile everything in 80 // Global flag that is used to indicate that we want to compile everything in
75 // the same way as precompilation before main, then continue running in the 81 // the same way as precompilation before main, then continue running in the
76 // same process. 82 // same process.
77 static bool has_noopt = false; 83 static bool has_noopt = false;
78 84
79 85
80 extern const char* kPrecompiledLibraryName; 86 extern const char* kPrecompiledLibraryName;
81 extern const char* kPrecompiledSymbolName; 87 extern const char* kPrecompiledSymbolName;
82 static const char* kPrecompiledVmIsolateName = "precompiled.vmisolate"; 88 static const char* kPrecompiledVmIsolateName = "precompiled.vmisolate";
83 static const char* kPrecompiledIsolateName = "precompiled.isolate"; 89 static const char* kPrecompiledIsolateName = "precompiled.isolate";
(...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 return false; 303 return false;
298 } 304 }
299 has_compile_all = true; 305 has_compile_all = true;
300 return true; 306 return true;
301 } 307 }
302 308
303 309
304 static bool ProcessGenPrecompiledSnapshotOption( 310 static bool ProcessGenPrecompiledSnapshotOption(
305 const char* arg, 311 const char* arg,
306 CommandLineOptions* vm_options) { 312 CommandLineOptions* vm_options) {
307 ASSERT(arg != NULL);
308 if (*arg != '\0') {
309 return false;
310 }
311 // Ensure that we are not already running using a full snapshot. 313 // Ensure that we are not already running using a full snapshot.
312 if (isolate_snapshot_buffer != NULL) { 314 if (isolate_snapshot_buffer != NULL) {
313 Log::PrintErr("Precompiled snapshots must be generated with" 315 Log::PrintErr("Precompiled snapshots must be generated with"
314 " dart_no_snapshot.\n"); 316 " dart_no_snapshot.\n");
315 return false; 317 return false;
316 } 318 }
319 ASSERT(arg != NULL);
320 if ((arg[0] == '=') || (arg[0] == ':')) {
321 precompiled_snapshot_directory = &arg[1];
322 } else {
323 precompiled_snapshot_directory = arg;
324 }
317 has_gen_precompiled_snapshot = true; 325 has_gen_precompiled_snapshot = true;
318 vm_options->AddArgument("--precompilation"); 326 vm_options->AddArgument("--precompilation");
319 return true; 327 return true;
320 } 328 }
321 329
322 330
323 static bool ProcessRunPrecompiledSnapshotOption( 331 static bool ProcessRunPrecompiledSnapshotOption(
324 const char* arg, 332 const char* arg,
325 CommandLineOptions* vm_options) { 333 CommandLineOptions* vm_options) {
326 ASSERT(arg != NULL); 334 ASSERT(arg != NULL);
327 if (*arg != '\0') { 335 precompiled_snapshot_directory = arg;
328 return false; 336 if ((precompiled_snapshot_directory[0] == '=') ||
337 (precompiled_snapshot_directory[0] == ':')) {
338 precompiled_snapshot_directory = &precompiled_snapshot_directory[1];
329 } 339 }
330 has_run_precompiled_snapshot = true; 340 has_run_precompiled_snapshot = true;
331 vm_options->AddArgument("--precompilation"); 341 vm_options->AddArgument("--precompilation");
332 return true; 342 return true;
333 } 343 }
334 344
335 345
336 static bool ProcessNooptOption( 346 static bool ProcessNooptOption(
337 const char* arg, 347 const char* arg,
338 CommandLineOptions* vm_options) { 348 CommandLineOptions* vm_options) {
(...skipping 663 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 1012
1003 static void ServiceStreamCancelCallback(const char* stream_id) { 1013 static void ServiceStreamCancelCallback(const char* stream_id) {
1004 if (strcmp(stream_id, kStdoutStreamId) == 0) { 1014 if (strcmp(stream_id, kStdoutStreamId) == 0) {
1005 SetCaptureStdout(false); 1015 SetCaptureStdout(false);
1006 } else if (strcmp(stream_id, kStderrStreamId) == 0) { 1016 } else if (strcmp(stream_id, kStderrStreamId) == 0) {
1007 SetCaptureStderr(false); 1017 SetCaptureStderr(false);
1008 } 1018 }
1009 } 1019 }
1010 1020
1011 1021
1012 static void WriteSnapshotFile(const char* filename, 1022 static void WritePrecompiledSnapshotFile(const char* filename,
1013 const uint8_t* buffer, 1023 const uint8_t* buffer,
1014 const intptr_t size) { 1024 const intptr_t size) {
1015 File* file = File::Open(filename, File::kWriteTruncate); 1025 char* concat = NULL;
1026 const char* qualified_filename;
1027 if (strlen(precompiled_snapshot_directory) > 0) {
1028 intptr_t len = snprintf(NULL, 0, "%s/%s",
1029 precompiled_snapshot_directory, filename);
1030 concat = new char[len + 1];
1031 snprintf(concat, len + 1, "%s/%s",
1032 precompiled_snapshot_directory, filename);
1033 qualified_filename = concat;
1034 } else {
1035 qualified_filename = filename;
1036 }
1037
1038 File* file = File::Open(qualified_filename, File::kWriteTruncate);
1016 ASSERT(file != NULL); 1039 ASSERT(file != NULL);
1017 if (!file->WriteFully(buffer, size)) { 1040 if (!file->WriteFully(buffer, size)) {
1018 ErrorExit(kErrorExitCode, 1041 ErrorExit(kErrorExitCode,
1019 "Unable to open file %s for writing snapshot\n", 1042 "Unable to open file %s for writing snapshot\n",
1020 filename); 1043 qualified_filename);
1021 } 1044 }
1022 delete file; 1045 delete file;
1046 if (concat != NULL) {
1047 delete concat;
1048 }
1023 } 1049 }
1024 1050
1025 1051
1026 static void ReadSnapshotFile(const char* filename, 1052 static void ReadPrecompiledSnapshotFile(const char* filename,
1027 const uint8_t** buffer) { 1053 const uint8_t** buffer) {
1028 void* file = DartUtils::OpenFile(filename, false); 1054 char* concat = NULL;
1055 const char* qualified_filename;
1056 if (strlen(precompiled_snapshot_directory) > 0) {
1057 intptr_t len = snprintf(NULL, 0, "%s/%s",
1058 precompiled_snapshot_directory, filename);
1059 concat = new char[len + 1];
1060 snprintf(concat, len + 1, "%s/%s",
1061 precompiled_snapshot_directory, filename);
1062 qualified_filename = concat;
1063 } else {
1064 qualified_filename = filename;
1065 }
1066
1067 void* file = DartUtils::OpenFile(qualified_filename, false);
1029 if (file == NULL) { 1068 if (file == NULL) {
1030 ErrorExit(kErrorExitCode, 1069 ErrorExit(kErrorExitCode,
1031 "Error: Unable to open file %s for reading snapshot\n", filename); 1070 "Error: Unable to open file %s for reading snapshot\n",
1071 qualified_filename);
1032 } 1072 }
1033 intptr_t len = -1; 1073 intptr_t len = -1;
1034 DartUtils::ReadFile(buffer, &len, file); 1074 DartUtils::ReadFile(buffer, &len, file);
1035 if (*buffer == NULL || len == -1) { 1075 if (*buffer == NULL || len == -1) {
1036 ErrorExit(kErrorExitCode, 1076 ErrorExit(kErrorExitCode,
1037 "Error: Unable to read snapshot file %s\n", filename); 1077 "Error: Unable to read snapshot file %s\n", qualified_filename);
1038 } 1078 }
1039 DartUtils::CloseFile(file); 1079 DartUtils::CloseFile(file);
1080 if (concat != NULL) {
1081 delete concat;
1082 }
1040 } 1083 }
1041 1084
1042 1085
1043 static void* LoadLibrarySymbol(const char* libname, const char* symname) { 1086 static void* LoadLibrarySymbol(const char* libname, const char* symname) {
1044 void* library = Extensions::LoadExtensionLibrary(libname); 1087 void* library = Extensions::LoadExtensionLibrary(libname);
1045 if (library == NULL) { 1088 if (library == NULL) {
1046 Log::PrintErr("Error: Failed to load library '%s'\n", libname); 1089 Log::PrintErr("Error: Failed to load library '%s'\n", libname);
1047 Platform::Exit(kErrorExitCode); 1090 Platform::Exit(kErrorExitCode);
1048 } 1091 }
1049 void* symbol = Extensions::ResolveSymbol(library, symname); 1092 void* symbol = Extensions::ResolveSymbol(library, symname);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
1208 intptr_t isolate_size = 0; 1251 intptr_t isolate_size = 0;
1209 uint8_t* instructions_buffer = NULL; 1252 uint8_t* instructions_buffer = NULL;
1210 intptr_t instructions_size = 0; 1253 intptr_t instructions_size = 0;
1211 result = Dart_CreatePrecompiledSnapshot(&vm_isolate_buffer, 1254 result = Dart_CreatePrecompiledSnapshot(&vm_isolate_buffer,
1212 &vm_isolate_size, 1255 &vm_isolate_size,
1213 &isolate_buffer, 1256 &isolate_buffer,
1214 &isolate_size, 1257 &isolate_size,
1215 &instructions_buffer, 1258 &instructions_buffer,
1216 &instructions_size); 1259 &instructions_size);
1217 CHECK_RESULT(result); 1260 CHECK_RESULT(result);
1218 WriteSnapshotFile(kPrecompiledVmIsolateName, 1261 WritePrecompiledSnapshotFile(kPrecompiledVmIsolateName,
1219 vm_isolate_buffer, 1262 vm_isolate_buffer,
1220 vm_isolate_size); 1263 vm_isolate_size);
1221 WriteSnapshotFile(kPrecompiledIsolateName, 1264 WritePrecompiledSnapshotFile(kPrecompiledIsolateName,
1222 isolate_buffer, 1265 isolate_buffer,
1223 isolate_size); 1266 isolate_size);
1224 WriteSnapshotFile(kPrecompiledInstructionsName, 1267 WritePrecompiledSnapshotFile(kPrecompiledInstructionsName,
1225 instructions_buffer, 1268 instructions_buffer,
1226 instructions_size); 1269 instructions_size);
1227 } else { 1270 } else {
1228 if (has_compile_all) { 1271 if (has_compile_all) {
1229 result = Dart_CompileAll(); 1272 result = Dart_CompileAll();
1230 CHECK_RESULT(result); 1273 CHECK_RESULT(result);
1231 } 1274 }
1232 1275
1233 if (Dart_IsNull(root_lib)) { 1276 if (Dart_IsNull(root_lib)) {
1234 ErrorExit(kErrorExitCode, 1277 ErrorExit(kErrorExitCode,
1235 "Unable to find root library for '%s'\n", 1278 "Unable to find root library for '%s'\n",
1236 script_name); 1279 script_name);
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 1462
1420 Dart_SetVMFlags(vm_options.count(), vm_options.arguments()); 1463 Dart_SetVMFlags(vm_options.count(), vm_options.arguments());
1421 1464
1422 // Start event handler. 1465 // Start event handler.
1423 EventHandler::Start(); 1466 EventHandler::Start();
1424 1467
1425 const uint8_t* instructions_snapshot = NULL; 1468 const uint8_t* instructions_snapshot = NULL;
1426 if (has_run_precompiled_snapshot) { 1469 if (has_run_precompiled_snapshot) {
1427 instructions_snapshot = reinterpret_cast<const uint8_t*>( 1470 instructions_snapshot = reinterpret_cast<const uint8_t*>(
1428 LoadLibrarySymbol(kPrecompiledLibraryName, kPrecompiledSymbolName)); 1471 LoadLibrarySymbol(kPrecompiledLibraryName, kPrecompiledSymbolName));
1429 ReadSnapshotFile(kPrecompiledVmIsolateName, &vm_isolate_snapshot_buffer); 1472 ReadPrecompiledSnapshotFile(kPrecompiledVmIsolateName,
1430 ReadSnapshotFile(kPrecompiledIsolateName, &isolate_snapshot_buffer); 1473 &vm_isolate_snapshot_buffer);
1474 ReadPrecompiledSnapshotFile(kPrecompiledIsolateName,
1475 &isolate_snapshot_buffer);
1431 } 1476 }
1432 1477
1433 // Initialize the Dart VM. 1478 // Initialize the Dart VM.
1434 char* error = Dart_Initialize( 1479 char* error = Dart_Initialize(
1435 vm_isolate_snapshot_buffer, instructions_snapshot, 1480 vm_isolate_snapshot_buffer, instructions_snapshot,
1436 CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate, 1481 CreateIsolateAndSetup, NULL, NULL, ShutdownIsolate,
1437 DartUtils::OpenFile, 1482 DartUtils::OpenFile,
1438 DartUtils::ReadFile, 1483 DartUtils::ReadFile,
1439 DartUtils::WriteFile, 1484 DartUtils::WriteFile,
1440 DartUtils::CloseFile, 1485 DartUtils::CloseFile,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1491 Platform::Exit(Process::GlobalExitCode()); 1536 Platform::Exit(Process::GlobalExitCode());
1492 } 1537 }
1493 1538
1494 } // namespace bin 1539 } // namespace bin
1495 } // namespace dart 1540 } // namespace dart
1496 1541
1497 int main(int argc, char** argv) { 1542 int main(int argc, char** argv) {
1498 dart::bin::main(argc, argv); 1543 dart::bin::main(argc, argv);
1499 UNREACHABLE(); 1544 UNREACHABLE();
1500 } 1545 }
OLDNEW
« no previous file with comments | « no previous file | runtime/bin/platform.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698