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

Unified 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/bin/platform.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/main.cc
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 7fc19c44bc57c9820624857acbd946d9c888b845..fcf53999b87dc83bd3e5a94ea9dc92228ed51c79 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -71,6 +71,12 @@ static bool has_gen_precompiled_snapshot = false;
static bool has_run_precompiled_snapshot = false;
+// Value of the --gen/run_precompiled_snapshot flag.
+// (This pointer points into an argv buffer and does not need to be
+// free'd.)
+static const char* precompiled_snapshot_directory = NULL;
+
+
// Global flag that is used to indicate that we want to compile everything in
// the same way as precompilation before main, then continue running in the
// same process.
@@ -304,16 +310,18 @@ static bool ProcessCompileAllOption(const char* arg,
static bool ProcessGenPrecompiledSnapshotOption(
const char* arg,
CommandLineOptions* vm_options) {
- ASSERT(arg != NULL);
- if (*arg != '\0') {
- return false;
- }
// Ensure that we are not already running using a full snapshot.
if (isolate_snapshot_buffer != NULL) {
Log::PrintErr("Precompiled snapshots must be generated with"
" dart_no_snapshot.\n");
return false;
}
+ ASSERT(arg != NULL);
+ if ((arg[0] == '=') || (arg[0] == ':')) {
+ precompiled_snapshot_directory = &arg[1];
+ } else {
+ precompiled_snapshot_directory = arg;
+ }
has_gen_precompiled_snapshot = true;
vm_options->AddArgument("--precompilation");
return true;
@@ -324,8 +332,10 @@ static bool ProcessRunPrecompiledSnapshotOption(
const char* arg,
CommandLineOptions* vm_options) {
ASSERT(arg != NULL);
- if (*arg != '\0') {
- return false;
+ precompiled_snapshot_directory = arg;
+ if ((precompiled_snapshot_directory[0] == '=') ||
+ (precompiled_snapshot_directory[0] == ':')) {
+ precompiled_snapshot_directory = &precompiled_snapshot_directory[1];
}
has_run_precompiled_snapshot = true;
vm_options->AddArgument("--precompilation");
@@ -1009,34 +1019,67 @@ static void ServiceStreamCancelCallback(const char* stream_id) {
}
-static void WriteSnapshotFile(const char* filename,
- const uint8_t* buffer,
- const intptr_t size) {
- File* file = File::Open(filename, File::kWriteTruncate);
+static void WritePrecompiledSnapshotFile(const char* filename,
+ const uint8_t* buffer,
+ const intptr_t size) {
+ char* concat = NULL;
+ const char* qualified_filename;
+ if (strlen(precompiled_snapshot_directory) > 0) {
+ intptr_t len = snprintf(NULL, 0, "%s/%s",
+ precompiled_snapshot_directory, filename);
+ concat = new char[len + 1];
+ snprintf(concat, len + 1, "%s/%s",
+ precompiled_snapshot_directory, filename);
+ qualified_filename = concat;
+ } else {
+ qualified_filename = filename;
+ }
+
+ File* file = File::Open(qualified_filename, File::kWriteTruncate);
ASSERT(file != NULL);
if (!file->WriteFully(buffer, size)) {
ErrorExit(kErrorExitCode,
"Unable to open file %s for writing snapshot\n",
- filename);
+ qualified_filename);
}
delete file;
+ if (concat != NULL) {
+ delete concat;
+ }
}
-static void ReadSnapshotFile(const char* filename,
- const uint8_t** buffer) {
- void* file = DartUtils::OpenFile(filename, false);
+static void ReadPrecompiledSnapshotFile(const char* filename,
+ const uint8_t** buffer) {
+ char* concat = NULL;
+ const char* qualified_filename;
+ if (strlen(precompiled_snapshot_directory) > 0) {
+ intptr_t len = snprintf(NULL, 0, "%s/%s",
+ precompiled_snapshot_directory, filename);
+ concat = new char[len + 1];
+ snprintf(concat, len + 1, "%s/%s",
+ precompiled_snapshot_directory, filename);
+ qualified_filename = concat;
+ } else {
+ qualified_filename = filename;
+ }
+
+ void* file = DartUtils::OpenFile(qualified_filename, false);
if (file == NULL) {
ErrorExit(kErrorExitCode,
- "Error: Unable to open file %s for reading snapshot\n", filename);
+ "Error: Unable to open file %s for reading snapshot\n",
+ qualified_filename);
}
intptr_t len = -1;
DartUtils::ReadFile(buffer, &len, file);
if (*buffer == NULL || len == -1) {
ErrorExit(kErrorExitCode,
- "Error: Unable to read snapshot file %s\n", filename);
+ "Error: Unable to read snapshot file %s\n", qualified_filename);
}
DartUtils::CloseFile(file);
+ if (concat != NULL) {
+ delete concat;
+ }
}
@@ -1215,15 +1258,15 @@ bool RunMainIsolate(const char* script_name,
&instructions_buffer,
&instructions_size);
CHECK_RESULT(result);
- WriteSnapshotFile(kPrecompiledVmIsolateName,
- vm_isolate_buffer,
- vm_isolate_size);
- WriteSnapshotFile(kPrecompiledIsolateName,
- isolate_buffer,
- isolate_size);
- WriteSnapshotFile(kPrecompiledInstructionsName,
- instructions_buffer,
- instructions_size);
+ WritePrecompiledSnapshotFile(kPrecompiledVmIsolateName,
+ vm_isolate_buffer,
+ vm_isolate_size);
+ WritePrecompiledSnapshotFile(kPrecompiledIsolateName,
+ isolate_buffer,
+ isolate_size);
+ WritePrecompiledSnapshotFile(kPrecompiledInstructionsName,
+ instructions_buffer,
+ instructions_size);
} else {
if (has_compile_all) {
result = Dart_CompileAll();
@@ -1426,8 +1469,10 @@ void main(int argc, char** argv) {
if (has_run_precompiled_snapshot) {
instructions_snapshot = reinterpret_cast<const uint8_t*>(
LoadLibrarySymbol(kPrecompiledLibraryName, kPrecompiledSymbolName));
- ReadSnapshotFile(kPrecompiledVmIsolateName, &vm_isolate_snapshot_buffer);
- ReadSnapshotFile(kPrecompiledIsolateName, &isolate_snapshot_buffer);
+ ReadPrecompiledSnapshotFile(kPrecompiledVmIsolateName,
+ &vm_isolate_snapshot_buffer);
+ ReadPrecompiledSnapshotFile(kPrecompiledIsolateName,
+ &isolate_snapshot_buffer);
}
// Initialize the Dart VM.
« 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