From ff48eca5403140b134a3e6a772ffb6f8905fae3e Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 05:34:03 +0200 Subject: Expose deno::from_snapshot() constructor --- deno2/from_snapshot.cc | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 deno2/from_snapshot.cc (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc new file mode 100644 index 000000000..b743b441f --- /dev/null +++ b/deno2/from_snapshot.cc @@ -0,0 +1,50 @@ +// Copyright 2018 Ryan Dahl +// All rights reserved. MIT License. +#include +#include +#include +#include +#include + +#include "v8/include/libplatform/libplatform.h" +#include "v8/include/v8.h" + +#include "./deno_internal.h" +#include "include/deno.h" + +namespace deno { + +#include "natives_deno.cc" +#include "snapshot_deno.cc" + +Deno* from_snapshot(void* data, RecvCallback cb) { + auto natives_blob = *StartupBlob_natives(); + printf("natives_blob %d bytes\n", natives_blob.raw_size); + + auto snapshot_blob = *StartupBlob_snapshot(); + printf("snapshot_blob %d bytes\n", snapshot_blob.raw_size); + + v8::V8::SetNativesDataBlob(&natives_blob); + v8::V8::SetSnapshotDataBlob(&snapshot_blob); + + Deno* d = new Deno; + d->cb = cb; + d->data = data; + v8::Isolate::CreateParams params; + params.array_buffer_allocator = + v8::ArrayBuffer::Allocator::NewDefaultAllocator(); + params.external_references = external_references; + v8::Isolate* isolate = v8::Isolate::New(params); + deno_add_isolate(d, isolate); + + v8::Isolate::Scope isolate_scope(isolate); + { + v8::HandleScope handle_scope(isolate); + auto context = v8::Context::New(isolate); + d->context.Reset(d->isolate, context); + } + + return d; +} + +} // namespace deno -- cgit v1.2.3 From 9296b21b87eec3f01bee465fcb2b64c4ea14514b Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 14:18:15 +0200 Subject: Use C linkage in deno.h --- deno2/from_snapshot.cc | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index b743b441f..6702aa419 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -17,7 +17,7 @@ namespace deno { #include "natives_deno.cc" #include "snapshot_deno.cc" -Deno* from_snapshot(void* data, RecvCallback cb) { +Deno* NewFromSnapshot(void* data, RecvCallback cb) { auto natives_blob = *StartupBlob_natives(); printf("natives_blob %d bytes\n", natives_blob.raw_size); @@ -35,7 +35,7 @@ Deno* from_snapshot(void* data, RecvCallback cb) { v8::ArrayBuffer::Allocator::NewDefaultAllocator(); params.external_references = external_references; v8::Isolate* isolate = v8::Isolate::New(params); - deno_add_isolate(d, isolate); + AddIsolate(d, isolate); v8::Isolate::Scope isolate_scope(isolate); { @@ -48,3 +48,10 @@ Deno* from_snapshot(void* data, RecvCallback cb) { } } // namespace deno + +extern "C" { + +Deno* deno_new(void* data, RecvCallback cb) { + return deno::NewFromSnapshot(data, cb); +} +} -- cgit v1.2.3 From c0401a4096b55cfacf0aa848df1ba74d48a05e3d Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 14:24:39 +0200 Subject: Organize BUILD.gn --- deno2/from_snapshot.cc | 1 - 1 file changed, 1 deletion(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index 6702aa419..1a55a1ef0 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -6,7 +6,6 @@ #include #include -#include "v8/include/libplatform/libplatform.h" #include "v8/include/v8.h" #include "./deno_internal.h" -- cgit v1.2.3 From 041e503838d1f030faca08d93de4aaadf0bc4b98 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Sun, 10 Jun 2018 14:34:59 +0200 Subject: Minor libdeno clean ups. --- deno2/from_snapshot.cc | 3 --- 1 file changed, 3 deletions(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index 1a55a1ef0..bec29d2dc 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -18,10 +18,7 @@ namespace deno { Deno* NewFromSnapshot(void* data, RecvCallback cb) { auto natives_blob = *StartupBlob_natives(); - printf("natives_blob %d bytes\n", natives_blob.raw_size); - auto snapshot_blob = *StartupBlob_snapshot(); - printf("snapshot_blob %d bytes\n", snapshot_blob.raw_size); v8::V8::SetNativesDataBlob(&natives_blob); v8::V8::SetSnapshotDataBlob(&snapshot_blob); -- cgit v1.2.3 From 2791a49ecff8f1ec0f83e4df8167dd545173b916 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 16:48:21 +0200 Subject: s/RecvCallback/deno_recv_cb/g --- deno2/from_snapshot.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index bec29d2dc..db5b0fc8e 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -16,7 +16,7 @@ namespace deno { #include "natives_deno.cc" #include "snapshot_deno.cc" -Deno* NewFromSnapshot(void* data, RecvCallback cb) { +Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { auto natives_blob = *StartupBlob_natives(); auto snapshot_blob = *StartupBlob_snapshot(); @@ -46,8 +46,7 @@ Deno* NewFromSnapshot(void* data, RecvCallback cb) { } // namespace deno extern "C" { - -Deno* deno_new(void* data, RecvCallback cb) { +Deno* deno_new(void* data, deno_recv_cb cb) { return deno::NewFromSnapshot(data, cb); } } -- cgit v1.2.3 From 0e07e16dd63992f5f989dc99c891d53d930a2d5b Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 17:01:35 +0200 Subject: Add mock_runtime_test. --- deno2/from_snapshot.cc | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index db5b0fc8e..3c15cdc77 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -13,8 +13,13 @@ namespace deno { +#ifdef DENO_MOCK_RUNTIME +#include "natives_mock_runtime.cc" +#include "snapshot_mock_runtime.cc" +#else #include "natives_deno.cc" #include "snapshot_deno.cc" +#endif Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { auto natives_blob = *StartupBlob_natives(); @@ -33,6 +38,7 @@ Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { v8::Isolate* isolate = v8::Isolate::New(params); AddIsolate(d, isolate); + v8::Locker locker(isolate); v8::Isolate::Scope isolate_scope(isolate); { v8::HandleScope handle_scope(isolate); -- cgit v1.2.3 From 2443f7efee9c04f9331743a5e7ca5c71396f2004 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Mon, 11 Jun 2018 19:18:53 +0200 Subject: Use pub/sub instead of send/recv --- deno2/from_snapshot.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index 3c15cdc77..adb404bf0 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -21,7 +21,7 @@ namespace deno { #include "snapshot_deno.cc" #endif -Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { +Deno* NewFromSnapshot(void* data, deno_sub_cb cb) { auto natives_blob = *StartupBlob_natives(); auto snapshot_blob = *StartupBlob_snapshot(); @@ -52,7 +52,7 @@ Deno* NewFromSnapshot(void* data, deno_recv_cb cb) { } // namespace deno extern "C" { -Deno* deno_new(void* data, deno_recv_cb cb) { +Deno* deno_new(void* data, deno_sub_cb cb) { return deno::NewFromSnapshot(data, cb); } } -- cgit v1.2.3 From 7784cc2c1537a23b8b8ffa634b1a9b1ddf88886a Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Tue, 12 Jun 2018 06:36:01 +0200 Subject: Fix protobufjs snapshotting. --- deno2/from_snapshot.cc | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'deno2/from_snapshot.cc') diff --git a/deno2/from_snapshot.cc b/deno2/from_snapshot.cc index adb404bf0..68185ce6d 100644 --- a/deno2/from_snapshot.cc +++ b/deno2/from_snapshot.cc @@ -21,12 +21,28 @@ namespace deno { #include "snapshot_deno.cc" #endif +std::vector deserialized_data; + +void DeserializeInternalFields(v8::Local holder, int index, + v8::StartupData payload, void* data) { + assert(data == nullptr); // TODO(ry) pass Deno* object here. + if (payload.raw_size == 0) { + holder->SetAlignedPointerInInternalField(index, nullptr); + return; + } + InternalFieldData* embedder_field = new InternalFieldData{0}; + memcpy(embedder_field, payload.data, payload.raw_size); + holder->SetAlignedPointerInInternalField(index, embedder_field); + deserialized_data.push_back(embedder_field); +} + Deno* NewFromSnapshot(void* data, deno_sub_cb cb) { auto natives_blob = *StartupBlob_natives(); auto snapshot_blob = *StartupBlob_snapshot(); v8::V8::SetNativesDataBlob(&natives_blob); v8::V8::SetSnapshotDataBlob(&snapshot_blob); + v8::DeserializeInternalFieldsCallback(DeserializeInternalFields, nullptr); Deno* d = new Deno; d->cb = cb; @@ -42,7 +58,11 @@ Deno* NewFromSnapshot(void* data, deno_sub_cb cb) { v8::Isolate::Scope isolate_scope(isolate); { v8::HandleScope handle_scope(isolate); - auto context = v8::Context::New(isolate); + auto context = + v8::Context::New(isolate, nullptr, v8::MaybeLocal(), + v8::MaybeLocal(), + v8::DeserializeInternalFieldsCallback( + DeserializeInternalFields, nullptr)); d->context.Reset(d->isolate, context); } -- cgit v1.2.3