Index: src/d8.cc |
diff --git a/src/d8.cc b/src/d8.cc |
index 502187a9a70d9d9437689d4c98df7104910a3666..a8b90d431b930f93ae9178db04a3c47b7b7b990c 100644 |
--- a/src/d8.cc |
+++ b/src/d8.cc |
@@ -1316,6 +1316,15 @@ bool Shell::SetOptions(int argc, char* argv[]) { |
return false; |
} |
#endif // V8_SHARED |
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
+ else if (strncmp(argv[i], "--natives_blob=", 15) == 0) { |
jochen (gone - plz use gerrit)
2014/05/23 11:44:44
using - is more consistent with the other options
vogelheim
2014/05/26 12:36:03
Done.
|
+ options.natives_blob = argv[i] + 15; |
+ argv[i] = NULL; |
+ } else if (strncmp(argv[i], "--snapshot_blob=", 16) == 0) { |
+ options.snapshot_blob = argv[i] + 16; |
+ argv[i] = NULL; |
+ } |
+#endif // V8_USE_EXTERNAL_STARTUP_DATA |
} |
v8::V8::SetFlagsFromCommandLine(&argc, argv, true); |
@@ -1471,9 +1480,61 @@ class MockArrayBufferAllocator : public v8::ArrayBuffer::Allocator { |
}; |
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
+class StartupDataHandler { |
+ public: |
+ StartupDataHandler(const char* natives_blob, |
+ const char* snapshot_blob) { |
+ Load(natives_blob, &natives_, v8::V8::SetNativesDataBlob); |
+ Load(snapshot_blob, &snapshot_, v8::V8::SetSnapshotDataBlob); |
+ } |
+ |
+ ~StartupDataHandler() { |
+ delete[] natives_.data; |
+ delete[] snapshot_.data; |
+ } |
+ |
+ private: |
+ void Load(const char* blob_file, |
+ v8::StartupData* startup_data, |
+ void (*setter_fn)(v8::StartupData*)) { |
+ startup_data->data = NULL; |
+ startup_data->compressed_size = 0; |
+ startup_data->raw_size = 0; |
+ |
+ if (!blob_file) |
+ return; |
+ |
+ FILE* file = fopen(blob_file, "rb"); |
+ if (!file) |
+ return; |
+ |
+ fseek(file, 0, SEEK_END); |
+ startup_data->raw_size = ftell(file); |
+ rewind(file); |
+ |
+ startup_data->data = new char[startup_data->raw_size]; |
+ startup_data->compressed_size = fread( |
+ const_cast<char*>(startup_data->data), 1, startup_data->raw_size, |
+ file); |
+ fclose(file); |
+ |
+ if (startup_data->raw_size == startup_data->compressed_size) |
+ (*setter_fn)(startup_data); |
+ } |
+ |
+ v8::StartupData natives_; |
+ v8::StartupData snapshot_; |
+}; |
jochen (gone - plz use gerrit)
2014/05/23 11:44:44
nit. DISALLOW_COPY_AND_ASSIGN
vogelheim
2014/05/26 12:36:03
d8.cc seems to avoid including internal v8 headers
|
+#endif // V8_USE_EXTERNAL_STARTUP_DATA |
+ |
+ |
int Shell::Main(int argc, char* argv[]) { |
if (!SetOptions(argc, argv)) return 1; |
v8::V8::InitializeICU(options.icu_data_file); |
+#ifdef V8_USE_EXTERNAL_STARTUP_DATA |
+ StartupDataHandler startup_data(options.natives_blob, options.snapshot_blob); |
+#endif |
SetFlagsFromString("--trace-hydrogen-file=hydrogen.cfg"); |
SetFlagsFromString("--redirect-code-traces-to=code.asm"); |
ShellArrayBufferAllocator array_buffer_allocator; |