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

Unified Diff: runtime/bin/gen_snapshot.cc

Issue 1023753006: First step towards splitting a full snapshot into a vm isolate snapshot and a (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 5 years, 9 months 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 | « runtime/bin/bin.gypi ('k') | runtime/bin/main.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/gen_snapshot.cc
===================================================================
--- runtime/bin/gen_snapshot.cc (revision 44745)
+++ runtime/bin/gen_snapshot.cc (working copy)
@@ -25,7 +25,6 @@
#define CHECK_RESULT(result) \
if (Dart_IsError(result)) { \
- free(snapshot_buffer); \
Log::PrintErr("Error: %s", Dart_GetError(result)); \
Dart_ExitScope(); \
Dart_ShutdownIsolate(); \
@@ -35,9 +34,9 @@
// Global state that indicates whether a snapshot is to be created and
// if so which file to write the snapshot into.
-static const char* snapshot_filename = NULL;
+static const char* vm_isolate_snapshot_filename = NULL;
+static const char* isolate_snapshot_filename = NULL;
static const char* package_root = NULL;
-static uint8_t* snapshot_buffer = NULL;
// Global state which contains a pointer to the script name for which
@@ -67,10 +66,10 @@
}
-static bool ProcessSnapshotOption(const char* option) {
- const char* name = ProcessOption(option, "--snapshot=");
+static bool ProcessVmIsolateSnapshotOption(const char* option) {
+ const char* name = ProcessOption(option, "--vm_isolate_snapshot=");
if (name != NULL) {
- snapshot_filename = name;
+ vm_isolate_snapshot_filename = name;
return true;
}
return false;
@@ -77,6 +76,16 @@
}
+static bool ProcessIsolateSnapshotOption(const char* option) {
+ const char* name = ProcessOption(option, "--isolate_snapshot=");
+ if (name != NULL) {
+ isolate_snapshot_filename = name;
+ return true;
+ }
+ return false;
+}
+
+
static bool ProcessPackageRootOption(const char* option) {
const char* name = ProcessOption(option, "--package_root=");
if (name != NULL) {
@@ -114,7 +123,8 @@
// Parse out the vm options.
while ((i < argc) && IsValidFlag(argv[i], kPrefix, kPrefixLen)) {
- if (ProcessSnapshotOption(argv[i]) ||
+ if (ProcessVmIsolateSnapshotOption(argv[i]) ||
+ ProcessIsolateSnapshotOption(argv[i]) ||
ProcessURLmappingOption(argv[i]) ||
ProcessPackageRootOption(argv[i])) {
i += 1;
@@ -132,20 +142,27 @@
*script_name = NULL;
}
- if (snapshot_filename == NULL) {
- Log::PrintErr("No snapshot output file specified.\n\n");
+ if (vm_isolate_snapshot_filename == NULL) {
+ Log::PrintErr("No vm isolate snapshot output file specified.\n\n");
return -1;
}
+ if (isolate_snapshot_filename == NULL) {
+ Log::PrintErr("No isolate snapshot output file specified.\n\n");
+ return -1;
+ }
+
return 0;
}
-static void WriteSnapshotFile(const uint8_t* buffer, const intptr_t size) {
- File* file = File::Open(snapshot_filename, File::kWriteTruncate);
+static void WriteSnapshotFile(const char* filename,
+ const uint8_t* buffer,
+ const intptr_t size) {
+ File* file = File::Open(filename, File::kWriteTruncate);
ASSERT(file != NULL);
if (!file->WriteFully(buffer, size)) {
- Log::PrintErr("Error: Failed to write full snapshot.\n\n");
+ Log::PrintErr("Error: Failed to write snapshot file.\n\n");
}
delete file;
}
@@ -438,15 +455,26 @@
static void CreateAndWriteSnapshot() {
Dart_Handle result;
- uint8_t* buffer = NULL;
- intptr_t size = 0;
+ uint8_t* vm_isolate_buffer = NULL;
+ intptr_t vm_isolate_size = 0;
+ uint8_t* isolate_buffer = NULL;
+ intptr_t isolate_size = 0;
// First create a snapshot.
- result = Dart_CreateSnapshot(&buffer, &size);
+ result = Dart_CreateSnapshot(&vm_isolate_buffer,
+ &vm_isolate_size,
+ &isolate_buffer,
+ &isolate_size);
CHECK_RESULT(result);
- // Now write the snapshot out to specified file and exit.
- WriteSnapshotFile(buffer, size);
+ // Now write the vm isolate and isolate snapshots out to the
+ // specified file and exit.
+ WriteSnapshotFile(vm_isolate_snapshot_filename,
+ vm_isolate_buffer,
+ vm_isolate_size);
+ WriteSnapshotFile(isolate_snapshot_filename,
+ isolate_buffer,
+ isolate_size);
Dart_ExitScope();
// Shutdown the isolate.
@@ -510,7 +538,8 @@
// Initialize the Dart VM.
// Note: We don't expect isolates to be created from dart code during
// snapshot generation.
- if (!Dart_Initialize(NULL, NULL, NULL, NULL,
+ if (!Dart_Initialize(NULL,
+ NULL, NULL, NULL, NULL,
DartUtils::OpenFile,
DartUtils::ReadFile,
DartUtils::WriteFile,
@@ -532,7 +561,8 @@
Dart_Handle library;
Dart_EnterScope();
- ASSERT(snapshot_filename != NULL);
+ ASSERT(vm_isolate_snapshot_filename != NULL);
+ ASSERT(isolate_snapshot_filename != NULL);
// Load up the script before a snapshot is created.
if (app_script_name != NULL) {
// This is the case of a custom embedder (e.g: dartium) trying to
« no previous file with comments | « runtime/bin/bin.gypi ('k') | runtime/bin/main.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698