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/from_snapshot.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/from_snapshot.cc')
-rw-r--r-- | src/from_snapshot.cc | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/from_snapshot.cc b/src/from_snapshot.cc index ac48e8a20..2575ec32f 100644 --- a/src/from_snapshot.cc +++ b/src/from_snapshot.cc @@ -10,11 +10,21 @@ #include "deno.h" #include "internal.h" +extern const char deno_snapshot_start asm("deno_snapshot_start"); +extern const char deno_snapshot_end asm("deno_snapshot_end"); #ifdef DENO_MOCK_RUNTIME -#include "snapshot_mock_runtime.cc" +asm(".data\n" + "deno_snapshot_start: .incbin \"gen/snapshot_mock_runtime.bin\"\n" + "deno_snapshot_end:\n" + ".globl deno_snapshot_start;\n" + ".globl deno_snapshot_end;"); #else -#include "snapshot_deno.cc" -#endif +asm(".data\n" + "deno_snapshot_start: .incbin \"gen/snapshot_deno.bin\"\n" + "deno_snapshot_end:\n" + ".globl deno_snapshot_start;\n" + ".globl deno_snapshot_end;"); +#endif // DENO_MOCK_RUNTIME namespace deno { @@ -42,7 +52,13 @@ Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { params.array_buffer_allocator = v8::ArrayBuffer::Allocator::NewDefaultAllocator(); params.external_references = external_references; - params.snapshot_blob = StartupBlob_snapshot(); + + CHECK_NE(&deno_snapshot_start, nullptr); + int snapshot_len = + static_cast<int>(&deno_snapshot_end - &deno_snapshot_start); + static v8::StartupData snapshot = {&deno_snapshot_start, snapshot_len}; + params.snapshot_blob = &snapshot; + v8::Isolate* isolate = v8::Isolate::New(params); AddIsolate(d, isolate); |