Chromium Code Reviews| 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; |