diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-07-26 23:21:10 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-08-01 12:14:10 -0400 |
commit | 6b6fac209c97d5961ea875d4b22f66fa97272876 (patch) | |
tree | 5b12f2e80cc7697712ca7a2db622974105593f48 /src/snapshot_creator.cc | |
parent | db8dc0e9f8c739a07089ca8077d49cf9c902ddc4 (diff) |
Optimize compile time by using asm.
Switches to using asm incbin to embed the V8 snapshot instead of
outputing C code and then compiling it.
Compile time for from_snapshot.o goes from 44s to 1s.
Diffstat (limited to 'src/snapshot_creator.cc')
-rw-r--r-- | src/snapshot_creator.cc | 65 |
1 files changed, 6 insertions, 59 deletions
diff --git a/src/snapshot_creator.cc b/src/snapshot_creator.cc index a79071a65..f821565e5 100644 --- a/src/snapshot_creator.cc +++ b/src/snapshot_creator.cc @@ -40,72 +40,17 @@ v8::StartupData MakeSnapshot(const char* js_filename, const char* js_source) { return snapshot_blob; } -class StartupDataCppWriter { - public: - StartupDataCppWriter(const char* name, const char* filename, - const std::string& data) - : name_(name), - filename_(filename), - data_(data), - file_(filename_, std::ios::binary) {} - - bool Write() { - if (file_.bad()) { - return false; - } - WritePrefix(); - WriteData(); - WriteSuffix(); - - file_.close(); - // printf("Wrote %s %d %s \n", name_, data_.size(), filename_); - return !file_.bad(); - } - - private: - void WritePrefix() { - file_ << "// Autogenerated snapshot file. Do not edit.\n\n"; - file_ << "#include \"third_party/v8/include/v8.h\"\n\n"; - file_ << "namespace deno { \n\n"; - } - - void WriteSuffix() { - char buffer[500]; - snprintf(buffer, sizeof(buffer), "v8::StartupData* StartupBlob_%s() {\n", - name_); - file_ << buffer; - snprintf(buffer, sizeof(buffer), " return &%s_blob;\n", name_); - file_ << buffer; - file_ << "}\n\n"; - file_ << "} // namespace deno\n\n"; - } - - void WriteData() { - char buffer[500]; - file_ << BinaryContentAsC(name_, data_); - snprintf(buffer, sizeof(buffer), - "static v8::StartupData %s_blob = { %s_data, %s_size };\n", name_, - name_, name_); - file_ << buffer; - } - - const char* name_; - const char* filename_; - std::string data_; - std::ofstream file_; -}; - } // namespace deno int main(int argc, char** argv) { - const char* snapshot_out_cc = argv[1]; + const char* snapshot_out_bin = argv[1]; const char* js_fn = argv[2]; v8::V8::SetFlagsFromCommandLine(&argc, argv, true); CHECK_EQ(argc, 3); CHECK_NE(js_fn, nullptr); - CHECK_NE(snapshot_out_cc, nullptr); + CHECK_NE(snapshot_out_bin, nullptr); std::string js_source; CHECK(deno::ReadFileToString(js_fn, &js_source)); @@ -114,6 +59,8 @@ int main(int argc, char** argv) { auto snapshot_blob = deno::MakeSnapshot(js_fn, js_source.c_str()); std::string snapshot_str(snapshot_blob.data, snapshot_blob.raw_size); - deno::StartupDataCppWriter writer("snapshot", snapshot_out_cc, snapshot_str); - CHECK(writer.Write()); + std::ofstream file_(snapshot_out_bin, std::ios::binary); + file_ << snapshot_str; + file_.close(); + return file_.bad(); } |